ארגומנטים של מכשירי מדידה למדדי מיקרו

מגדירים את ההתנהגות של Microbenchmark באמצעות ארגומנטים של המכשיר הבאים. אפשר להוסיף אותם להגדרות של Gradle או להחיל אותם ישירות כשמריצים את המכשיר משורת הפקודה. כדי להגדיר את הארגומנטים האלה לכל ההרצות של בדיקות ב-Android Studio ובשורת הפקודה, מוסיפים אותם ל-testInstrumentationRunnerArguments:

android {
    defaultConfig {
        // ...
        testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
    }
}

אפשר גם להגדיר ארגומנטים של מכשור כשמריצים את הבדיקות המשוות מ-Android Studio. כדי לשנות את הארגומנטים:

  1. כדי לערוך את הגדרת ההרצה, לוחצים על עריכה ובוחרים את ההגדרה שרוצים לערוך.
    איור 1. עורכים את הגדרות ההרצה.
  2. כדי לערוך את ארגומנטי המדידה, לוחצים על לצד השדה Instrumentation arguments (ארגומנטי מדידה).
    איור 2. עורכים את ארגומנט המדידה.
  3. לוחצים על ומוסיפים את ארגומנט המכשור הנדרש.
    איור 3. מוסיפים את ארגומנט המדידה.

אם מריצים את הבדיקה מהפקודה, משתמשים ב--P android.testInstrumentationRunnerArguments.[name of the argument]:

./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.profiling.mode=StackSampling

אם אתם מפעילים פקודה של כלי ישירות (מה שיכול לקרות בסביבות בדיקה של CI), מעבירים את הארגומנט אל am instrument באמצעות -e:

adb shell am instrument -e androidx.benchmark.profiling.mode StackSampling -w com.example.macrobenchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

מידע נוסף על הגדרת השוואה לשוק ב-CI זמין במאמר בנושא השוואה לשוק ב-CI

androidx.benchmark.cpuEventCounter.enable (experimental)

סופר את אירועי המעבד שצוינו ב-androidx.benchmark.cupEventCounter.events. נדרשת גישת root.

  • סוג הארגומנט: בוליאני
  • ברירת המחדל היא: false

androidx.benchmark.cpuEventCounter.events (ניסיוני)

מציינת אילו סוגים של אירועי CPU ייספרו. כדי להשתמש בארגומנט הזה, צריך להגדיר את androidx.benchmark.cpuEventCounter.enable ל-true.

  • סוג הארגומנט: רשימה של מחרוזות שמופרדות בפסיקים
  • האפשרויות הזמינות:
    • Instructions
    • CPUCycles
    • L1DReferences
    • L1DMisses
    • BranchInstructions
    • BranchMisses
    • L1IReferences
    • L1IMisses
  • ברירת המחדל: Instructions, CpuCycles, BranchMisses

androidx.benchmark.dryRunMode.enable

מאפשרת להריץ בדיקות השוואה במעגל יחיד כדי לוודא שהן פועלות כמו שצריך.

כלומר:

  • שגיאות בהגדרות לא נאכפות (לדוגמה, כדי להקל על הרצה עם בדיקות תקינות רגילות באמולטורים)
  • ההשוואה לביצועים מתבצעת רק בלולאה אחת, ללא חימום מוקדם
  • המדידות והעקבות לא נשמרים כדי לצמצם את זמן הריצה

האופטימיזציה הזו מתבצעת כדי לשפר את התפוקה של הבדיקה ולאמת את הלוגיקה של מדד ההשוואה, ולא כדי לשפר את גרסת ה-build או את דיוק המדידה.

  • סוג הארגומנט: בוליאני
  • ברירת המחדל היא: false

androidx.benchmark.killExistingPerfettoRecordings

כברירת מחדל, Benchmark מפסיק הקלטות קיימות של Perfetto (מעקב אחר המערכת) כשמתחילים מעקב חדש, כדי לצמצם הפרעות. כדי להשבית את ההתנהגות הזו, מעבירים את הערך false.

  • סוג הארגומנט: בוליאני
  • ברירת המחדל היא: true

androidx.benchmark.output.enable

מאפשרת לכתוב את קובץ ה-JSON של התוצאה לאחסון חיצוני.

  • סוג הארגומנט: בוליאני
  • ברירת המחדל היא: true

androidx.benchmark.profiling.mode

מאפשרת לצלם קובצי מעקב בזמן הפעלת הבדיקות. במאמר יצירת פרופיל של מיקרו-בנצ'מרק מפורטות האפשרויות הזמינות.

הערה: חלק מגרסאות מערכת ההפעלה של Android לא תומכות במעקב אחר שיטות בלי שהמדידות הבאות יושפעו. כדי למנוע את זה, Microbenchmark זורק חריגה, ולכן צריך להשתמש בארגומנט ברירת המחדל כדי לתעד את עקבות השיטה רק כשזה בטוח. אפשר לעיין בבעיה מספר 316174880.

  • סוג הארגומנט: מחרוזת
  • האפשרויות הזמינות:
    • MethodTracing
    • StackSampling
    • None
  • ברירת מחדל: גרסה בטוחה של MethodTracing שמתעדת רק מעקב אחר שיטה אם המכשיר יכול לעשות זאת בלי להשפיע על המדידות.

androidx.benchmark.suppressErrors

מקבל רשימה של שגיאות שמופרדות בפסיקים, כדי להפוך אותן לאזהרות.

  • סוג הארגומנט: רשימה של מחרוזות
  • האפשרויות הזמינות:
    • DEBUGGABLE
    • LOW-BATTERY
    • EMULATOR
    • CODE-COVERAGE
    • UNLOCKED
    • SIMPLEPERF
    • ACTIVITY-MISSING
  • ברירת המחדל: רשימה ריקה

additionalTestOutputDir

הגדרת המיקום שבו יישמרו במכשיר דוחות השוואה (benchmark) בפורמט JSON ותוצאות פרופילים.

  • סוג הארגומנט: מחרוזת של נתיב קובץ
  • ברירת המחדל היא: ספרייה חיצונית של קובץ ה-APK של הבדיקה

listener

יכול להיות שתקבלו תוצאות לא עקביות של בדיקת ביצועים אם עבודות רקע לא קשורות יבוצעו בזמן שבדיקת הביצועים פועלת.

כדי להשבית עבודה ברקע במהלך השוואה, מגדירים את סוג ארגומנט המדידה listener לערך androidx.benchmark.junit4.SideEffectRunListener.

  • סוג הארגומנט: מחרוזת
  • האפשרויות הזמינות:
    • androidx.benchmark.junit4.SideEffectRunListener
  • ברירת המחדל: לא צוין