מגדירים את ההתנהגות של Microbenchmark באמצעות ארגומנטים של המכשיר הבאים. אפשר להוסיף אותם להגדרות של Gradle או להחיל אותם ישירות כשמריצים את המכשיר משורת הפקודה. כדי להגדיר את הארגומנטים האלה לכל ההרצות של בדיקות ב-Android Studio ובשורת הפקודה, מוסיפים אותם ל-testInstrumentationRunnerArguments
:
android {
defaultConfig {
// ...
testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
}
}
אפשר גם להגדיר ארגומנטים של מכשור כשמריצים את הבדיקות המשוות מ-Android Studio. כדי לשנות את הארגומנטים:
- כדי לערוך את הגדרת ההרצה, לוחצים על עריכה ובוחרים את ההגדרה שרוצים לערוך.
איור 1. עורכים את הגדרות ההרצה. - כדי לערוך את ארגומנטי המדידה, לוחצים על
איור 2. עורכים את ארגומנט המדידה.
לצד השדה Instrumentation arguments (ארגומנטי מדידה).
- לוחצים על
איור 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
- ברירת המחדל: לא צוין
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- ארגומנטים של מכשור להשוואה לשוק
- יצירת פרופיל של מיקרו-בנצ'מרק
- יצירת פרופילים של Baseline {:#creating-profile-rules}