השוואה לשוק
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
30 ביולי 2025 | 1.4.0 | - | - | - |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Benchmark, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר Google's Maven repository.
השוואה לשוק
כדי להשתמש ב-Macrobenchmark בפרויקט, מוסיפים את יחסי התלות הבאים לקובץ build.gradle
של מודול Macrobenchmark:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.0") }
מיקרו-בנצ'מרק
כדי להשתמש ב-Microbenchmark בפרויקט, מוסיפים את יחסי התלות הבאים לקובץ build.gradle
של מודול המיקרו-בנצ'מרק:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
ספריית Microbenchmark מספקת גם פלאגין של Gradle לשימוש עם מודול המיקרו-ביצועים.
הפלאגין הזה מגדיר את הגדרות ברירת המחדל של תצורת ה-build למודול, מגדיר העתקה של פלט של מדד ביצועים למארח ומספק את
המשימה ./gradlew lockClocks
.
כדי להשתמש בפלאגין, מוסיפים את השורה הבאה לבלוק 'plugins' בקובץ build.gradle
ברמה העליונה:
Groovy
plugins { id 'androidx.benchmark' version '1.4.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.4.0" apply false }
לאחר מכן מחילים את הפלאגין על הקובץ build.gradle
של מודול ההשוואה לשוק
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. נשמח לשמוע מכם אם תגלו בעיות חדשות או אם יש לכם רעיונות לשיפור הספרייה הזו. לפני שיוצרים ספרייה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להוסיף את ההצבעה שלכם לבעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במאמרי העזרה בנושא כלי המעקב אחר בעיות.
גרסה 1.4
גרסה 1.4.0
30 ביולי 2025
androidx.benchmark:benchmark-*:1.4.0
משוחרר. גרסה 1.4.0 מכילה את הקומטים האלה.
שינויים חשובים מאז גרסה 1.3.0
Microbenchmark
- העברנו את משימות Gradle
lockClocks
ו-unlockClocks
לפרויקטים של השוואה לשוק, במקום לרמה העליונה, כדי לכבד את הבידוד של פרויקט Gradle. - בוצע רפקטורינג ב-
BenchmarkRule
כדי לבנות אותו על קורוטינות, ולתמוך בהתנהגות טובה יותר שלyield()
. הפעולה הזו אמורה להפחית באופן משמעותי את הסיכון ל-ANR במהלך הפעלות של בדיקות השוואה, במיוחד הפעלות ארוכות של CI. הערה: צריך להריץ את נקודות ההשוואה של ממשק המשתמש עםmeasureRepeatedOnMainThread
Macrobenchmark
- נוסף פתרון עקיף ב-API 34 ומעלה ל-
CompilationMode.None()
. הביצועים לא היו עקביים בגלל שהאימות של ART מתבצע עכשיו באופן חלקי בזמן הידור האפליקציות אחרי ההפעלה הראשונה. - תכונה ניסיונית – Startup Insights יכולה להדגיש בעיות נפוצות מסוימות במבחן השוואתי של מאקרו להפעלה על ידי העברת
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))
. - נוסף ArtMetric שאפשר להשתמש בו כדי לזהות קומפילציה של JIT וטעינת מחלקות לא אופטימלית – שניהם שימושיים לאימות אופטימיזציות של פרופיל בסיסי.
פרופילים של Baseline
-
BaselineProfileRule
אוסף עכשיו פרופילים של אפליקציות מרובות תהליכים.
שינויים אחרים
- הפונקציה TraceProcessor הועברה לספרייה משלה (
androidx.benchmark:benchmark-traceprocessor
) כדי שאפשר יהיה להשתמש בה מחוץ למדדים שלMacrobenchmark
, במקרים אחרים. אפשר גם להריץ אותו ב-JVM במחשב על ידי הגדרה של ServerLifecycleManager משלכם.
גרסה 1.4.0-rc01
18 ביוני 2025
androidx.benchmark:benchmark-*:1.4.0-rc01
משוחרר. גרסה 1.4.0-rc01 מכילה את הקומטים האלה.
תיקוני באגים
- נוסף פתרון עקיף לתמונות בזמן ריצה שגורמות ל-
CompilationMode.None()
לא למדוד את הביצועים במקרה הגרוע אחרי האיטרציה הראשונה. לצערנו, הפתרון הזה דורש השהיה של 5 שניות כדי להשחית בכוונה את תמונת זמן הריצה בתחילת כל חבילת בדיקות מאקרו (I4a4f1).
גרסה 1.4.0-beta02
4 ביוני 2025
androidx.benchmark:benchmark-*:1.4.0-beta02
משוחרר. גרסה 1.4.0-beta02 מכילה את הקומטים האלה.
שינויים ב-API
- נוסף
BaselineProfileConfig.Builder
כדי להקל על מפתחי Java להתקשר אלBaselineProfileRule.collectWithResults()
. (I94905)
גרסה 1.4.0-beta01
7 במאי 2025
androidx.benchmark:benchmark-*:1.4.0-beta01
משוחרר. גרסה 1.4.0-beta01 מכילה את הקומטים האלה.
שינויים ב-API
- נוספה וריאציה של ה-constructor
PerfettoTraceRule
שמקבלתPerfettoConfig
(Ie53ba)
תיקוני באגים
- בוצע עדכון בפורמט של הקישור לתובנות לגבי הפעלת האתר, כך שישתמש בפלאגין הנכון ובתוחם ברור יותר (
:
קצר יותר מ-%3A
, ושניהם נתמכים) (Ie18ef)TraceProcessor
- תמיד משתמשים בהפסקת פעולה בכוח כדי להפסיק תהליכים, גם כשמבצעים פעולות בגישת Root וגם כשמפסיקים אפליקציות מערכת. תיקון חריגים מהטופס:
Expected no stdout/stderr from killall ... No such process
. (Idca2c)
External Contribution
- נוסף handler לחריגות ב-Proxy עבור
TraceProcessorHttpServer
(I480f5)
גרסה 1.4.0-alpha11
9 באפריל 2025
androidx.benchmark:benchmark-*:1.4.0-alpha11
משוחרר. גרסה 1.4.0-alpha11 מכילה את הקומטים האלה.
שינויים ב-API
- הארגומנט timeout של
TraceProcessor
השתנה: משך הזמן עד ל-timeout הוא timeoutMs, כדי לשפר את השימושיות של Java caller. (I9fbb5) - סימון של בנאי
TraceProcessor
כפנימי. המתקשרים צריכים להשתמש במספרTraceProcessor.startServer
אוTraceProcessor.runServer
. (Ia8c5b)
תיקוני באגים
- כשמשתמשים בפקודה
MacrobenchmarkScope.killProcess
כדי להפסיק את האפליקציה, צריך לאמת את התוצאות של פקודת ההפסקה כדי למנוע כשל שקט ושגיאת זמן קצוב לתפוגה. (I84555)
עדכונים של יחסי תלות
- הספרייה הזו מטרגטת עכשיו את רמת השפה Kotlin 2.0 ונדרשת KGP 2.0.0 או גרסה חדשה יותר. (Idb6b5)
גרסה 1.4.0-alpha10
26 במרץ 2025
androidx.benchmark:benchmark-*:1.4.0-alpha10
משוחרר. גרסה 1.4.0-alpha10 מכילה את הקומטים האלה.
שינויים ב-API
- הארכנו את הזמן הקצוב לתפוגה שמוגדר כברירת מחדל לטעינת השרת ולשאילתות ל-120 שניות (לעומת 60/30 בעבר), וקבענו ששניהם ניתנים להגדרה באמצעות פרמטר אחד של זמן קצוב לתפוגה.
TraceProcessor
(Ifec87)
תיקוני באגים
- תוקנו כמה בעיות שהתרחשו כשמבצעים השוואה בין ביצועים או כשמצלמים פרופילים של אפליקציה בלי
profileinstaller
, והיא כלולה ב-BroadcastReciever
. ההגדרה הזו משפיעה רק על הפעלות במכשירים עם הרשאות Root. (Ied308)
גרסה 1.4.0-alpha09
12 במרץ 2025
androidx.benchmark:benchmark-*:1.4.0-alpha09
משוחרר. גרסה 1.4.0-alpha09 מכילה את הקומטים האלה.
שינויים ב-API
- הוספנו
TraceProcessor
ו-Session API עם ידיות שאפשר לסגור, כדי להקל על השימוש במחזורי חיים מותאמים אישית. זהו גם צעד לקראת שימוש קל יותר ב-Coroutine וב-Java API. הפונקציות של התוסףTraceProcessor.runServer {}
מסומנות עכשיו כניסיוניות, כי סביר להניח שהן יועברו ויהפכו ללא ניסיוניות בעתיד. (I358b4)
תיקוני באגים
- תוקנה הבעיה שבה לא ניתן היה לצלם את פרופיל ההשוואה לביצועים ואת פרופיל הבסיס באמצעות API 36 בגלל שינוי ב-
pgrep
toybox שדורש עכשיו-a
להדפסת שורת הפקודה המלאה. (Idc991) - סינון של הגדרת מעקב ברירת המחדל כדי לצמצם את הסיכון לאובדן נתונים במעקבים ברמות API חדשות יותר. (I54e8a)
- נוסף ארגומנט ניסיוני של
androidx.benchmark.killExistingPerfettoRecordings
instrumentation, שאפשר להגדיר לו את הערךfalse
כדי לאפשר המשך של לכידת עקבות קיימת מראש של perfetto. כברירת מחדל, כדי למנוע הפרעות, תהליכי לכידת נתוני מעקב של Perfecto שקיימים במכשיר מופסקים. (I02a3c) - השדה
context.osCodenameAbbreviated
בפורמט JSON יהיה עכשיוREL
בגרסאות של מערכת ההפעלה שפורסמו ב-API 35 ומעלה, כי הפלטפורמה הבסיסית כבר לא תומכת בשמות קוד לא מספריים. (Ib17fd) - תיקון קריסה ב-
FrameTimingMetric
כשמתרחשים פריימים שסונכרנו מחדש. (I7c6f4, b/394610806) - ההנחה ש-
Choreographer#doFrame
הוא החלק העליון של מסגרת המחסנית ב-thread הראשי שלFrameTimingQuery
כבר לא תקפה. (Iee0e0, b/340206285)
גרסה 1.4.0-alpha08
12 בפברואר 2025
androidx.benchmark:benchmark-*:1.4.0-alpha08
משוחרר. גרסה 1.4.0-alpha08 מכילה את הקומטים האלה.
שינויים ב-API
- העברנו את ממשקי ה-API של התוספים
TraceProcessor.runSession()
למצב ניסיוני, כי סביר להניח שבסופו של דבר הם יהפכו לבנאים קונקרטיים ב-Android. (Ib0528, b/393640753) - רוב ההטמעה של Startup Insights היא עכשיו ציבורית או ניסיונית, ועוברת לארטיפקט
TraceProcessor
. ראוStartupInsights
. (I0aa00) - הוצאנו משימוש את
BenchmarkRule.runWithTimingDisabled {}
לטובתBenchmarkRule.runWithMeasurementDisabled {}
, שמתאר בצורה ברורה יותר את ההתנהגות – כל המדדים מושהים. בנוסף, צריך לחשוף את מחלקת העלMicrobenchmarkScope
כי אי אפשר להצהיר מחדש על הפונקציהrunWithMeasurementDisabled
כדי לפתוח גישה, כי היא מוטמעת. (I9e23b, b/389149423, b/149979716) - ספריות ההשוואה עברו ל-Kotlin 2.0. (I9d1e0)
- הוסר ארגומנט של מכשור
androidx.benchmark.startupProfiles.enable
. היא כבר לא שימושית, כי אפשר לשלוט בה באמצעות הארגומנטincludeInStartupProfile
ב-BaselineProfileRule.collect()
. (I39eb4)
תיקוני באגים
- צמצמנו את מספר הפונקציות הפנימיות של Microbenchmark שמופעלות במהלך יצירת פרופיל, כדי שיהיה ברור יותר למשל ב-Method traces (Ifaed8)
- תיקון ספקולטיבי לקריסות: 'Failed to stop [
ProcessPid(processName=perfetto, pid=...)
]'. עכשיו, במקום לקרוס, Benchmark ירשום הודעה ביומן אם לא תהיה אפשרות לעצור תהליך Perfetto ברקע לפני הפעלת ההשוואה לשוק. (I37d3e, b/323601788) - תיקון
IllegalStateExceptions
עם התווית 'Expectedpm dump-profiles
stdout' שנגרמו בגלל בדיקה קפדנית מדי של פורמט הפלט. (I358dc)
גרסה 1.4.0-alpha07
29 בינואר 2025
androidx.benchmark:benchmark-*:1.4.0-alpha07
משוחרר. גרסה 1.4.0-alpha07 מכילה את הקומטים האלה.
תכונות חדשות
-
BaselineProfileRule
כולל עכשיו API שלcollectWithResults(...)
, שכולל רשימה של נתיבים לפרופילים המחושבים. (I056f8) - נוסף
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline
ארגומנט של מכשור, שאפשר להגדיר לו את הערך false כדי להשבית את ההתנהגות שלmeasureRepeatedOnMainThread
שגורמת להפסקת הפעולה כשמגיע מועד היעד לבדיקה מקומית. לא מומלץ להשתמש באפשרות הזו, כי היא מגדילה את הסיכויים להתרחשות של ANR במהלך הבדיקות. (Idbeec, b/353226476)
שינויים ב-API
- הוספת
@JvmOverloads
לקונסטרוקטורMicrobenchmarkConfig
. (I13fd3) - בוצע רפקטורינג ב-
BenchmarkRule
כדי לבנות אותו על קורוטינות, ולתמוך בהתנהגות טובה יותר שלyield()
. במסגרת השינוי הזה הוסרו כמה ממשקי API ניסיוניים שלBenchmarkState
, אבל בהמשך יתווספו ממשקי API חלופיים לפי הצורך. בנוסף, הוספנו אתrunWithMeasurementDisabled
כדי להבהיר את ההתנהגות (כל המדידות מושהות). בעתיד, המדיניותrunWithTimingDisabled
תצא משימוש. (I19837, b/389149423, b/311242861) - העברנו את
PerfettoTraceProcessor
אלTraceProcessor
בארטיפקטandroidx.benchmark:benchmark-traceprocessor
חדש, ורוב ה-API שלו כבר לא ניסיוני. כלTraceMetric
מותאם אישית או כל דבר שקורא ממעקבים יצטרך לעבור לעדכון של הייבוא החדש שלTraceProcessor
. ממשק ה-API החדשTraceProcessor
פועל בדיוק כמו ממשק ה-API הישן, אבל הוא ספריית ממשק עצמאית (בדומה לשכבתandroidx.sqlite
מ-Room) עם הטמעה ספציפית ל-Android שמוטמעת ב-macrobenchmark. אפשר להשתמש בארטיפקט החדש גם ב-JVM, אבל כרגע צריך להפעיל עותק משלכם של קובץ הבינאריTraceProcessor
ולהציע יציאה להתחברות אליו. (I3a767, I62563, b/381134564)
תיקוני באגים
- הצגת הודעת שגיאה ברורה יותר כש-
MacrobenchmarkScope.startActivityAndWait
לא מצליח להפעיל את תהליך היעד (יכול להיות שזה בגלל קריסה בתהליך היעד), במקום ההודעה המעורפלת יותר 'לא ניתן לאשר את השלמת הפעלת הפעילות' (I3539b) - תוקנו כמה שגיאות תחביר בדוגמאות של Kotlin, והוסף הדגשת תחביר לכמה דוגמאות של Java / build.gradle. (Ib3808)
- הוספנו הבהרות למסמכי הפרמטרים
ArtMetric
ו-CaptureInfo
. (I96e60)
גרסה 1.4.0-alpha06
11 בדצמבר 2024
androidx.benchmark:benchmark-*:1.4.0-alpha06
משוחרר. גרסה 1.4.0-alpha06 מכילה את הקומטים האלה.
שינויים ב-API
- הוסר השימוש ב-
@Language("sql")
ב-PerfettoTraceProcessor.Session.query()
, כי יש בעיה בהדגשה או בניתוח של Studio. (Idc2fa, b/377733398)
תיקוני באגים
- הספרייה הזו משתמשת עכשיו בהערות לגבי ערכי null של JSpecify, שהן הערות לשימוש בסוג. מפתחים ב-Kotlin צריכים להשתמש בארגומנט המהדר הבא כדי לאכוף שימוש נכון:
-Xjspecify-annotations=strict
(זו ברירת המחדל החל מגרסה 2.1.0 של מהדר Kotlin). (I46810, b/326456246) - תוקן
ArtMetric
כדי לדווח על טעינת מחלקה (לא init), והמסמכים שופרו כדי להבהיר את התנהגות זמן הריצה. (I9915c) - ב-Android Multiuser, מריצים פקודות כ-root רק במכשירים עם הרשאות root. (I88b44)
גרסה 1.4.0-alpha05
13 בנובמבר 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05
משוחרר. גרסה 1.4.0-alpha05 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנה בעיה ב-API 34 ומעלה שגרמה לכך שהביצועים של
CompilationMode.None()
לא היו עקביים ולא ייצגו את הביצועים הראשוניים במקרה הגרוע. השינוי הזה נועד לעקוף שינוי בפלטפורמה שמאפשר למצב הקומפילציה של ARTverify
לקמפל אפליקציות באופן חלקי (משפיע רק על טעינת מחלקות) זמן קצר אחרי ההפעלה הראשונה. (Ie48d0) - תוקנה בעיה שבה אפשר היה ללכוד עקבות (במיוחד קצרים) שלא דיווחו על מדידה ממדדי Macrobenchmark מובנים, בגלל שהשם של התהליך נחתך בעקבות Perfetto. עכשיו, כדי לפתור את הבעיה הזו, macrobenchmark מחפש את שם החבילה הקטום בכל השאילתות המובנות, בנוסף לשם החבילה הצפוי. שימו לב שאפשר להטמיע את אותו אופן פעולה בהטמעות מותאמות אישית של
TraceMetric
או בקריאות ישירות אחרות שלPerfettoSession.query
, על ידי שינויprocess.name LIKE "$packageName"
בשאילתת Perfetto ל-(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. (I5bf01, b/377565760)
גרסה 1.4.0-alpha04
30 באוקטובר 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04
משוחרר. גרסה 1.4.0-alpha04 מכילה את הקומטים האלה.
תכונות חדשות
- (ניסיוני) הפעלת יצירה של פרופיל בסיסי והשוואה בין אפליקציות שמותקנות למשתמש משני, למשל כל אפליקציה במכשירי Android Auto ללא ראש. התמיכה הזו נבדקה בתרחישים מסוימים, אבל אם היא לא עובדת בשבילכם, אתם יכולים לדווח על באג. (I9fcbe, b/356684617, b/373641155)
תיקוני באגים
- הערך
isProfileable
תמיד מוחלף בגרסאות של השוואה לשוק, והערךisDebuggable
תמיד מוחלף בגרסאות של השוואה לשוק ובגרסאות שלnonMinified
(תיעוד פרופיל בסיסי). (I487fa, b/369213505) - תוקן באגים בזיהוי קומפילציה בחלק מהמכשירים הפיזיים לפני API 28 – משפיע על json
context.compilationMode
, וגם על ההתנהגות שלandroidx.benchmark.requireAot=true
(שכבר לא מושפע משגיאות) (Ic3e08, b/374362482) - במדדים של
CpuEventCounter
, מתבצעת השלכה אם נצפים מדידות לא חוקיות (לדוגמה, instructions/cpucycles==0) (I8c503)
גרסה 1.4.0-alpha03
16 באוקטובר 2024
androidx.benchmark:benchmark-*:1.4.0-alpha03
משוחרר. גרסה 1.4.0-alpha03 מכילה את הקומטים האלה.
שינויים ב-API
- Macrobenchmark: נוסף
ArtMetric
, שאפשר להשתמש בו כדי לבדוק את הכיסוי של הפרופיל או את הביצועים הכלליים של Android RunTime. הנתונים שמתועדים הם המספר והמשך הכולל של JIT, של הפעלת הכיתה (אם זמין) ושל אימות הכיתה. בנוסף, בוצעו שינויים ב-CaptureInfo
כדי לכלול גרסה אופציונלית של ART mainline עם ברירת מחדל. (I930f7) - מוסיפים
coefficientOfVariation
לפלט ה-JSON של ההשוואה לשוק כדי להציג את היציבות במהלך ההשוואה לשוק. (Ib14ea)
תיקוני באגים
- תוקנה בעיה ב-
CollectBaselineProfileTask
כשיש רווחים במכשיר AVD. (Ia0225, b/371642809) - תיקון משוער של שגיאות מחריגים של
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
. עכשיו,MacrobenchmarkScope.killProcess()
(כולל הפעולה שמופעלת לפני כל איטרציה, שמשמשת להטמעה של התנהגותStartupMode.COLD
) ימתין לאימות שכל התהליכים של האפליקציה הפסיקו לפעול. (I60aa6, b/351582215) - תוקנה בעיה שבה השגיאה UNLOCKED_ הופיעה בחלק מהאמולטורים עם הרשאות רוט. (Ic5117)
- הספרייה הזו משתמשת עכשיו בהערות לגבי ערכי null של JSpecify, שהן הערות לשימוש בסוג. מפתחים ב-Kotlin צריכים להשתמש בארגומנט המהדר הבא כדי לאכוף שימוש נכון:
-Xjspecify-annotations=strict
(זו ברירת המחדל החל מגרסה 2.1.0 של מהדר Kotlin). (I7104f, b/326456246)
גרסה 1.4.0-alpha02
2 באוקטובר 2024
androidx.benchmark:benchmark-*:1.4.0-alpha02
משוחרר. גרסה 1.4.0-alpha02 מכילה את הקומטים האלה.
שינויים ב-API
- העברנו את המשימות של Gradle
lockClocks
ו-unlockClocks
לפרויקטים של השוואה לשוק, במקום שהן יהיו זמינות ברמה העליונה. השינוי הזה היה הכרחי כי לצערנו אין דרך לרשום את הפעולות האלה כפעולות ברמה העליונה בלי לפגוע בבידוד הפרויקט. (I02b8f, b/363325823)
תיקוני באגים
-
BaselineProfileRule
אוסף עכשיו פרופילים לאפליקציות מרובות תהליכים על ידי שליחת אות לכל תהליך פעיל בסוף הבלוק כדי ליצור פרופילים. אם קומפילציה מבוססת-פרופיל לא מוצאת אף פעם תהליך לשידור, הקומפילציה תיכשל, כי לא צפויים נתוני פרופיל בתוכה. בנוסף, נוסף ארגומנט של מכשור כדי לשלוט במשך ההמתנה של ה-dump:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469) - מ-Benchmark
1.3.2
: תוקנה הבעיה שגרמה לכך שלא הייתה אפשרות למשוך קבצים של פרופיל בסיסי או תוצאות של Macrobenchmark מתוסף Baseline Profile Gradle ב-Firebase Test Lab (FTL). (I2f678, b/285187547)
כדי להשתמש ב-FTL, צריך להחיל את הפלאגין על מודול פרופיל הבסיס בבלוק הפלאגין, עם:
plugins {
...
id("com.google.firebase.testlab")
}
ואז מגדירים את Firebase Test Lab עם:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
בנוסף, צריך להוסיף את מכשיר ה-FTL שנוצר לתוסף פרופיל הבסיס:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
גרסה 1.4.0-alpha01
18 בספטמבר 2024
androidx.benchmark:benchmark-*:1.4.0-alpha01
משוחרר. גרסה 1.4.0-alpha01 מכילה את הקומטים האלה.
תכונה חדשה – תובנות לגבי הפעלת אפליקציות
- אפשר להפעיל את הגרסה הראשונית של התובנות לגבי הפעלת האפליקציה ב-Macrobenchmark. (09fae38)
כדי להפעיל השוואה לשוק של סטארטאפים:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
לאחר מכן, הפעלת ההשוואה של הסטארטאפ תנתח את העקבות כדי לחפש בעיות נפוצות, ותדפיס אותן אחרי המדדים בפלט הבדיקה של Studio בכרטיסייה 'השוואה', לדוגמה:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
התכונה הזו עדיין נמצאת בתהליך פיתוח, ובהמשך נשפר את התיעוד ואת יכולת ההרחבה שלה. נשמח לקבל משוב.
תכונות חדשות
- נוספה המאפיין gradle
androidx.baselineprofile.suppressWarnings
כדי להשבית את כל האזהרות של פרופיל הבסיס. (314153a) - מדדי מיקרו-בנצ'מרק מוצגים עכשיו ב-Perfetto traces כדלפקים. (3214854)
- נוספו סקריפטים ניסיוניים להשבתת JIT (נדרשת הרשאת root / הפעלה מחדש של זמן הריצה) ולאיפוס של מצב הביצועים/הבדיקה של המכשיר. בשלב הזה, הם לא מתפרסמים כמשימות gradle. (7c3732b)
- נוסף ארגומנט של השוואה לביצועים כדי לדלג על בדיקות כשמריצים באמולטור. כשהאפשרות
automaticGenerationDuring
build מופעלת, גם מדדי השוואה מעוררים יצירה של פרופיל בסיסי. הפעולה הזו תיכשל אם נעשה שימוש באמולטורים. במקום זאת, אפשר לדלג על הבדיקה באמצעות הארגומנט החדשskipBenchmarksOnEmulator
. (0c2ddcd) - שינוי הלוגיקה של הפעלת אירועי ביצועים כדי להפעיל ב-API 23 ומעלה (2550048)
שינויים ב-API
- הארגומנט הקיים של
PerfettoConfig
הניסויMacrobenchmarkRule.measureRepeated()
הועבר לאובייקטExperimentalConfig
החדש.
תיקוני באגים
- הגדלת מספר הניסיונות החוזרים של
lockClocks.sh
(99e9dac) - אם כבר קיימים סוגי build של
nonMinified
ושל השוואה לשוק, אל תיצרו אותם. בגלל באג, גם אם סוגי ה-build שלnonMinified
וההשוואה לשוק היו קיימים, הם היו נוצרים מחדש. (e75f0a5) - התעלמות מפלחים לא סופיים מתוך
TraceSectionMetric
תוצאות. (a927d20) - שיפור בדיקת האמולטור כדי להתחשב בקידומת
sdk_
. (1587de8) - התייחסות לחבילות שלא פועלות כאל חבילות שנוקו ב-
FrameTimingGfxInfoMetric
. (35cc79c) - תוקנה בעיה שגרמה לכך שהפונקציה
androidx.benchmark.cpuEventCounter
הפיקה ערכים פגומים לאירועים שאינם אירועי הוראות. (06edd59) - תוקן
resumeTiming/runWithTimingDisabled
כך שיכבד את סדר העדיפות של המדדים, וההשפעה של השהיה או ההפעלה מחדש של מדד עם עדיפות נמוכה יותר על התוצאות של מדד עם עדיפות גבוהה יותר פחתה באופן משמעותי. לדוגמה, אם משתמשים במונה ביצועי CPU באמצעות ארגומנט המכשירcpuEventCounter.enable
, הערך timeNs לא יקטן באופן משמעותי יותר כשמתרחשת השהיה או הפעלה מחדש. (5de0968)
גרסה 1.3
גרסה 1.3.4
26 במרץ 2025
androidx.benchmark:benchmark-*:1.3.4
משוחרר. גרסה 1.3.4 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנו בעיות של חוסר תאימות בבידוד פרויקטים של Gradle בפלאגין Benchmark Baseline Gradle. (b/404523257)
גרסה 1.3.3
16 באוקטובר 2024
androidx.benchmark:benchmark-*:1.3.3
משוחרר. גרסה 1.3.3 מכילה את הקומטים האלה.
תיקוני באגים
- תוקן
CollectBaselineProfileTask
כשבמכשיר AVD יש רווחים (Ia0225, b/371642809)
גרסה 1.3.2
2 באוקטובר 2024
androidx.benchmark:benchmark-*:1.3.2
משוחרר. גרסה 1.3.2 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנה הבעיה שגרמה לכך שלא הייתה אפשרות למשוך קבצים של פרופיל בסיסי או של תוצאות Macrobenchmark מ-Baseline Profile Gradle Plugin ב-Firebase Test Lab (FTL). (I2f678, b/285187547)
כדי להשתמש ב-FTL, צריך להחיל את הפלאגין על מודול פרופיל הבסיס בבלוק הפלאגין, עם:
plugins {
...
id("com.google.firebase.testlab")
}
ואז מגדירים את Firebase Test Lab עם:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
בנוסף, צריך להוסיף את מכשיר ה-FTL שנוצר לתוסף פרופיל הבסיס:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
גרסה 1.3.1
18 בספטמבר 2024
androidx.benchmark:benchmark-*:1.3.1
משוחרר. גרסה 1.3.1 מכילה את ההתחייבויות האלה.
תיקוני באגים
- נוספה מאפיין gradle
androidx.baselineprofile.suppressWarnings
כדי להסתיר את כל האזהרות של פרופיל הבסיס (I7c36e, b/349646646) - תוקן פלאגין Baseline Profile Gradle כך שישתמש ב-
nonMinified…
וב-benchmark…
קיימים אם הם נוצרו על ידי האפליקציה, במקום ליצור עטיפות. (Ia8934, b/361370179) - תוקנה בעיה ב-
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
כש-automaticGenerationDuringBuild
מופעלת באמולטורים. הארגומנט החדש משמש לדילוג על הבדיקה. (If3f51, b/355515798) - הקטנת מיקרו-מדדים – שמירה על מחלקות משנה של
org.junit.runner.notification.RunListener
בספריית ההשוואה proguard (Ic8ed5, b/354264743) - תיקון
TraceSectionMetric
כדי להתעלם מפרוסות שלא מסתיימות. בעבר, משך הזמן של אירועים כאלה היה -1, למשל במהלך סיכום או חיפוש של משך הזמן המינימלי. (If74b7) - תוקנה בעיה ב-
FrameTimingGfxInfoMetric
שגרמה לקריסה של המדד אם התהליך לא פעל כבר. (I6e412)
גרסה 1.3.0
21 באוגוסט 2024
androidx.benchmark:benchmark-*:1.3.0
משוחרר. גרסה 1.3.0 מכילה את ההתחייבויות האלה.
שינויים ב-Microbenchmark מאז גרסה 1.2.0
- ברוב המכשירים, מעקב אחר שיטות מופעל כברירת מחדל במיקרו-בנצ'מרקים.
- מעקב אחר שיטות מתבצע כשלב נפרד, אחרי המדידות – כך אפשר להפיק גם מדידות מדויקות וגם מעקב אחר שיטות מהרצת השוואה אחת.
- מעקב אחר שיטות בגרסאות מסוימות של מערכת ההפעלה Android ו-ART ישפיע על שלבי מדידה מאוחרים יותר – בגרסאות האלה, מעקב אחר שיטות מושבת כברירת מחדל ומוצגת אזהרה בפלט של סטודיו
- נקודות השוואה ומקרי ANR ב-Thread הראשי
- נוספה
measureRepeatedOnMainThread
למדדי ביצועים של שרשור ממשק המשתמש (למשל, מדדים שמתקשרים עם ממשקי משתמש של Compose/View) כדי למנוע שגיאות ANR כשמריצים את הבדיקה במשך הרבה שניות. - המערכת מדלגת על מעקב אחר שיטות אם צפוי שהן יחרגו מהמועד האחרון למניעת ANR. כדי להשבית את ההתנהגות הזו, צריך להגדיר את
androidx.benchmark.profiling.skipWhenDurationRisksAnr
כ-false (לא מומלץ להגדיר את הערך הזה כ-false בהרצות של CI, כי מקרי ANR עלולים לגרום לבעיות בהרצות ארוכות של CI).
- נוספה
- הקטנה
- הטמענו כללי ProGuard כדי לשפר את המיקרו-בנצ'מרקינג כשהפעלנו מזעור
- כדי להשתמש ב-Minification/R8 במודול של ספרייה, צריך AGP 8.3. אפשר להפעיל את התכונה דרך
android.buildTypes.release.androidTest.enableMinification
ב-build.gradle
- נוסף API ניסיוני של
BlackHole.consume()
כדי למנוע הסרה של קוד לא פעיל (If6812, b/286091643)
- מדדים
- תכונה ניסיונית של מונה אירועי CPU (מדדים מ-
perf_event_open
, שדורשת הרשאות בסיס ברוב הגרסאות של הפלטפורמה), גישה דרךInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(אפשר להגדיר ל-true
), ואפשר להגדיר אתandroidx.benchmark.cpuEventCounter.events
למשל ל-(Instructions,CpuCycles
). התכונה הזו אמורה להיות נתמכת בחלק מהאמולטורים של userdebug, אבל התמיכה לא נבדקה בכל האמולטורים הזמינים
- תכונה ניסיונית של מונה אירועי CPU (מדדים מ-
שינויים ב-MACRObenchmark מאז גרסה 1.2.0
- שיפוץ של מעקב אחר שיטות בבדיקות ביצועים כלליות.
- עכשיו, מעקב אחר שיטות מוגבל למשך הזמן של
measureBlock
, ויכול לתעד כמה סשנים אם התהליך מתחיל כמה פעמים. - בעבר, מעקב אחר שיטות היה פועל רק עבור
StartupMode.COLD
benchmarks, ולא היה מתעד כלום עבורmeasureBlocks
שלא הפעיל מחדש את תהליך היעד - תיקנו את הבעיה שגרמה לכך שנתוני מעקב אחר שיטות לא נשמרו ב-macrobenchmark, כך שנתוני המעקב אחר שיטות אמורים להישמר באופן מלא ותקין, גם במכשירים איטיים יותר. (I6349a, b/329904950)
- עכשיו, מעקב אחר שיטות מוגבל למשך הזמן של
- הוספנו אפשרות להוציא פרופיל ART באופן תקין במהלך איטרציות
warmUp
בודדות כשהתהליך מופסק, כדי שמדידותCompilationMode.Partial(warmup=N)
יהיו מדויקות יותר. (I17923) - הודעת שגיאה על שידור Shader שנכשל
- נוספו הצעות לניפוי באגים להודעת שגיאה בשידור של הצללה של תכונת ה-Drop
- הוספת שני ארגומנטים של מכשור כדי לעקוף את התנהגות ההשמטה של Shader כדי לעקוף קריסות כשמבצעים השוואה בין אפליקציות ללא
ProfileInstaller
1.3:-
androidx.benchmark.dropShaders.enable=true/false
: אפשר להשתמש באפשרות הזו כדי לדלג על כל ההסרה של shader (כולל זו שמתבצעת בהפעלות שלStartupMode.Cold
), במיוחד כשמבצעים השוואת ביצועים של אפליקציות שעדיין לא משתמשות ב-profileinstaller 1.3 -
androidx.benchmark.dropShaders.throwOnFailure=true/false
: אפשר להשתמש בה כדי לסבול כשלים כשמנסים להסיר shaders, למשל כשמבצעים בדיקות השוואה לאפליקציות בלי profileinstaller 1.3 (I4f573)
-
- נוסף משתנה ניסיוני
MacrobenchmarkRule#measureRepeated
שמשתמש ב-PerfettoConfig
בהתאמה אישית כדי להקליט את הנתונים ב-Perfetto בצורה מותאמת אישית לחלוטין. שימו לב: הגדרות שגויות עלולות לגרום לכשלים במחלקות המובנות של מדדים. (Idfd3d, b/309841164, b/304038384) - כדי לצמצם את ההפרעות, צריך לבטל את משימות ה-dexopt ברקע לפני שמריצים Macrobenchmark. (I989ed)
- הכלי Macrobenchmark ממתין עכשיו שנייה אחת עד שהאפליקציה המטרה תבצע flush לפרופיל ART (בעבר הוא המתין 500 אלפיות השנייה). (I85a50, b/316082056)
- שיפוץ של TraceSectionMetric
- הערה: שינויים ב-
TraceSectionMetric
שמופיעים בהמשך יכולים להשפיע על הפלט בשימוש ב-CI, ועלולים ליצור אי-רציפות או לשבור את הניתוח. - הסכום הוא עכשיו ברירת המחדל, כי ברוב המקרים המדד הזה משמש לאירועים חוזרים, והאפשרות 'ראשון' תגרום להשלכת נתונים במקרים האלה
- השינוי מאפשר יותר התאמה אישית, עם יותר מצבים זמינים
- שמות המצבים מוטמעים עכשיו בשם הפלט של המדד (ב-Studio וב-JSON)
- עכשיו יש תמיכה בפרוסות שנוצרו באמצעות
Trace.{begin|end}AsyncSection
.
- הערה: שינויים ב-
- מדדים
- Power - Added
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
andPowerMetric.deviceSupportsPowerEnergy()
- השם
Metric.getResult
שונה ל-getMeasurements
כדי להתאים לסוג ההחזרה - הוספנו תוויות של log.w / exception לכל הכשלים בזיהוי ההפעלה. השינוי הזה לא משנה את ההתנהגות הנוכחית (כך שחלק מהשגיאות מופעלות, ואחרות נכשלות בשקט בזיהוי ההפעלה), אלא רק הופך אותה למובנת יותר. בדרך כלל, האירועים שמוצגים ב-
Log.w()
ושלא מצליחים לדווח על מדדי הפעלה הם אלה שחסרים בהם אירועים שאינם קשורים למסגרת, ומוצגים חריגים כשמזוהה הפעלה, למעט מידע על תזמון המסגרת (מפרוסות של ממשק המשתמש/זמן אמת). (Id240f, b/329145809) - הוספנו מדידה של
frameCount
ל-FrameTimingMetric
כדי לעזור לכם לזהות תרחישים שבהם המדידות משתנות בגלל שינוי במספר הפריימים שנוצרו (הוספנו אנימציות חדשות, תיקנו בעיות שקשורות לביטול תוקף). (I1e5aa) - הוספנו הבהרה שלפיה
frameOverrunMs
הוא המדד המועדף למעקב כשהוא זמין במסמכי התיעוד, והסבר למה. (I18749, b/329478323) - תוקנה בעיה שבה אפשר היה לשייך מסגרות לא סגורות בתחילת העקבות ובסופו, וכתוצאה מכך הן דווחו באופן שגוי כמסגרת אחת ארוכה במיוחד. (I39353, b/322232828)
- שיפור השגיאה
FrameTimingMetric
כשלא נוצרים פריימים, ותמיד מוציא קישור למעקב כשניתוח המדדים נכשל, כדי לעזור באבחון הבעיה. (I956b9) - תוקנה קריסה ב-
FrameTimingMetric
שלא הצליחה לנתח את מזהה הפריים, במיוחד במכשירי OEM מסוימים. (Ia24bc, b/303823815, b/306235276) - הפחתנו את רמת ההקפדה של הבדיקות ב-
FrameMetrics
והוספנו פרטים נוספים להודעות השגיאה. (Iadede)
- Power - Added
שינויים ב-Gradle plugin מאז גרסה 1.2.0
- הגדלנו את הגרסה המומלצת המקסימלית של AGP ל-9.0.0-alpha01.
- חשוב לוודא שהמשימות
mergeArtProfile
ו-mergeStartupProfile
תמיד ימתינו ליצירת פרופיל הבסיס. (I623d6, b/343086054) - אם יצירת פרופיל הבסיס תצליח, תופיע סיכום של השינויים שבוצעו (I824c8, b/269484510)
- נוסף DSL להשבתת אזהרות (Ic4deb, b/331237001)
- צריך לפתור את הבעיה כדי להבטיח שהמדדים ישתמשו בפרופילים בסיסיים שנוצרו כש
automaticGenerationDuringBuild
מושבת (Ic144f, b/333024280) - תוקנו בעיות שקשורות לביטול של מאפיינים של תוסף gradle כדי לאפשר יצירה של פרופיל בסיסי והשוואה לביצועים כשמבצעים התאמה אישית של
nonMinified
או של סוג build להשוואה לביצועים.BaselineProfile
(Ib8f05, b/324837887) - תיקון להכללת פרופילים בסיסיים של ספריות ב-AAR לפני AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- תוקנה כתובת ה-URL של הפלט של פרופיל הבסיס ופרופיל ההפעלה בסוף משימת היצירה. (I802e5, b/313976958)
שינויים משמעותיים אחרים מאז גרסה 1.2.0
- איסוף נתוני מעקב
- הפחתת שגיאת EXITCODE 2 בהפעלה של perfetto משגיאה לאזהרה שנרשמה ביומן
- הפעלת מעקב אחר AIDL כברירת מחדל במבחני ביצועים(נדרש API 28) (Ia0af2, b/341852305)
- הפעלת מעקב אחרי תגי porter כברירת מחדל בהשוואות לשוק. כך אפשר ללכוד, למשל, נקודות מעקב של נעילת המכשיר למניעת שינה. (Icfe44, b/286551983)
- הגדלנו את הזמן הקצוב לתפוגה של התחלת לכידת נתוני מעקב כדי למנוע קריסות כשמתחילים מעקב במכשירים איטיים יותר (I98841, b/329145808)
- הוספנו API ציבורי
PerfettoTraceProcessor.Session.queryMetrics
APIs עם וריאציות של JSON, textproto ו-proto בינארי (לא מפוענח). הם מאפשרים לכם לשלוח שאילתות לגבי מדדים שמוטמעים ב-TraceProcessor
(I54d7f, b/304038382) - הפעלת חסימת התחלה ברשומה של מעקב Perfetto כדי להפחית את הסיכון לאובדן נתונים בתחילת המעקב. התכונה נתמכת רק ב-API 33 ומעלה. (Ie6e41, b/310760059)
- פלט JSON
- נוסף מידע נוסף בהקשר של השוואה לשוק בפלט JSON:
-
context.artMainlineVersion
– גרסה שלמה של מודול ראשי של Art (אם הוא קיים במכשיר, אחרת-1
) -
context.build.id
– שווה ל-android.os.Build.ID context.build.version.codename
– שווה ל-android.os.Build.VERSION.CODENAME-
context.build.version.abbreviatedCodename
– מתאים לאות הראשונה של שם הקוד של גרסת טרום-ההפצה (כולל בגרסאות ההפצה) (Ie5020)
-
- נוספה רשימת
profilerOutput
לפלט JSON כדי להקל על השימוש בכלי פרופילים של עקבות (למשל, Perfetto, עקבות של שיטות) (I05ddd, b/332604449) - נוספה אזהרה כשמשתמשים ב-Android Test Orchestrator במודולים של בדיקות השוואתיות, כי זה יגרום לכך שקובצי ה-JSON של הפלט לכל מודול יידרסו שוב ושוב. (Ia1af6, b/286899049)
- הפונקציה תפעל כשיש שמות קבצים ארוכים מ-200 תווים, כדי למנוע קריסות לא ברורות כשכותבים או מעבדים קבצים. (I4a5ab)
- נוסף מידע נוסף בהקשר של השוואה לשוק בפלט JSON:
גרסה 1.3.0-rc01
7 באוגוסט 2024
androidx.benchmark:benchmark-*:1.3.0-rc01
משוחרר. גרסה 1.3.0-rc01 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנה בעיה שגרמה לכך ש-
androidx.benchmark.cpuEventCounter
הפיק ערכים פגומים לאירועים שאינם אירועי הוראות (I7386a, b/286306579) - תיקנו את
resumeTiming
/runWithTimingDisabled
כדי להתאים לסדר העדיפויות של המדדים, והפחתנו באופן משמעותי את ההשפעה של השהיה או הפעלה מחדש של מדד בעדיפות נמוכה יותר על התוצאות של מדד בעדיפות גבוהה יותר. לדוגמה, אם משתמשים במונה ביצועי CPU באמצעות ארגומנט המכשירcpuEventCounter.enable
, הערך timeNs לא יקטן באופן משמעותי יותר כשמתרחשת השהיה או הפעלה מחדש. (I39c2e, b/286306579, b/307445225) - הסיכוי שדגימת הסטאק תגרום ל-
measureRepeatedOnMainThread
להגיע לפסק זמן קשה בשרשור הראשי קטן יותר, כי העברנו את ההמרה של דגימת הסטאק מהשרשור הראשי. (I487a8, b/342237318) - הסרנו את האפשרות ליצור באופן ידני תרשים של הגישה לממשקי API חדשים של הפלטפורמה, כי זה קורה באופן אוטומטי באמצעות מידול API כשמשתמשים ב-R8 עם AGP 7.3 ואילך (למשל R8 גרסה 3.3) ובכל הגרסאות כשמשתמשים ב-AGP 8.1 ואילך (למשל D8 גרסה 8.1). לקוחות שלא משתמשים ב-AGP מומלץ לעדכן לגרסה D8 8.1 ואילך. למידע נוסף, מומלץ לעיין במאמר הזה. (I9496c, b/345472586)
- הוספנו בדיקה של גרסת agp כדי לשלוח את שם החבילה כארגומנט instr. בגרסאות קודמות ל-AGP 8.4.0, אי אפשר לשלוח את שם חבילת אפליקציית היעד לאפליקציית המדידה באמצעות ארגומנטים של המדידה. (0c72a3f)
גרסה 1.3.0-beta02
10 ביולי 2024
androidx.benchmark:benchmark-*:1.3.0-beta02
משוחרר. גרסה 1.3.0-beta02 מכילה את הקומטים האלה.
תיקוני באגים
- טיפול תקין ב-EXITCODE
2
כשמפעילים את Perfetto כדי לרשום אזהרה, אבל ממשיכים.
גרסה 1.3.0-beta01
12 ביוני 2024
androidx.benchmark:benchmark-*:1.3.0-beta01
משוחרר. גרסה 1.3.0-beta01 מכילה את הקומטים האלה.
שינויים ב-API
- שינינו את השם של
MethodTracing.affectsMeasurementOnThisDevice
ל-AFFECTS_MEASUREMENT_ON_THIS_DEVICE
כדי לשמור על עקביות. (I1bdfa) - נוסף ממשק API ניסיוני
BlackHole.consume()
כדי למנוע הסרה של קוד לא פעיל במיקרו-בנצ'מרקים. (If6812, b/286091643) - הכלי Microbenchmark יציג עכשיו חריגה בצורה נכונה כדי למנוע מהמעקב אחר שיטות להפריע למדידות. הבעיה הזו מתרחשת במכשירים מסוימים כשמפעילים בכוח מעקב אחר שיטות (באמצעות ארגומנטים של מכשור או
MicrobenchmarkConfig
), ואם מנסים לבצע מדידה אחרי מעקב אחר שיטות. במכשירים המושפעים פועלת גרסה 26 עד 30 של API או גרסאות מסוימות של מודול ART mainline שהושפעו מההפרעה הזו, ואפשר לזהות אותם בזמן הריצה באמצעותProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864)
תיקוני באגים
- הגרסה המומלצת המקסימלית של AGP הועלתה ל-9.0.0-alpha01. (I5bbb0)
- נוסף מצב קומפילציה להשוואה לשוק (If5612, b/325512900)
- הפעלת מעקב אחר AIDL כברירת מחדל (נדרש API 28) (Ia0af2, b/341852305)
- נוסף מידע נוסף בהקשר של השוואה לשוק בפלט JSON:
-
context.artMainlineVersion
– גרסה שלמה של מודול ראשי של Art (אם הוא קיים במכשיר, אחרת -1) context.build.id
- שווה ל-android.os.Build.ID
context.build.version.codename
- שווה ל-android.os.Build.VERSION.CODENAME
-
context.build.version.abbreviatedCodename
– מתאים לאות הראשונה של שם הקוד של גרסת טרום-ההפצה (גם בגרסאות הפצה) (Ie5020)
-
- בוצעו תיקונים ב-
StackSampling
כדי להתאים ל-androidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - משנים את התלות של macro->common ל-
api()
, כדי שיהיה קל יותר להשתמש ב-PerfettoTrace
וב-PerfettoConfig
. (Icdae3, b/341851833) - חשוב לוודא שהמשימות
mergeArtProfile
ו-mergeStartupProfile
תמיד ימתינו ליצירת פרופיל הבסיס. (I623d6, b/343086054) - כשמחליטים אם להפעיל וריאנט, צריך להתחשב במצב ההפעלה שלו. (I5d19e, b/343249144)
- הגדלנו את זמן ההמתנה שמוגדר כברירת מחדל להפעלה של מעבד הנתונים של Perfecto. (I87e8c, b/329145808)
גרסה 1.3.0-alpha05
14 במאי 2024
androidx.benchmark:benchmark-*:1.3.0-alpha05
משוחרר. גרסה 1.3.0-alpha05 מכילה את הקומטים האלה.
תיקוני באגים
- הצגת חריגה ברורה יותר כשמדד של בדיקת ביצועים ברמת המאקרו מחזיר ערכי אפס לכל האיטרציות (Iab58f, b/314931695)
- נוספו כללים נוספים לעקיפת בעיות לכללי ProGuard של בדיקות מיקרו, כולל תמיכה בכללי listener ואזהרות או שגיאות אחרות שנצפו. (I14d8f, b/329126308, b/339085669)
- מעקב אחר שיטות פועל כשלב נפרד במהלך בדיקת מאקרו, והוא כבר לא משפיע על המדידות. (If9a50, b/285912360, b/336588271)
- נוספו הצעות נוספות לניפוי באגים להודעה על כשל בשידור של shader. (I5efa6, b/325502725)
גרסה 1.3.0-alpha04
1 במאי 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04
משוחרר. גרסה 1.3.0-alpha04 מכילה את הקומטים האלה.
שינויים ב-API
- נוסף משתנה ניסיוני
MacrobenchmarkRule#measureRepeated
שמשתמש ב-PerfettoConfig
בהתאמה אישית כדי להקליט את הנתונים ב-Perfetto בצורה מותאמת אישית לחלוטין. שימו לב: הגדרות שגויות עלולות לגרום לכשלים במחלקות המובנות של מדדים. (Idfd3d, b/309841164, b/304038384) - שינוי השם של
PowerMetric.deviceSupportsPowerEnergy
ל-PowerMetric.deviceSupportsHighPrecisionTracking
כדי שיהיה ברור יותר (I5b82f) - הוספנו את ההגדרות
PowerMetric.deviceBatteryHasMinimumCharge()
ו-PowerMetric.deviceSupportsPowerEnergy()
כדי לאפשר שינוי של מדדי השוואה או דילוג עליהם בהתאם ליכולת המדידה של צריכת החשמל במכשיר. (I6a591, b/322121218)
תיקוני באגים
- נוספה השוואה לפרופיל הקודם של ערך הבסיס (I824c8, b/269484510)
- נוסף DSL להשבתת אזהרות (Ic4deb, b/331237001)
- השינוי של חריג ליומן מידע כשמשביתים גרסאות להשוואה לשוק (I8a517, b/332772491)
- כדי לפשט את התהליך, ה-Macrobenchmark מוגדר לפרק הזמן של ה-method
measureBlock()
בפועל. בעבר, הוא התחיל בהפעלת תהליך היעד ותמך רק בהפעלות במצב התחלתי (cold start) (Iee85a, b/300651094) - מניעת קריסה כשההפעלה של מעבד העקבות של Perfetto איטית (I98841, b/329145808)
גרסה 1.3.0-alpha03
17 באפריל 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03
משוחרר. גרסה 1.3.0-alpha03 מכילה את הקומטים האלה.
תכונות חדשות
- נוספו ממשקי API ציבוריים
PerfettoTraceProcessor.Session.queryMetrics
ממשקי API עם וריאציות של JSON, textproto ו-proto בינארי (לא מפוענח). הם מאפשרים לשלוח שאילתות לגבי מדדים שמוטמעים ב-TraceProcessor (I54d7f, b/304038382) - נוסף
profilerOutput
לפלט JSON כדי להקל על השימוש בכלי פרופילים (למשל, perfetto, method traces). (I05ddd, b/332604449) - הוספנו תג חשמל להשוואה ל-Perfetto Config. כך אפשר ללכוד, למשל, נקודות מעקב של נעילת המכשיר למניעת שינה. (Icfe44, b/286551983)
- נוסף ארגומנט inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, שאפשר להגדיר לו את הערך false כדי למנוע דילוג על מעקב אחר שיטות כשהמשך הצפוי עלול לגרום ל-ANR – מומלץ מאוד להימנע מכך בהפעלות של CI. - נוסף ארגומנט ניסיוני של inst
androidx.benchmark.profiling.perfCompare.enable
. מגדירים את הארגומנט הזה לערך true כדי להריץ השוואת תזמון בין שלבי המדידה והפרופיל. שימושי למשל להערכת התקורה של מעקב אחר שיטות. (I61fb4, b/329146942)
שינויים ב-API
- השינוי
TraceSectionMetric.Mode
ל-sealed class מאפשר הרחבה עתידית בלי לשבור את ההצהרות הממצות של when (I71f7b) - הוספנו את
TraceSectionMetric.Mode.Average
ואת.Count
, וסידרנו מחדש את הארגומנטים כך שהארגומנט הנפוץ יותר (mode) יופיע מוקדם יותר ברשימת הארגומנטים, וכך צמצמנו את הצורך לציין שמות של פרמטרים. (Ibf0b0, b/315830077, b/322167531) - השם של
Metric.getResult
שונה ל-getMeasurements
כדי להתאים לסוג ההחזרה (I42595)
תיקוני באגים
- צריך לפתור את הבעיה כדי להבטיח שהמדדים ישתמשו בפרופילים בסיסיים שנוצרו כש
automaticGenerationDuringBuild
מושבת (Ic144f, b/333024280) - תוקנו בעיות שקשורות לביטול של מאפיינים של תוסף gradle כדי לאפשר יצירה של פרופיל בסיסי והשוואה לביצועים כשמבצעים התאמה אישית של
nonMinified
או של סוג build להשוואה לביצועים.BaselineProfile
(Ib8f05, b/324837887) - תיקנו את הבעיה שגרמה לכך שנתוני מעקב אחר שיטות לא נשמרו ב-macrobenchmark, כך שנתוני המעקב אחר שיטות אמורים להישמר באופן מלא ותקין, גם במכשירים איטיים יותר. (I6349a, b/329904950)
- הפעלת חסימת התחלה ברשומה של מעקב Perfetto כדי להפחית את הסיכון לאובדן נתונים בתחילת המעקב. התכונה נתמכת רק ב-API 33 ומעלה. (Ie6e41, b/310760059)
- נוספה אזהרה כשמשתמשים ב-Android Test Orchestrator במודולים של בדיקות השוואתיות, כי זה יגרום לכך שקובצי ה-JSON של הפלט לכל מודול יידרסו שוב ושוב. (Ia1af6, b/286899049)
- הוספת פסיקים כמפרידי אלפים כדי לשמור על עקביות בפלט של Studio, בלי להתחשב באזור של המכשיר (I3e921, b/313496656)
-
TraceSectionMetric
תומך עכשיו בפרוסות שנוצרו באמצעותTrace.{begin|end}AsyncSection
. (I91b32, b/300434906) - הוספנו תוויות של log.w / exception לכל הכשלים בזיהוי ההפעלה. השינוי הזה לא משנה את ההתנהגות הנוכחית (כך שחלק מהשגיאות מופעלות, ואחרות נכשלות בשקט בזיהוי ההפעלה), אלא רק הופך אותה למובנת יותר. בדרך כלל, האירועים שמוצגים ב-
Log.w()
ושלא מצליחים לדווח על מדדי הפעלה הם אלה שחסרים בהם אירועים שאינם קשורים למסגרת, ומוצגים חריגים כשמזוהה הפעלה, למעט מידע על תזמון המסגרת (מפרוסות של ממשק המשתמש/זמן אמת). (Id240f, b/329145809) - כדי לצמצם את ההפרעות, צריך לבטל את משימות ה-dexopt ברקע לפני שמריצים Macrobenchmark. (I989ed)
- הוספנו מדידה של
frameCount
ל-FrameTimingMetric
כדי לעזור לכם לזהות תרחישים שבהם המדידות משתנות בגלל שינוי במספר הפריימים שנוצרו (הוספנו אנימציות חדשות, תיקנו בעיות שקשורות לביטול תוקף). (I1e5aa) - הוספנו הבהרה שלפיה
frameOverrunMs
הוא המדד המועדף למעקב כשהוא זמין במסמכי התיעוד, והסבר למה. (I18749, b/329478323)
גרסה 1.3.0-alpha02
20 במרץ 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02
משוחרר. גרסה 1.3.0-alpha02 מכילה את הקומטים האלה.
תכונות חדשות
תמיכה ניסיונית ב-R8 במיקרו-בנצ'מרק באמצעות כללי proguard מוטמעים. שימו לב שהתמיכה הזו היא ניסיונית, ונדרש AGP 8.3 לצורך מזעור של בדיקות מודול הספריות. כדי להפעיל את האפשרות R8 minification/optimization במודול ההשוואה
build.gradle
, צריך להשתמש בקוד הבא. הפעלה כזו אמורה להוביל לשיפור משמעותי בביצועים, בהתאם לעומס העבודה. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
תיקוני באגים
- תוקנה אזהרה לגבי מעקב אחר שיטות, כך שהיא מופיעה בשורה נפרדת מהפלט של המיקרו-בנצ'מרק. (I0455c, b/328308833)
גרסה 1.3.0-alpha01
21 בפברואר 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01
משוחרר. גרסה 1.3.0-alpha01 מכילה את הקומיטים האלה.
שינויים ב-API
- שינינו את השם של הפרמטרים הבוליאניים
MicrobenchmarkConfig
כדי להימנע מהמילה המיותרת 'should' (Ia8f00, b/303387299) - נוספה האפשרות
BenchmarkRule.measureRepeatedOnMainThread
כדי שבדיקות ביצועים של השרשור הראשי (למשל, בדיקות שקשורות ל-Views או לממשקי משתמש של Compose) לא יפעילו שגיאות ANR, במיוחד במהלך חבילות גדולות ב-CI. (I5c86d) - נוסף
FrameTimingGfxInfoMetric
, הטמעה חלופית ניסיונית שלFrameTimingMetric
עם מדידות שמגיעות ישירות מהפלטפורמה, במקום לחלץ אותן מהמעקב של Perfetto. (I457cb, b/322232828) - הוספת האפשרות ליצור dump של פרופיל ART במהלך איטרציות בודדות של
warmUp
. (I17923) - בוצעו כמה שינויים ב-API של
TraceSectionMetric
:- הוספה של
Mode.Min
,Mode.Max
- הוספת ארגומנט של תווית כדי לשנות את שם הקטע כתווית מדד
- הוספנו את שם המצב לפלט כדי להבהיר את משמעות המדד
- שינינו את ברירת המחדל לחישוב סכום, כי רוב השימוש במדד הזה הוא לאירועים חוזרים. חשוב לשים לב לשינויים האלה בשימוש ב-CI, כי הם עלולים ליצור אי-רציפות או לשבור את הניתוח. (Ic1e82, b/301892382, b/301955938)
- הוספה של
תיקוני באגים
- שיפור הודעת השגיאה בתוסף Gradle של פרופיל בסיסי כשמציינים מכשיר מנוהל שלא קיים (Idea2b, b/313803289)
- תיקון שמאפשר לכלול פרופילים בסיסיים של ספריות ב-AAR לפני AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- כתובת ה-URL של הפלט של פרופיל הבסיס ופרופיל ההפעלה תוקנה בסוף משימת היצירה (I802e5, b/313976958)
- בוצעו שינויים בערכי הזמן הקצוב לתפוגה של מקורות נתונים בניסיון לפתור את הבעיה
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) - הוספת שני ארגומנטים של מכשור כדי לעקוף את התנהגות ההשמטה של Shader כדי לעקוף קריסות כשמבצעים השוואה בין אפליקציות ללא
ProfileInstaller
1.3:-
androidx.benchmark.dropShaders.enable=true/false
: אפשר להשתמש באפשרות הזו כדי לדלג על כל ההסרה של shader (כולל זו שמתבצעת בהפעלות שלStartupMode.Cold
), במיוחד כשמבצעים השוואת ביצועים של אפליקציות שעדיין לא משתמשות ב-profileinstaller 1.3 -
androidx.benchmark.dropShaders.throwOnFailure=true/false
: אפשר להשתמש בה כדי לסבול כשלים כשמנסים להסיר shaders, למשל כשמבצעים בדיקות השוואה לאפליקציות בלי profileinstaller 1.3 (I4f573)
-
- מדלגים על מעקב אחר שיטות בשרשור ממשק המשתמש כשהצפי הוא שהפעולה תימשך יותר מכמה שניות, ומנקים את המעקב אחר השיטות כשמתרחשת שגיאה. (I6e768)
- הפונקציה תפעל כשיש שמות קבצים ארוכים מ-200 תווים, כדי למנוע קריסות לא ברורות כשכותבים או מעבדים קבצים. (I4a5ab)
- תוקנה בעיה שבה אפשר היה לשייך מסגרות לא סגורות בתחילת העקבות ובסופו, וכתוצאה מכך הן דווחו באופן שגוי כמסגרת אחת ארוכה במיוחד. (I39353, b/322232828)
- משתמשים ב-
--skip verification
ב-API 30 ומעלה כשמתקינים מחדש חבילה ב-API 30-33 כדי לנקות פרופילים של ART בגרסאות למשתמשים. כך אפשר לעקוף אזהרות של Play Protect שגורמות לכשלים בחלק מהמכשירים. (Ic9e36) - אפשר להשתמש ב-
am force-stop
כדי להפסיק אפליקציות שאינן אפליקציות מערכת, כמו ממשק המשתמש של המערכת או מרכז האפליקציות. (I5e028) - הכלי Macrobenchmark ממתין עכשיו למשך
1 second
עד שהאפליקציה המטורגטת תבצע סנכרון של פרופיל ART (בעבר ההמתנה הייתה למשך500 ms
). (I85a50, b/316082056) - שיפור השגיאה
FrameTimingMetric
כשלא נוצרים פריימים, ותמיד מוציא קישור למעקב כשניתוח המדדים נכשל, כדי לעזור באבחון הבעיה. (I956b9) - תוקנה קריסה ב-
FrameTimingMetric
שלא הצליחה לנתח את מזהה הפריים, במיוחד במכשירי OEM מסוימים. (Ia24bc, b/303823815, b/306235276) - הפחתנו את רמת ההקפדה של הבדיקות ב-
FrameMetrics
והוספנו פרטים נוספים להודעות השגיאה. (Iadede)
גרסה 1.2
גרסה 1.2.4
17 באפריל 2024
androidx.benchmark:benchmark-*:1.2.4
משוחרר. גרסה 1.2.4 מכילה את הקומטים האלה.
תיקוני באגים
- תוקנה בעיה שבה לא הוגדר srcset של פרופיל בסיסי בווריאציות של השוואה לשוק. בנוסף, נפתרה בעיה שקשורה ל-
automaticGenerationDuringBuild
בספריות שגורמת לתלות מעגלית. (I28ab7, b/333024280) - אפשר להשתמש ב-
am force-stop
כדי להפסיק אפליקציות שאינן אפליקציות מערכת, כמו ממשק המשתמש של המערכת או מרכז האפליקציות. התיקון הזה פותר את הבעיה שגורמת לקריסת מדדי הביצועיםStartupMode.COLD
עם השגיאה 'Package $package must not be running prior to cold start!' (החבילה $package לא יכולה לפעול לפני הפעלה קרה!) בגלל שהפסקת התהליך לא מצליחה באופן מלא. (I5e028)
גרסה 1.2.3
24 בינואר 2024
androidx.benchmark:benchmark-*:1.2.3
משוחרר. גרסה 1.2.3 מכילה את הקומיטים האלה.
תיקוני באגים
- הוסרה חריגה מהפלאגין Baseline Profile Gradle כשגרסת AGP היא 8.3.0 ומעלה.
- תיקון להכללת פרופילים בסיסיים של ספריות ב-AAR לפני AGP 8.3.0-alpha15.
גרסה 1.2.2
1 בדצמבר 2023
androidx.benchmark:benchmark-*:1.2.2
משוחרר. גרסה 1.2.2 מכילה את הקומיטים האלה.
פרופילים של Baseline
- בקטעי היומן של ההפעלה יוצג נתיב הקובץ של הפלט של פרופיל הבסיס כמזהה URI של קובץ מקומי (aosp/2843918, aosp/2853665, b/313976958)
גרסה 1.2.1
15 בנובמבר 2023
androidx.benchmark:benchmark-*:1.2.1
משוחרר. גרסה 1.2.1 מכילה את הקומיטים האלה.
תכונות חדשות
- שיפור הודעת השגיאה כשמשתמש משבית וריאציות של בדיקה (b/307478189)
- נוספו מאפיינים לתמיכה בשילוב של הרצת בדיקות של AS (b/309805233), (b/309116324)
גרסה 1.2.0
18 באוקטובר 2023
androidx.benchmark:benchmark-*:1.2.0
משוחרר. גרסה 1.2.0 מכילה את הקומיטים האלה.
שינויים חשובים מאז גרסה 1.1.0
פרופילים של Baseline
- התוסף החדש Baseline Profile Gradle Plugin מאפשר לכם לכלול פרופילים בסיסיים בתהליך העבודה של הבדיקות וה-build.
BaselineProfileRule.collect
יציב עכשיו, גרסה יעילה ופשוטה של ה-API הניסיוני הקודםBaselineProfileRule.collectBaselineProfile
- פשוט מציינים את
packageName
, ומקדמים את האפליקציה
- פשוט מציינים את
- בספריות שיוצרות פרופילים של בסיס, עכשיו אפשר לסנן את הכללים שנוצרו בקוד (ארגומנט
BaselineProfileRule.collect
), או אפילו בצורה פשוטה יותר בתוסף gradle - תיקונים
- תוקן איסוף פרופילים בסיסיים ב-Android U+ (Id1392, b/277645214)
Macrobenchmark
- אוסף
- החל מעכשיו, Macrobenchmark מאפס באופן מלא את מצב הקומפילציה לכל קומפילציה. כדי לעשות זאת, צריך להתקין מחדש את ה-APK בגרסאות קודמות ל-Android 14. לכן, מומלץ מאוד לבצע השוואת ביצועים ב-Android 14 ומעלה אם רוצים לשמור את המצב (למשל, התחברות משתמש) בנתונים שנמדדים.
- אפשר גם לעקוף את הבעיה הזו על ידי שליטה בהידור האפליקציה בנפרד, ודילוג על ההידור באמצעות
CompilationMode.Ignore()
או instrumentation argument
ארגומנטים של מכשור
- תמיכה בארגומנט של מכשור
androidx.benchmark.dryRunMode.enable
(כבר זמין במיקרו-בנצ'מרק) להרצות אימות מהירות יותר (למשל, כשיוצרים את הבנצ'מרק או ב-presubmit) - תמיכה ב-
androidx.benchmark.profiling.mode=StackSampling
וב-MethodTracing
. - נוספה
androidx.benchmark.enabledRules
כדי לאפשר סינון בזמן ריצה של פרופיל בסיסי לעומת בדיקות כללים של מדד מאקרו - נוסף הארגומנט
androidx.benchmark.perfettoSdkTracing.enable
כדי להפעיל מעקב באמצעות tracing-perfetto, למשל מעקב אחר הרכבה מחדש של Compose. שימו לב: כשמשתמשים ב-StartupMode.COLD
, התזמון מושפע באופן משמעותי כי ספריית המעקב נטענת ומופעלת במהלך הפעלת האפליקציה.
- תמיכה בארגומנט של מכשור
דרישות
- כדי להפעיל את התכונות 'לכידת פרופיל' או 'איפוס' וניקוי המטמון של הצללות, צריך להשתמש ב-Macrobenchmark בגרסה
ProfileInstaller
1.3.0 ואילך באפליקציית היעד.
- כדי להפעיל את התכונות 'לכידת פרופיל' או 'איפוס' וניקוי המטמון של הצללות, צריך להשתמש ב-Macrobenchmark בגרסה
ממשקי API ניסיוניים חדשים של מדדים
- נוסף
TraceSectionMetric
ניסיוני, שמאפשר לחלץ תזמון פשוט מבלוקים שלtrace("") {}
באפליקציה, או TraceMetric כדי לנצל את יכולת השאילתות המלאה של PerfettoTraceProcessor
. - נוסף
PowerMetric
ניסיוני כדי לתעד מידע על צריכת החשמל - נוספה מדידה ניסיונית של
MemoryCountersMetric
לספירת שגיאות בדפים - הוספנו את
PerfettoTraceProcessor
API ניסיוני, שמשמש באופן פנימי לחילוץ מדדים ממעקבי מערכת (נקראים גם מעקבי Perfetto)
- נוסף
תיקונים
- תוקנו קריסות שמתרחשות כשמתקינים או מחלצים פרופילים מאפליקציה שהותקנה מכמה קובצי APK (למשל מ-App Bundle).
- תוקנה בעיה שבה
FrameTimingMetric
התעלם מפריימים עם מזהי פריימים לא עקביים (בדרך כלל, פריימים במהלך אדוות ב-API 31 ואילך) (I747d2, b/279088460) - תוקנו שגיאות בניתוח של עקבות בגודל של יותר מ-64MB (Ief831, b/269949822)
- הוספנו הבהרות לגבי שגיאות שמתרחשות כשדימוי מערכת ההפעלה של המכשיר (במיוחד אמולטור) לא מוגדר כראוי למעקב או לקומפילציה
- דילוג על בדיקת רמת הטעינה של הסוללה במכשירים ללא סוללה (מיקרו ומאקרו)
- שיפרנו את פלט הקבצים, עם שגיאות ברורות יותר לגבי ספריות פלט לא תקינות, וברירות מחדל בטוחות יותר
- שיפור היציבות של
StartupMode.COLD
על ידי הסרת מטמון ההצללה באופן עקבי (גם דרךMacrobenchmarkScope.dropShaderCache
) - תוקן מצב חלופי של צפייה בהישענות לאחור ב-
startActivityAndWait
.
Microbenchmark
- תכונות
- הפרופיל הועבר לשלב נפרד, אחרי מדדים אחרים, כך שריצת בדיקה אחת יכולה להציג גם תוצאות מדויקות של תזמון וגם תוצאות של פרופיל.
- ממשקי API ניסיוניים
- הוספנו API ניסיוני
MicrobenchmarkConfig
להגדרת מדדים בהתאמה אישית ולהגדרת מעקב ופרופילים. אפשר להשתמש בו כדי לתעד עקבות של שיטות או לתעד נקודות מעקב (אבל צריך להיות מודעים לתקורה של המעקב). - נוספו ממשקי API ניסיוניים לשליטה ב-
BenchmarkState
בנפרד מ-BenchmarkRule
, ללא JUnit - הוספנו רשומה ניסיונית
PerfettoTrace
כדי לאפשר לכידה של עקבות Perfetto, עם הגדרה בהתאמה אישית, בנפרד מממשקי API של בדיקות השוואה.
- הוספנו API ניסיוני
- תיקונים
- פתרון עקיף לבעיה של רווחים לבנים חסרים בתחילת הפלט של בדיקת ביצועים ב-Android Studio.
- תוקנה הבעיה שבה יכול להיות שהאזהרות לא יודפסו בפלט של בדיקת הביצועים ב-Android Studio.
- תוקנה קריסה של
SampledProfiling
ב-Android 13 (API 33) ומעלה. - שיפור משמעותי בביצועים של
dryRunMode
על ידי דילוג עלIsolationActivity
ועל מעקב Perfetto (עד פי 10 מהר יותר במצב הרצה יבשה בגרסאות OS ישנות יותר).
גרסה 1.2.0-rc02
6 באוקטובר 2023
androidx.benchmark:benchmark-*:1.2.0-rc02
משוחרר. גרסה 1.2.0-rc02 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקן פלט קובץ ההשוואה כך שלא יגרום יותר לבעיות בהעתקת קובץ הפלאגין.
BaselineProfile
הקבצים נוצרו והועתקו מהמכשיר, אבל הם שונו כך שתוסף Gradle לא יראה אותם. (I8dbcc, b/303034735, b/296453339) - הוספנו הבהרות להודעות השגיאה של טעינת
tracing-perfetto
כשמזריקים ממודול macrobenchmark לאפליקציית היעד.
גרסה 1.2.0-rc01
20 בספטמבר 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
משוחרר. גרסה 1.2.0-rc01 כוללת את הקומיטים האלה.
תיקוני באגים
- חריג (עם הוראות לפתרון) מופעל עכשיו כשמעקב Perfetto SDK לא מצליח להתחיל בבדיקת ביצועים. (I6c878, b/286228781)
- תוקן קראש של OOM במהלך המרה של מעקב אחר שיטת ART לפורמט perfetto. (I106bd, b/296905344)
- (Macrobenchmark) הבהרנו את התווית של מעקב אחר שיטות כשמקשרים אותה לפלט של בדיקה ב-Studio, ותיקנו את שמות הקבצים של מעקב אחר שיטות כך שיהיו ייחודיים במכשיר או במארח, כדי שלא יוחלף כשמפעילים יותר מנקודת השוואה אחת. (I08e65, b/285912360)
- ההגדרה הזו מוודאת שהמכשיר פעיל בזמן יצירת פרופיל בסיסי. (I503fc)
גרסה 1.2.0-beta05
30 באוגוסט 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
משוחרר. גרסה 1.2.0-beta05 מכילה את הקומיטים האלה.
תכונות חדשות
- הפלאגין Baseline Profile Gradle תומך עכשיו בפלאגין Android Gradle 8.3. (aosp/2715214)
גרסה 1.2.0-beta04
23 באוגוסט 2023
androidx.benchmark:benchmark-*:1.2.0-beta04
משוחרר. גרסה 1.2.0-beta04 מכילה את הקומיטים האלה.
תכונות חדשות
- הפלאגין Baseline Profiles Gradle תומך עכשיו בפלאגין Android Gradle 8.3. (aosp/2715214)
תיקוני באגים
- כדי לתקן כשלים בכתיבה, בהעברה ובשליפה של קבצים (במיוחד קבצים מבדיקות עם פרמטרים), צריך לבצע סניטציה נוספת של שמות קובצי הפלט, ולהימנע משימוש בתווים '=' ו-':' בשמות קובצי הפלט. (I759d8)
גרסה 1.2.0-beta03
9 באוגוסט 2023
androidx.benchmark:benchmark-*:1.2.0-beta03
משוחרר. גרסה 1.2.0-beta03 מכילה את הקומיטים האלה.
שינויים ב-API
- נוסף ארגומנט למסנן
TraceSectionMetric
כדי לסנן רק את חבילת היעד, מופעל כברירת מחדל (Ia219b, b/292208786)
תיקוני באגים
- שונה השם של ארגומנט המדידה
fullTracing.enable
ל-perfettoSdkTracing.enable
כדי לשמור על עקביות עם שם הארטיפקט והפניות אחרות.fullTracing.enable
ימשיך לפעול כגיבוי. (I7cc00) - נקודות מעקב פנימיות בספריית ההשוואה (כולל מעקב אחר לולאה/שלב של מיקרו-השוואה) יוצגו עכשיו בכלי לצפייה במעקב של מערכת Studio, ויוצגו כרכיב משנה בתהליך הנכון ב-Perfetto. (I6b2e7, b/293510459)
- הוסרה שגיאת macrobenchmark NOT-PROFILEABLE ב-API 31 ומעלה, ודילוג על בדיקת profileable במכשירי eng/userdebug עם הרשאות root. (I2abac, b/291722507)
- כשמשתמשים באופטימיזציות של פריסת Dex, כללי פרופיל ההפעלה נחשבים עכשיו גם ככללי פרופיל בסיסיים. (aosp/2684246, b/293889189)
גרסה 1.2.0-beta02
26 ביולי 2023
androidx.benchmark:benchmark-*:1.2.0-beta02
משוחרר. גרסה 1.2.0-beta02 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספו ממשקי API ניסיוניים למדדים מותאמים אישית של מיקרו-בנצ'מרק והגדרה (לדוגמה, פרופילר ומעקב). (I86101, b/291820856)
תיקוני באגים
- דיווח על שגיאה ב-macrobench כשמערכת ההפעלה מוגדרת בצורה שגויה למעקב, כפי שתוקן לאחרונה באמולטורים של API 26/28 ARM64. (I0a328, b/282191686)
- הוספנו פרטים על כשל באיפוס של קומפילציה, כדי להציע עדכון של האמולטור, כי בחלק מהאמולטורים הבעיה הזו תוקנה לאחרונה. (I8c815, b/282191686)
- הופכים את
androidx.test.uiautomator:uiautomator:2.2.0
לתלות מסוגapi
במקום לתלות מסוגimplementation
. (I1981e)
גרסה 1.2.0-beta01
18 ביולי 2023
androidx.benchmark:benchmark-*:1.2.0-beta01
משוחרר. גרסה 1.2.0-beta01 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנו בעיות שגרמו להסתרת אזהרות בפלט של נקודת השוואה ב-Studio, ובעיות שגרמו לכך שרווחים מובילים בפלט של נקודת השוואה לא הוצגו ב-Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
- תוקנה תגובה בנושא
FrameTimingMetric
. שם המדד המשני הואframeDurationCpuMs
. (Ib097f, b/288830934).
גרסה 1.2.0-alpha16
21 ביוני 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16
משוחרר. גרסה 1.2.0-alpha16 מכילה את הקומיטים האלה.
שינויים ב-API
- השם של API
BaselineProfileRule.collectBaselineProfile()
השתנה ל-BaselineProfileRule.collect()
. (I4b665)
תיקוני באגים
- תמיכה בבדיקות מאקרו של
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360) - הפרופיל של המיקרו-בנצ'מרק עבר לשלב נפרד, ולכן הוא מתרחש ברצף אחרי המדידה, במקום להחליף אותה. גם קטעי ה-trace של
MethodTracing
נכללים עכשיו ב-trace שצולם ב-Perfetto, אם הם קיימים. (I9f657, b/285014599) - הוספת מדידת ספירה אל
TraceSectionMetric
באמצעותMode.Sum
. (Ic121a, b/264398606)
גרסה 1.2.0-alpha15
7 ביוני 2023
androidx.benchmark:benchmark-*:1.2.0-alpha15
משוחרר. גרסה 1.2.0-alpha15 מכילה את הקומיטים האלה.
תכונות חדשות
- נוספה תכונה ניסיונית
MemoryUsageMetric
למעקב אחר השימוש בזיכרון של אפליקציית יעד. (I56453, b/133147125, b/281749311) - הוספת תמיכה בהגדרות Perfetto בהתאמה אישית מלאה באמצעות
PerfettoTrace.record
(If9d75, b/280460183) - נוסף מאפיין לדילוג על יצירת פרופיל בסיסי. שימוש:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
שינויים ב-API
- API
collectBaselineProfile
תמיד יוצר פרופילים יציבים של בסיס. ממשק ה-APIcollectStableBaselineProfile
הוסר, ובמקומו צריך להשתמש ב-collectBaselineProfile
. (I17262, b/281078707) - השתנה
BaselineProfileRule
'sfilterPredicate
arg to non-null, with a equivalent default value so that the default filter behavior is more clear in docs. (I3816e)
תיקוני באגים
- כדי לשפר באופן משמעותי את הביצועים, כדאי להשבית את
IsolationActivity
ואת Perfetto tracing ב-dryRunMode
, כי הם היו רוב זמן הריצה. (Ie4f7d) - תמיכה בדגימת מחסנית קריאות בבדיקות Macrobenchmark באמצעות ארגומנטים של בדיקות מכשור
androidx.benchmark.profiling.mode=StackSampling
ו-androidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - תוקן קריסה שמתרחשת כשמפילים הצללות ב-Android U (API 34), וגם באמולטורים. (I031ca, b/274314544)
גרסה 1.2.0-alpha14
3 במאי 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14
משוחרר. גרסה 1.2.0-alpha14 מכילה את הקומיטים האלה.
תיקוני באגים
- תיקון של
FrameTimingMetric
שמתעלם ממסגרות עם מזהי מסגרות לא עקביים. במצב כזה, חלק מהאנימציות בגרסאות פלטפורמה עדכניות (API 31 ומעלה) יתעלמו מהרבה פריימים בזמן האנימציה שלRenderThread
(למשל, במהלך אפקט הגלים). (I747d2, b/279088460) - תוקן ניתוח של מעבד עקבות לעקבות בגודל של יותר מ-64MB. (Ief831, b/269949822)
- תוקנה בעיה שגרמה לכך שיצירת פרופיל בסיסי ב-Android U נכשלה בגלל הפלט השונה של הפקודה
pm dump-profiles
. (Id1392, b/277645214) - תיקון סקריפט לנעילת שעון GPU כדי להשוות מחרוזות בצורה נכונה (I53e54, b/213935715)
גרסה 1.2.0-alpha13
5 באפריל 2023
androidx.benchmark:benchmark-*:1.2.0-alpha13
משוחרר. גרסה 1.2.0-alpha13 מכילה את הקומיטים האלה.
שינויים ב-API
- נוסף פרמטר של סוג הפרופיל כשיוצרים פרופילים בסיסיים כדי לתמוך בתכונת פרופיל ההפעלה הקרובה (Ie20d7, b/275093123)
- הוספנו API ניסיוני חדש,
TraceMetric
, להגדרת מדדים בהתאמה אישית מלאה על סמך תוכן של עקבות Perfetto. (I4ce31, b/219851406) - מוסיפים מדד ניסיוני כדי לקבוע את מספר תקלות הדף במהלך בדיקת ביצועים. (I48db0)
גרסה 1.2.0-alpha12
22 במרץ 2023
androidx.benchmark:benchmark-*:1.2.0-alpha12
משוחרר. גרסה 1.2.0-alpha12 מכילה את הקומיטים האלה.
תכונות חדשות
- התוסף החדש של Gradle ליצירת פרופיל בסיסי זמין בגרסת אלפא. הוא מאפשר ליצור פרופיל בסיסי בקלות רבה יותר ומפשט את תהליך העבודה של המפתחים.
שינויים ב-API
- הוסרה התמיכה ב-Perfetto tracing ב-API 21 וב-API 22, שכוללת גם Microbenchmarks וגם את ממשקי ה-API הניסיוניים
PerfettoTrace
. לפני הגרסה הזו, החיבורים שלUiAutomation
לא היו אמינים במכשירים מסוימים. (I78e8c) - הוספנו API ציבורי ניסיוני ל-
PerfettoTraceProcessor
כדי לאפשר ניתוח של תוכן מעקב. זהו צעד לקראת מדדים בהתאמה אישית מלאה שמבוססים על נתוני מעקב של Perfetto. (I2659e, b/219851406)
גרסה 1.2.0-alpha11
8 במרץ 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11
משוחרר. גרסה 1.2.0-alpha11 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנו קריסות ב-
MacrobenchmarkRule
וב-BaselineProfileRule
כשמתקינים מחדש פרופילים או מחלצים אותם מ-App Bundle עם כמה קובצי APK. (I0d8c8, b/270587281)
גרסה 1.2.0-alpha10
22 בפברואר 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10
משוחרר. גרסה 1.2.0-alpha10 מכילה את הקומיטים האלה.
תכונות חדשות
- ב-Android 14 ואילך, Macrobenchmark לא מתקין מחדש אפליקציות יעד כדי לאפס את מצב הקומפילציה, הודות לתכונה חדשה בפלטפורמה. בעבר היה צורך במכשיר עם הרשאות רוט, או להתמודד עם מצב שבו כל מצב האפליקציה (למשל, התחברות משתמש) מוסר לפני כל הפעלה של בדיקת ביצועים. (I9b08c, b/249143766)
תיקוני באגים
- תיקון
DryRunMode
כדי שלא יקרו יותר קריסות עם פרופיל ריק, בגלל דילוג על קומפילציה. במקום זאת, הוא מריץ איטרציה אחת ומחלץ את הפרופיל כדי לוודא שמשהו נשמר. (I2f05d, b/266403227) - תוקנה קריסת
PowerMetric
כשבודקים את הנוכחות של powerstats ברמות API ישנות. (5faaf9, b/268253898)
גרסה 1.2.0-alpha09
11 בינואר 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09
משוחרר. גרסה 1.2.0-alpha09 מכילה את הקומיטים האלה.
תיקוני באגים
- הפעלת העברת
None
לארגומנט של מכשורandroidx.benchmark.enabledRules
כדי להשבית את כל ההשוואות לנקודת בסיס או יצירת פרופיל בסיסי. (I3d7fd, b/258671856) - תיקון של
PerfettoTrace
capture במודולים של אפליקציות (כלומר, קובצי APK של בדיקות שלא מבוצעות באופן עצמאי) (I12cfc) - תוקן הסדר של ארגומנטים של adb pull בפלט של Studio (I958d1, b/261781624)
- אמולטור Arm API 33 מזוהה עכשיו בצורה נכונה כשמנסים להריץ macrobenchmark, והאזהרה מודפסת בצורה נכונה. (69133b,b/262209591)
- דילוג על בדיקת רמת הטעינה של הסוללה במכשירים ללא סוללה ב-Macrobenchmark (fe4114, b/232448937)
גרסה 1.2.0-alpha08
7 בדצמבר 2022
androidx.benchmark:benchmark-*:1.2.0-alpha08
משוחרר. גרסה 1.2.0-alpha08 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספו ממשקי API חדשים וניסיוניים
PerfettoTrace.record {}
ו-PerfettoTraceRule
כדי לתעד עקבות של Perfetto (שנקראים גם עקבות מערכת) כחלק מבדיקה, במטרה לבדוק את התנהגות הבדיקה והביצועים שלה. (I3ba16) - הפונקציה
BaselineProfileRule
מקבלת עכשיו מסנן במקום רשימה של קידומות חבילה. כך הבדיקה מקבלת שליטה מלאה על הסינון. (I93240) - הוספנו API ניסיוני
BaselineProfileRule.collectStableBaselineProfile
שממתין עד שפרופיל בסיסי יהיה יציב למשך N איטרציות. (I923f3) - הוספנו אפשרות לציין תחילית לשם קובץ הפלט כשיוצרים פרופילים של נתוני בסיס באמצעות
BaselineProfileRule
. (I7b59f, b/260318655)
תיקוני באגים
- שיפור הבטיחות של כתיבת פלט קבצים, כדי למנוע מצב שבו קובצי פלט לא נכתבים או מצורפים בשקט, במיוחד ב-API 21/22. (If8c44, b/227510293)
- צריך לתקן את הפלט של
simpleperf
trace כדי ליצור את הקובץ ולמקם אותו בצורה נכונה. בנוסף, הפתרון הזה אמור לפתור בעיות כלליות יותר שקשורות למקרים שבהם gradle לא מצליח לשלוף קובץ. (I12a1c, b/259424099) - שיפור הודעת השגיאה של profileinstaller שמוצגת כשהגרסה של profileinstaller ישנה מדי. במקום להציג הודעה על כך שאין תמיכה במדידת פרופילים בסיסיים ב-API 31 עד 33, מוצגת עכשיו הודעה שמבקשת לעדכן את הגרסה של profileinstaller (1.2.1). (Ia517f, b/253519888)
- תיקון כמה כשלים בפקודות של מעטפת onerror message Print needed API <=23, כולל הגדרה בינארית של לכידת perfetto שנכשלה וכשלים בלכידת מעקב (Ib6b87, b/258863685)
- מיון אוטומטי של כללי פרופיל שנוצרו כדי לצמצם את מספר השינויים כשהם משתנים לאורך זמן (כשמבצעים צ'ק-אין של כללי פרופיל לבקרת מקור). (Ie2509)
- תוקנה קריסה בגרסאות שלא עברו Root מתחת ל-Android 13 (API 33) עם ההודעה
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183)
בעיות מוכרות
- יכול להיות שהאפליקציה MacrobenchmarkScope.dropShaderCache()
תקרוס בגלל חוסר ברישום של שידור במניפסט של profileinstaller, שעדיין לא פורסם. (I5c728, b/258619948) כדי לעקוף את הבעיה ב-profileinstaller:1.3.0-alpha02
, מוסיפים את השורה הבאה לקובץ AndroidManifest.xml של האפליקציה (לא של הבדיקה):
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
גרסה 1.2.0-alpha07
9 בנובמבר 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07
משוחרר. גרסה 1.2.0-alpha07 מכילה את הקומיטים האלה.
שינויים ב-API
- הוספנו
PowerMetric
API למדידת אנרגיה והספק ב-Macrobenchmarks. (Ife601, b/220183779) - תיקנו את הבעיה
MacrobenchmarkScope.dropShaderCache()
ועכשיו המטמון של ההצללה נמחק. הפעולה הזו מסירה רעשי רקע של כ-20 אלפיות השנייה מהמדדים שלStartupMode.COLD
, כי עכשיו ה-shaders מנוקים באופן עקבי בכל איטרציה. בעבר,Partial
קומפילציה באמצעות איטרציות של חימום הייתה מדווחת על מספרים מהירים מדי באופן שגוי, כי סביר יותר שהיה מתבצע שמירת shader במטמון במהלך החימום. כדי להחיל את התיקון הזה, צריך להשתמש במכשיר עם הרשאות רוט או ב-profileinstaller:1.3.0-alpha02
באפליקציית היעד. למידע על שינויים ב-API של ספרייתProfileInstaller
, אפשר לעיין בדף ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742) - הוספנו את
TraceSectionMode("label", Mode.Sum)
, שמאפשר למדוד את הזמן הכולל שחלף בכמה קטעים של מעקב עם אותה התווית. לדוגמה,TraceSectionMetric("inflate", Mode.Sum)
ידווח על המדדinflateMs
לגבי הזמן הכולל שהוקדש לאינפלציה במבחן הביצועים המקיף. בנוסף, הסרנו את הדרישה ל-API 29, כיTraceSectionMetric
פועל עםandroidx.tracing.Trace
עד לרמות API נמוכות יותר, באמצעותforceEnableAppTracing
באפליקציה המטורגטת. (Id7b68, b/231455742)
תיקוני באגים
- שיפור הבטיחות של כל פקודות ה-shell הפנימיות על ידי אימות כל הפלט והשגיאות. (I5984d, b/255402908, b/253094958)
- מציינים את המכשיר בפקודה של פרופיל הבסיס
adb pull
, כדי שאפשר יהיה להעתיק את פקודת המשיכה בקלות אם מחוברים כמה מכשירים (עד אמולטור אחד) (I6ac6c, b/223359380) - הוספת שגיאה אם קובץ ה-APK של בדיקת המקרו-בנצ'מרק לא מוגדר כקובץ שניתן להפעיל בו בדיקות אינסטרומנטציה. השגיאה הזו מונעת ביצוע של השוואה בין ביצועים של אפליקציות שונות מתוך התהליך של אפליקציית היעד. במהלך העיבוד, לא תהיה אפשרות לקומפילציה, להפסקת הפעולה או להפעלה מחדש של האפליקציה, או לשליטה בהרשאות שלה (I4279b)
- תוקנה בעיה ב-
measureRepeated()
שבהStartupMode.COLD
לא השבית את תהליך היעד אחריsetupBlock
. מעכשיו,setupBlock
אינטראקציה עם האפליקציה לא תשאיר את תהליך האפליקציה פועל, ולא תהיה מדידה לא תקינה של תקופת ההרצה של האפליקציה. (I8ebb7)
גרסה 1.2.0-alpha06
24 באוקטובר 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06
משוחרר. גרסה 1.2.0-alpha06 מכילה את הקומיטים האלה.
שינויים ב-API
-
BaselineProfileRule
לא דורש יותר הרשאת root ב-Android 13 (API 33), והוא כבר לא ניסיוני. (Ie0a7d, b/250083467, b/253094958)- השינוי הזה גם מתקן את האופן שבו פרופילים מאפליקציה נמחקים מהדיסק במכשירים שלא עברו רוט, אבל הוא מחייב עדכון של יחסי התלות של profileinstaller באפליקציית היעד.
- כדי להשתמש ב-
BaselineProfileRule
או ב-CompilationMode.Partial(warmupIterations)
במכשיר לא מושרש, צריך גם לעדכן את אפליקציית היעד כך שתשתמש ב-androidx.profileinstaller.profileinstaller:1.3.0-alpha01
. כך אפשר לנקות את הפרופיל לדיסק בצורה נכונה, כדי שיהיה אפשר לקמפל או לחלץ אותו.
תיקוני באגים
- תוקן קריסת
SampledProfiling
ב-API 33 ומעלה. (I40743, b/236109374)
גרסה 1.2.0-alpha05
5 באוקטובר 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05
משוחרר. גרסה 1.2.0-alpha05 מכילה את הקומיטים האלה.
תיקוני באגים
- תיקון פירוט המסגרות בכלי לצפייה במעקב המערכת ב-Studio עבור מעקבים שנלכדו כנקודת השוואה (I3f3ae, b/239677443)
- תיקון
FrameTimingMetric
כך שיוצגFrameOverrun
כנדרש API 31 במקום 29 (I716dd, b/220702554) - מגדירים איטרציה ב-
BaselineProfileRule
, ויוצרים חריגה ברורה אם חבילת היעד לא מותקנת (כבר בוצע עבור MacrobenchmarkRule). (Ic09a3, b/227991471)
גרסה 1.2.0-alpha04
21 בספטמבר 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04
משוחרר. גרסה 1.2.0-alpha04 מכילה את הקומיטים האלה.
תכונות חדשות
הוספנו תמיכה בארגומנט
dryRunMode.enable
instrumentation ל-macrobenchmark (כבר זמין ב-micro) כדי לאפשר פיתוח מקומי מהיר יותר ואימות של אוטומציית אפליקציות (למשל, ב-presubmit). ההגדרה הזו מחליפה את מספר האיטרציות ב-1, מדלגת על הקומפילציה, מבטלת את כל שגיאות ההגדרה ומשביתה את הפלט של קובץ ה-JSON של המדידה. (Ib51b4, b/175149857)בשורת הפקודה של Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
ב-build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
תיקוני באגים
- תוקנה בעיה שגרמה לכך שלא היה יותר צורך להפעיל פעילויות שנמדדות דרך
MacrobenchmarkScope.startActivityAndWait()
.StartupTimingMetric
המשמעות היא שהמדד יכול לזהות הפעלות מתוך התראות,Context.startActivity()
, ניווט מבוסס-פעילות באפליקציה או פקודות מעטפת. (Ia2de6, b/245414235) - תיקנו באג שבו
startActivityAndWait
היה מגיע לזמן קצוב לתפוגה בניסיון להמתין לסיום ההפעלה באמולטורים, על ידי הפחתת המחמירות של זיהוי הפריימים. (Ibe2c6, b/244594339, b/228946895)
גרסה 1.2.0-alpha03
7 בספטמבר 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03
משוחרר. גרסה 1.2.0-alpha03 מכילה את הקומיטים האלה.
תכונות חדשות
- הוספנו ממשקי API ניסיוניים לשימוש ב-
BenchmarkState
באופן עצמאי, בנפרד מ-BenchmarkRule
/JUnit4
. (Id478f, b/228489614)
תיקוני באגים
- נוספה חלופה ל-Leanback עבור
startActivityAndWait
. (01ed77, b/242899915)
גרסה 1.2.0-alpha02
24 באוגוסט 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02
משוחרר. גרסה 1.2.0-alpha02 מכילה את הקומיטים האלה.
שינויים ב-API
- ברירת המחדל היא
am force stop
עבורMacrobenchmarkScope.killProcess()
, גם כשמכשיר מושרש, למעט במהלך יצירת פרופיל Baseline. אפשר לשנות את ההגדרה הזו באמצעות ארגומנט בוליאני אופציונלי. (02cce9, b/241214097)
תיקוני באגים
- תמיכה ביצירת פרופיל בסיסי לאפליקציות מערכת. (I900b8, b/241214097)
- תמיכה בבדיקה של מדדי צריכת חשמל של ODPM במכשירים ללא Root. (a38c78, b/229623230)
גרסה 1.2.0-alpha01
27 ביולי 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01
משוחרר. גרסה 1.2.0-alpha01 מכילה את הקומיטים האלה.
תכונות חדשות
- רכיב חדש של tracing-perfetto-common שמאפשר לכלים להפעיל מעקב אחרי Perfetto SDK באפליקציה שחושפת אותו (I2cc7f)
נוסף ארגומנט של מכשור
androidx.benchmark.enabledRules
כדי לאפשר סינון של הרצות של מדדי ביצועים מאקרו רק למדדי ביצועים, או רק ליצירת פרופיל בסיסי. מעבירים את המחרוזת Macrobenchmark או BaselineProfile כדי להריץ רק סוג אחד של בדיקה, למשל כשמפיקים רקBaselineProfiles
באמולטור. אפשר גם להשתמש ברשימה מופרדת בפסיקים. (I756b7, b/230371561)לדוגמה, בקובץ build.gradle של המדד macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
או משורת הפקודה של Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
שינויים ב-API
- נוסף
PowerMetric
חדש למדידת משימות שקשורות לאנרגיה ולעוצמה במבחני ביצועים. (I9f39b, b/220183779) - נוסף מצב קומפילציה חדש
CompilationMode.Ignore
כדי לדלג על איפוס הפרופיל ועל הקומפילציה. (Ibbcf8, b/230453509) - נוסף פרמטר חדש ל-
BaselineProfileRule#collectBaselineProfile
כדי לסנן את קובץ הפלט לפי שמות חבילות (If7338, b/220146561) - מאפשר למפתח לרוקן את הסוללה של המכשיר כדי למדוד את צריכת החשמל. (I6a6cb)
- הוספנו את האפשרות לנקות את מטמון ה-Shader ב-
MacrobenchmarkScope
. (I32122) - מאפשר למפתח להגדיר את התצוגה של סוג המדד ופרטים של קטגוריות משנה רצויות. (I810c9)
- בעבר, אם ההשוואה הייתה מופעלת במכשיר שלא נתמך, היה מופעל
UnsupportedOperationException
. מעכשיו, UOE מתרחש רק אם המדד נמצא בשימוש במכשיר שלא נתמך (לדוגמה:PowerMetric.configure
). (I5cf20, b/227229375) - נוספו
TotalPowerMetric
ו-TotalEnergyMetric
למדידת ההספק והאנרגיה הכוללים בכל קטגוריית מערכת במבחני ביצועים מאקרו. (I3b26b, b/224557371)
תיקוני באגים
- תוקנה בעיה שבה שיטות הידור לא אותחלו מחדש בצורה נכונה בין כל בדיקת ביצועים של מאקרו בגרסאות לא מושרשות. לצערנו, כדי לעשות את זה צריך להתקין מחדש את קובץ ה-APK בכל איטרציה, וכך נמחקים נתוני האפליקציה של כל בדיקת מאקרו. (I31c74, b/230665435)
- תיקון קריסה של הקלטת נתונים למעקב ב-API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- שיפרנו את זיהוי ההשלמה של הפעלת הפעילות כדי לתקן את החריגה 'לא ניתן לקרוא מדדים כלשהם' במבחני ביצועים מאקרו של הפעלה. (Ia517c)
גרסה 1.1.1
גרסה 1.1.1
9 בנובמבר 2022
androidx.benchmark:benchmark-*:1.1.1
משוחרר. גרסה 1.1.1 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנה בעיה מספר
android.system.ErrnoException: open failed: EACCES
שהתרחשה בחלק מהמכשירים עם Android11 (API 30) ומעלה. זוהי בחירה של תיקון מ-1.2.0-alpha01
. (aosp/2072249)
גרסה 1.1.0
גרסה 1.1.0
15 ביוני 2022
androidx.benchmark:benchmark-*:1.1.0
משוחרר. גרסה 1.1.0 מכילה את הקומיטים האלה.
- הגרסה הזו זהה לגרסה
androidx.benchmark:benchmark-*:1.1.0-rc03
.
שינויים חשובים מאז גרסה 1.0.0
תמיכה בבדיקות ביצועים רחבות היקף של Jetpack, שמאפשרות למדוד אינטראקציות של אפליקציות שלמות כמו הפעלה וגלילה, מספקת אפשרות ללכידת עקבות ולמדידת קטעי עקבות.
תמיכה בפרופילים של Baseline
CompilationMode.Partial
כדי למדוד את היעילות של פרופילים בסיסיים.@BaselineProfileRule
כדי ליצור באופן אוטומטי פרופילי בסיס למסלול משתמש קריטי נתון.
תמיכה במדדי הקצאה ובפרופילים במהלך הרצות של מיקרו-בנצ'מרק.
גרסה 1.1.0-rc03
1 ביוני 2022
androidx.benchmark:benchmark-*:1.1.0-rc03
משוחרר. גרסה 1.1.0-rc03 מכילה את הקומיטים האלה.
תיקוני באגים
לא מומלץ להתקין מחדש את חבילת היעד בכל איטרציה של ההשוואה. ( aosp/2093027, b/231976084)
הסרת העיכוב
300ms
מההודעהpressHome()
. (aosp/2086030, b/231322975)שיפור מהירות האיטרציה של מדד המאקרו על ידי אופטימיזציה של פקודות Shell שמשמשות מאחורי הקלעים. (aosp/2086023, b/231323582)
תמיכה במכשירים בניהול Gradle כשיוצרים פרופילים של Baseline באמצעות Macrobenchmarks. (aosp/2062228, b/228926421)
גרסה 1.1.0-rc02
11 במאי 2022
androidx.benchmark:benchmark-*:1.1.0-rc02
משוחרר. גרסה 1.1.0-rc02 כוללת את הקומיטים האלה.
- שימו לב שהגרסה הזו כוללת שינוי בהתנהגות, כי עכשיו האפליקציות מותקנות מחדש באופן מלא בין כל השוואה כדי להבטיח מדידות מדויקות.
תיקוני באגים ושינויים בהתנהגות
תוקנה בעיה שבה הידור האפליקציה לא אופס בצורה נכונה בין בדיקות ביצועים של מאקרו, ולא אופס בכלל בגרסאות לא מושרשות. התיקון הזה פותר הרבה מקרים שבהם הפעלת כמה בדיקות לא משפיעה על המדידות, או משפיעה עליהן בצורה מינורית.
CompilationMode
כדי לעקוף את הבעיה הזו, האפליקציה שמיועדת לבדיקה מותקנת מחדש באופן מלא בכל שיטת בדיקה, וכך נתוני האפליקציה נמחקים בין כל בדיקת מאקרו. (I31c74, b/230665435)ההגדרה הזו מונעת מאפליקציות להגדיר מצב לפני בדיקות, ולכן עכשיו אפשר לדלג על קומפילציה או התקנה מחדש כדי לעקוף את הבעיה. לדוגמה, אפשר לקמפל את היעד באופן מלא באמצעות פקודת shell
cmd package compile -f -m speed <package>
, ואז לדלג על שלב הקומפילציה של המדד המאקרו.לדוגמה, בקובץ build.gradle של המדד macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
או משורת הפקודה של Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
הוספנו את הארגומנט
androidx.benchmark.enabledRules
instrumentation כדי לאפשר שיתוף מודול בין בדיקות ליצירת פרופיל בסיסי לבין בדיקות של מדדי ביצועים ברמת המאקרו. מעבירים את המחרוזת Macrobenchmark או BaselineProfile כדי להריץ רק סוג אחד של בדיקה, למשל כשמייצריםBaselineProfiles
באמולטור. (I756b7, b/230371561)לדוגמה, בקובץ build.gradle של המדד macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
או משורת הפקודה של Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
גרסה 1.1.0-rc01
20 באפריל 2022
androidx.benchmark:benchmark-*:1.1.0-rc01
משוחרר. גרסה 1.1.0-rc01 כוללת את הקומיטים האלה.
תיקוני באגים
- קישורי הפלט של פרופיל הבסיס ב-Android Studio כוללים עכשיו שם קובץ ייחודי. כך הפלט תמיד משקף את התוצאות העדכניות של השימוש ב-
BaselineProfileRule
. ( aosp/2057008, b/228203086 )
גרסה 1.1.0-beta06
6 באפריל 2022
androidx.benchmark:benchmark-*:1.1.0-beta06
משוחרר. גרסה 1.1.0-beta06 מכילה את הקומיטים האלה.
תיקוני באגים
- תיקון קריסה של הקלטת נתונים למעקב בגרסאות API 21/22 (If7fd6, b/227509388)
- שיפרנו את זיהוי ההשלמה של הפעלת הפעילות כדי לתקן את החריגה 'לא ניתן לקרוא מדדים כלשהם' במבחני ביצועים מאקרו של הפעלה. (Ia517c)
- תיקון מדדי ההפעלה של Macrobenchmarks כשמשתמשים ב-
CompilationMode.None()
. לפני השינוי הזה, נראה ש-CompilationMode.Partial()
איטי יותר מ-Compilation.None()
. (611ac9).
גרסה 1.1.0-beta05
23 במרץ 2022
androidx.benchmark:benchmark-*:1.1.0-beta05
משוחרר. גרסה 1.1.0-beta05 מכילה את הקומיטים האלה.
תיקוני באגים
- הפסקת הפעילות של החבילה אחרי דילוג על התקנת הפרופיל כשמשתמשים ב-
CompilationMode.None
. (aosp/1991373) - תוקנה הבעיה שבה אי אפשר לאסוף מדדי הפעלה באמצעות Macrobenchmarks כשמשתמשים ב-
StartupMode.COLD
. (aosp/2012227 b/218668335)
גרסה 1.1.0-beta04
23 בפברואר 2022
androidx.benchmark:benchmark-*:1.1.0-beta04
משוחרר. גרסה 1.1.0-beta04 מכילה את הקומיטים האלה.
תיקוני באגים
תיקנו בעיה שגרמה למדדים חסרים ב-Android 10 וב-
NoSuchElementException
, כתוצאה משמות תהליכים שלא נרשמו בצורה נכונה בנתוני המעקב. (Ib4c17, b/218668335)משתמשים ב-
PowerManager
כדי לזהות הגבלת מהירות עקב התחממות יתר בגרסה Q (API 29) ואילך. השינוי הזה מפחית באופן משמעותי את התדירות של תוצאות חיוביות שגויות בזיהוי של ויסות תרמי (ניסיון חוזר של בדיקת ביצועים אחרי 90 שניות של צינון), ומאיץ באופן משמעותי את בדיקות הביצועים בגרסאות למשתמשים. הוא גם מספק זיהוי של ויסות מהירות השעון, גם כשהשעונים נעולים (אם הם נעולים גבוה מדי ביחס לסביבה הפיזית של המכשיר). (I9c027, b/217497678, b/131755853)מסננים את פרופיל הדגימה של simpleperf ל-
measureRepeated
thread בלבד כדי לפשט את הבדיקה (Ic3e12, b/217501939)תמיכה במדדים מתהליכי משנה של ממשק משתמש עם שמות באפליקציות מרובות תהליכים (Ice6c0, b/215988434)
סינון כללי פרופיל הבסיס לטירגוט של Android 9 (SDK 28). aosp/1980331 b/216508418
דילוג על התקנת הפרופיל כשמשתמשים ב-
Compilation.None()
. בנוסף, מוצגות אזהרות בדוח אם האפליקציה משתמשת בגרסה ישנה שלandroidx.profileinstaller
וב-Android Gradle Plugin. aosp/1977029
גרסה 1.1.0-beta03
9 בפברואר 2022
androidx.benchmark:benchmark-*:1.1.0-beta03
משוחרר. גרסה 1.1.0-beta03 מכילה את הקומיטים האלה.
שינויים ב-API
- נוספה
AudioUnderrunMetric
לספריית המאקרו-בנצ'מרק תחת דגל ניסיוני כדי לאפשר זיהוי של חוסרים באודיו (Ib5972) הפרמטר
BaselineProfileRule
לא מקבל יותר בלוקsetup
כי הוא פעל כמוprofileBlock
. (Ic7dfe, b/215536447)לדוגמה
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
תיקוני באגים
- תוקנה הבעיה שבה לא היה אפשר לעדכן את העקבות של פרופיל המיקרו-בנצ' בהפעלות הבאות כשהן מקושרות בפלט של Studio (I5ae4d, b/214917025)
- מניעת קומפילציה של פקודות Shell ב-API 23 (Ice380)
- שינינו את השמות של
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
כדי להבהיר שמדובר במשכי זמן ולא בחותמות זמן, וכדי להתאים את הקידומות. (I0eba3, b/216337830)
גרסה 1.1.0-beta02
26 בינואר 2022
androidx.benchmark:benchmark-*:1.1.0-beta02
משוחרר. גרסה 1.1.0-beta02 מכילה את הקומיטים האלה.
תיקוני באגים
- תוצאות של פרופיל דגימה של מחסנית מיקרו-בנצ'מרק / מעקב אחר שיטות מקושרות עכשיו בפלט של Studio, בדומה לפלטים אחרים של פרופילים, והן לא מבטלות את מדד ההקצאה. (Idcb65, b/214440748, b/214253245)
- הפקודה
adb pull
מודפסת עכשיו ב-logcat ובפלט של Studio עבור משיכת קובץ הטקסט של BaselineProfile שנוצר. (f08811)
גרסה 1.1.0-beta01
12 בינואר 2022
androidx.benchmark:benchmark-*:1.1.0-beta01
משוחרר. גרסה 1.1.0-beta01 מכילה את הקומיטים האלה.
תיקוני באגים
- תוקנה בעיה שגרמה להתעלמות מהארגומנט enable של פרופילר. (I37373, b/210619998)
- הוסר תוכן שהוצא משימוש
CompliationModes
(I98186, b/213467659) - החלפנו את ארגומנט פרופיל הבסיס של
CompilationMode.Partial
ל-enum כדי להבהיר את השימוש. (Id67ea)
גרסה 1.1.0-alpha13
15 בדצמבר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13
משוחרר. גרסה 1.1.0-alpha13 מכילה את הקומיטים האלה.
שינויים ב-API
- הוספנו מעקב מערכת עם תקורה נמוכה לפלט של מיקרו-בנצ'מרק באנדרואיד Q (API 29 ומעלה). שימו לב שבשלב הזה לא מתבצע מעקב בהתאמה אישית (באמצעות ממשקי API של
android.os.Trace
אוandroidx.tracing
Jetpack) כדי לא להשפיע על התוצאות. המעקב הזה אמור להיות שימושי לאבחון חוסר יציבות, במיוחד ממקורות מחוץ למדד ההשוואה. (I298be, b/205636583, b/145598917) - תסביר את
CompilationModes
בשלוש קטגוריות – מלא, חלקי, ללא. בעבר, השמות שלהם לא היו עקביים והם נקראו על שם ארגומנטים של קומפילציה (שעכשיו אנחנו מתייחסים אליהם כפרטי הטמעה) ותכונות. כך אפשר להבין טוב יותר את הפשרות, השילובים האפשריים וההתנהגות בגרסאות שונות של הפלטפורמה. (I3d7bf, b/207132597) - ההגדרה והמדידה תמיד מופיעות בזוגות, בסדר מסוים. עכשיו אפשר לשלוח שאילתות לגבי שם החבילה והאיטרציה (אבל יכול להיות שהאיטרציה תהיה
null
בתרחישי חימום מסוימים). (Id3b68, b/208357448, b/208369635)
תיקוני באגים
- הערך
CompilationMode.Speed
טופל באופן שגוי כ-None
(I01137)
גרסה 1.1.0-alpha12
17 בנובמבר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12
משוחרר. גרסה 1.1.0-alpha12 מכילה את הקומיטים האלה.
תכונות חדשות
- הוספת TraceSectionMetric ניסיוני למדידות מותאמות אישית של תזמון מבוסס-מעקב. (I99db1, b/204572664)
תיקוני באגים
- הוצאת המכשיר ממצב שינה בכל איטרציה, כדי להבטיח שאפשר לבדוק את ממשק המשתמש – נדרש להשבית את מסך הנעילה. (Ibfa28, b/180963442)
- תוקנו כמה קריסות במצב פרופיל StackSampling באמולטורים ובמכשירים ללא רוט (Icdbda, b/202719335)
- הוסר מצב שינה של 0.5 שניות בסוף כל איטרציה – אם אתם רואים מדדים חסרים בעקבות השינוי הזה, עליכם לדווח על באג. (Iff6aa)
- הפחתת הסיכויים לאובדן נתונים והפחתת התקורה של הזיכרון ממעקב (Id2544, b/199324831, b/204448861)
- הקטנת גודל הנתונים בכ-40% על ידי מעבר לפורמט אחסון קומפקטי של נתוני תזמון. (Id5fb6, b/199324831)
- יישומים מעודכנים של מדדי הפעלה שתמיד מסתיימים ב-end of renderthread. השינוי הזה יאפשר עקביות רבה יותר בין גרסאות הפלטפורמה, ומיפוי מדויק יותר למדידות באפליקציה. (Ic6b55)
גרסה 1.1.0-alpha11
3 בנובמבר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
משוחרר. גרסה 1.1.0-alpha11 מכילה את הקומיטים האלה.
שינויים ב-API
- ל-Macrobenchmark יש עכשיו
minSdkVersion
של23
. (If2655) - נוסף
BaselineProfileRule
חדש וניסיוני שיכול ליצור פרופילים של בסיס להשוואה עבור מסלול המשתמש הקריטי של האפליקציה. בהמשך יפורסם תיעוד מפורט. (Ibbefa, b/203692160) - הוסר וריאנט של ממשק measureRepeated, שנוסף לקוראים של Java, כי הוא גרם לאי בהירות בהשלמה או בפתרון של השיטה. מתקשרים ב-Java יצטרכו שוב להחזיר Unit.Instance מ-measureRepeated. אם זה גורם לכם אי נוחות, אתם יכולים לדווח על באג, ואנחנו נבדוק את האפשרות לטפל בבעיה בגרסה עתידית. (Ifb23e, b/204331495)
גרסה 1.1.0-alpha10
27 באוקטובר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
משוחרר. גרסה 1.1.0-alpha10 מכילה את הקומיטים האלה.
שינויים ב-API
- העברה חוזרת של StartupTimingMetric כדי שתפעל עד API 23. ההטמעה החדשה גם מטפלת טוב יותר בפונקציה reportFullyDrawn() כדי להמתין עד שהתוכן המתאים יעבור רינדור. (If3ac9, b/183129298)
- נוספה הערה JvmOverloads לכמה שיטות MacrobenchmarkScope למתקשרים ב-Java. (I644fe, b/184546459)
- צריך לספק פונקציית MacrobenchmarkRule.measureRepeated חלופית שמשתמשת ב-
Consumer<MacrobenchmarkScope>
לשימוש אידיומטי בשפת Java. (If74ab, b/184546459)
תיקוני באגים
- תיקון של בעיות שבהן העקבות לא מתחילים מספיק מוקדם, ונתוני מדדים חסרים. העדכון הזה צפוי לפתור חריגים מסוג 'לא ניתן לקרוא מדדים במהלך השוואה לשוק' שנגרמו על ידי הספרייה עצמה. (I6dfcb, b/193827052, b/200302931)
- השם של FrameNegativeSlack שונה ל-FrameOverrun כדי להבהיר את המשמעות שלו – כמה זמן חרג הפריים מהתקציב שהוקצה לו. (I6c2aa, b/203008701)
גרסה 1.1.0-alpha09
13 באוקטובר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha09
משוחרר. גרסה 1.1.0-alpha09 מכילה את הקומיטים האלה.
תיקוני באגים
- תמיכה בהסרת מטמון של דפי ליבה ללא הרשאות root ב-API 31/S+, מה שיגדיל את הדיוק של השקות StartupMode.COLD. (Iecfdb, b/200160030)
גרסה 1.1.0-alpha08
29 בספטמבר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08
משוחרר. גרסה 1.1.0-alpha08 מכילה את הקומיטים האלה.
שינויים ב-API
- הפעלת בדיקות השוואתיות של ביצועים (macrobenchmarks) בגלילה כדי להריץ אותן עד API 23 (If39c2, b/183129298)
- הוספה של סוג חדש של מדד לדגימה לממשק המשתמש ולפלט JSON, עם התמקדות באחוזונים של כמה דגימות בכל איטרציה. (I56247, b/199940612)
- מעבר למדדים של נקודה צפה בכל ספריות ההשוואה (חיתוך בממשק המשתמש של Studio). (I69249, b/197008210)
גרסה 1.1.0-alpha07
1 בספטמבר 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07
משוחרר. גרסה 1.1.0-alpha07 מכילה את הקומיטים האלה.
שינויים ב-API
- העלינו את רמת ה-API המינימלית ל-21 כדי לשקף את רמת ה-API הנמוכה ביותר שאנחנו מתכוונים לתמוך בה בעתיד. רמת ה-API המינימלית הנתמכת ממשיכה להיות מועברת באמצעות RequiredApi(), והיא כרגע 29 (I440d6, b/183129298)
תיקוני באגים
- בוצעו תיקונים ב-
ProfileInstaller
כדי להקל על הפעלת MacroBenchmarks באמצעותCompilationMode.BaselineProfile
באפליקציות שמשתמשות בפרופילים בסיסיים. (I42657, b/196074999) הערה: נדרש גם עדכון לגרסהandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
ומעלה. - נקודות ההשוואה
StartupMode.COLD
ו-CompilationMode.None
יציבות יותר עכשיו. (I770cd, b/196074999)
גרסה 1.1.0-alpha06
18 באוגוסט 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06
משוחרר. גרסה 1.1.0-alpha06 מכילה את הקומיטים האלה.
שינויים ב-API
- נוסף ארגומנט
androidx.benchmark.iterations
של מכשור כדי לאפשר עקיפה ידנית של מספר האיטרציות כשבודקים או יוצרים פרופיל באופן מקומי. (6188be, b/194137879)
תיקוני באגים
- המעבר ל-Simpleperf כפרופילר ברירת המחדל של הדגימה ב-API 29 ומעלה. (Ic4b34, b/158303822)
בעיות מוכרות
-
CompilationMode.BaselineProfile
נמצא בשלבי פיתוח. לכן, בשלב הזה, עדיף לא להשתמש בו כדי לקבוע את איכות הפרופיל.
גרסה 1.1.0-alpha05
4 באוגוסט 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05
משוחרר. גרסה 1.1.0-alpha05 מכילה את הקומיטים האלה.
1.1.0-alpha04
בוטל לפני ההשקה בגלל קריסה ספורדית. b/193827052
שינויים ב-API
- הפונקציה startActivityAndWait הוחלפה בהפעלת ההשקה באמצעות
am start
, מה שמקצר את הזמן של כל איטרציה של מדידה בכ-5 שניות, אבל כבר לא תומך ב-intent parcelables. (I5a6f5, b/192009149
תיקוני באגים
- הפחתת האגרסיביות של זיהוי ויסות תרמי, וחישוב מחדש של קו הבסיס אם מזוהים ויסות תרמיות לעיתים קרובות. (I7327b)
- בוצעו תיקונים ב-FrameTimingMetric כדי שהכלי יפעל ב-Android S בטא (Ib60cc, b/193260119)
- כדי לתמוך טוב יותר ב-
CompilationMode.BaselineProfile
, אפשר להשתמש ב-EmptyActivity
כדי להוציא את אפליקציית היעד ממצב של עצירה בכוח. (Id7cac, b/192084204) - הסיומת של קובץ המעקב שונתה ל-
.perfetto-trace
כדי להתאים לתקן הפלטפורמה. (I4c236, b/174663039) - המדד StartupTimingMetric מוציא עכשיו את המדד fullyDrawnMs כדי למדוד את הזמן עד שהאפליקציה מסיימת את הרינדור. כדי להגדיר את המדד הזה לאפליקציה, צריך לקרוא ל-Activity.reportFullyDrawn כשהתוכן הראשוני מוכן, למשל כשפריטי הרשימה הראשוניים נטענים ממסד נתונים או מהרשת. (השיטה reportFullyDrawn זמינה ללא בדיקות של גרסת ה-build ב-ComponentActivity). שימו לב: הניסוי צריך לפעול מספיק זמן כדי שהמדד יתועד (הפונקציה startActivityAndWait לא ממתינה עד שהדוח יציג את כל הנתונים). (If1141, b/179176560)
- הפחתת העלות של הוספת מטא-נתונים של ממשק משתמש למעקב ב-50 מילי-שניות ומעלה (Ic8390, b/193923003)
- הגדלנו באופן משמעותי את תדירות הסקרים כשמפסיקים את המעקב, מה שיכול לקצר את זמן הריצה של מדד הביצועים של ההפעלה ב-30% ומעלה (Idfbc1, b/193723768)
גרסה 1.1.0-alpha03
16 ביוני 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03
משוחרר. גרסה 1.1.0-alpha03 מכילה את הקומיטים האלה.
תכונות חדשות
- נוסף
CompilationMode.BaselineProfile
חדש לתמיכה בפרופילים שהותקנו באמצעות ספריית Jetpack ProfileInstaller. (aosp/1720930)
תיקוני באגים
קוד ה-Gradle לדוגמה לביטול שגיאות בבדיקות הביצועים עודכן כך שישתמש ב-API שלא הוצא משימוש, עם תחביר שתומך גם במשתמשי .gradle.kts.
למשל:
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
גרסה 1.1.0-alpha02
18 במאי 2021
גרסה 1.1.0-alpha02 של Benchmark כוללת רכיב חשוב להשוואה לשוק – Macrobenchmark. בנוסף לבדיקת ביצועים שמאפשרת למדוד לולאות של CPU, בדיקת ביצועים רחבה מאפשרת למדוד אינטראקציות של אפליקציה שלמה, כמו הפעלה וגלילה, ולתעד עקבות. מידע נוסף זמין במאמרי העזרה בנושא הספרייה.
androidx.benchmark:benchmark-*:1.1.0-alpha02
משוחרר. גרסה 1.1.0-alpha02 מכילה את הקומיטים האלה.
תכונות חדשות
נוספו ארטיפקטים של בדיקת ביצועים (androidx.benchmark:benchmark-macro-junit4
ו-androidx.benchmark:benchmark-macro
)
- איסוף מדדי ביצועים של הפעלה, גלילה או אנימציה מהאפליקציה, באופן מקומי או ב-CI
- איסוף של עקבות ובדיקה שלהם מתוך Android Studio
תיקוני באגים
- פתרון לבעיה בהרשאות של Shell עם ספריית פלט ב-Android 12 (הערה – יכול להיות שיהיה צורך לעדכן את Android Gradle Plugin לגרסה 7.0.0 canary ואת Android Studio לגרסה Arctic Fox (2020.3.1), כדי להמשיך ללכוד קובצי פלט במכשירים מושפעים). (Icb039)
- שמירה במטמון של הגדרות התמיכה ב-BenchmarkPlugin (6be1c1, b/159804788)
- פלט קובץ פשוט – מופעל כברירת מחדל, בספרייה שלא נדרש בה
requestLegacyExternalStorage=true
(8b5a4d, b/172376362) - תיקון אזהרות ב-logcat של הדפסת הספרייה לגבי אי-מציאת שרשור JIT בגרסאות פלטפורמה שבהן הוא לא קיים. (I9cc63, b/161847393)
- תיקון של התדירות המקסימלית של מכשיר הקריאה. (I55c7a)
גרסה 1.1.0-alpha01
10 ביוני 2020
הגרסאות androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
ו-androidx.benchmark:benchmark-junit4:1.1.0-alpha01
יוצאות. גרסה 1.1.0-alpha01 מכילה את הקומיטים האלה.
תכונות חדשות בגרסה 1.1
- מדד ההקצאה – עכשיו יש שלב נוסף בהשוואה לשוק אחרי החימום והתזמון, שבו נרשמים נתוני ההקצאה. הקצאות יכולות לגרום לבעיות בביצועים בגרסאות ישנות יותר של הפלטפורמה (140ns ב-O הפכו ל-8ns ב-M – נמדד ב-Nexus5X, עם שעונים נעולים). המדד הזה מוצג בפלט של מסוף Android Studio, וגם ב
- תמיכה בפרופילים – עכשיו אפשר ללכוד נתוני פרופילים להרצת השוואה, כדי לבדוק למה הקוד פועל לאט. הכלי Benchmark תומך בתיעוד של מעקב אחר שיטות או בדגימה של שיטות מ-ART. אפשר לבדוק את הקבצים האלה באמצעות הכלי Profiler ב-Android Studio דרך File > Open (קובץ > פתיחה).
- הפלאגין Benchmark Gradle מספק עכשיו הגדרות ברירת מחדל להגדרה פשוטה יותר:
testBuildType
מוגדר כברירת מחדל לפרסום, כדי להימנע משימוש בתלות עם כיסוי קוד מובנה. סוג ה-build של הגרסה מוגדר גם כסוג ה-build שמוגדר כברירת מחדל, וכך Android Studio יכול לבחור באופן אוטומטי את וריאציית ה-build הנכונה כשפותחים פרויקט בפעם הראשונה. (b/138808399)-
signingConfig.debug
משמש כהגדרת ברירת המחדל לחתימה (b/153583269)
** תיקוני באגים **
- הפחתנו באופן משמעותי את התקורה של מעבר החימום, שבו המדידה הראשונה לכל נקודת השוואה הייתה גבוהה באופן מלאכותי מאחרות. הבעיה הזו הייתה בולטת יותר בבדיקות השוואה קטנות מאוד (מיקרו-שנייה אחת או פחות). (b/142058671)
- תוקנה השגיאה
InstrumentationResultParser
שמוצגת לכל מדד השוואה כשמריצים את הכלי משורת הפקודה. (I64988, b/154248456)
בעיות מוכרות
- כשמריצים את Benchmark דרך שורת הפקודה או gradle, התוצאות לא מודפסות ישירות. כדי לעקוף את הבעיה, אפשר להריץ את התהליך דרך Studio או לנתח את קובץ הפלט בפורמט JSON כדי לקבל את התוצאות.
- הדוחות של ההשוואה לשוק לא מצליחים לשלוף את הדוח ממכשירים שמותקנת בהם אפליקציה עם applicationId שמסתיים ב-android או ב-download (לא תלוי באותיות רישיות). משתמשים שנתקלים בבעיה הזו צריכים לשדרג את Android Gradle Plugin לגרסה 4.2-alpha01 ואילך.
גרסה 1.0.0
Benchmark Version 1.0.0
20 בנובמבר 2019
androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
ו-androidx.benchmark:benchmark-junit4:1.0.0
פורסמו ללא שינויים מגרסה 1.0.0-rc01. גרסה 1.0.0 מכילה את הקומיטים האלה.
התכונות העיקריות בגרסה 1.0.0
ספריית ההשוואה מאפשרת לכם לכתוב מדדי ביצועים של קוד האפליקציה ולקבל תוצאות במהירות.
הוא מונע בעיות בהגדרת ה-build וה-runtime, ומייצב את ביצועי המכשיר כדי להבטיח שהמדידות יהיו מדויקות ועקביות. מריצים את בדיקות ההשוואה ישירות ב-Android Studio או ב-Continuous Integration כדי לעקוב אחר ביצועי הקוד לאורך זמן ולמנוע רגרסיות.
בין התכונות העיקריות:
- ייצוב השעון
- סדר עדיפות אוטומטי לשרשורים
- תמיכה בבדיקות ביצועים של ממשק המשתמש, כמו בדוגמה RecyclerView Sample
- חימום מראש של המערכת והרצה חוזרת של לולאות עם מודעות ל-JIT
- פלט של מדד השוואה בפורמט JSON לעיבוד שלאחר מכן
גרסה 1.0.0-rc01
23 באוקטובר 2019
הגרסאות androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
ו-androidx.benchmark:benchmark-junit4:1.0.0-rc01
יוצאות. גרסה 1.0.0-rc01 מכילה את הקומיטים האלה.
תכונות חדשות
- נוספה אפשרות למעקב אחרי systrace בנקודות השוואה
תיקוני באגים
- תוקנה בעיה של חוסר יציבות במדדים שבהם JIT לא מסתיים לפני החימום בגלל ביטול העדיפות (b/140773023)
- ספריית פלט מאוחדת של JSON בפלאגין Android Gradle בגרסאות 3.5 ו-3.6
גרסה 1.0.0-beta01
9 באוקטובר 2019
הגרסאות androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
ו-androidx.benchmark:benchmark-junit4:1.0.0-beta01
יוצאות. גרסה 1.0.0-beta01 מכילה את הקומיטים האלה.
תכונות חדשות
- כדי להפחית את העומס על הזיכרון מדליפה של מדד ביצועים אחד למדד הבא, מפעילים איסוף אשפה לפני כל חימום (b/140895105)
תיקוני באגים
- נוספה תלות ב-
androidx.annotation:android-experimental-lint
, כך שקוד Java יפיק שגיאות lint באופן תקין כשלא נעשה שימוש ב-API ניסיוני, בדומה למה שמסופק על ידי הערת הניסוי של Kotlin עבור קוראי Kotlin. - מזוהה עכשיו בצורה נכונה השימוש בארגומנט
additionalTestOutputDir
של מכשור לפלט ב-Android Gradle Plugin 3.6, כדי לדעת מתי AGP יטפל בהעתקת הנתונים. - תיקון תדר שעון שלא זוהה ב-JSON כדי להדפיס את
-1
בצורה נכונה (b/141945670).
גרסה 1.0.0-alpha06
18 בספטמבר 2019
הגרסאות androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
ו-androidx.benchmark:benchmark-junit4:1.0.0-alpha06
יוצאות. גרסה 1.0.0-alpha06 מכילה את הקומיטים האלה.
תכונות חדשות
- נוספה בדיקה לשימוש שגוי בחבילה הישנה עבור כלי ההרצה של הבדיקות, ועכשיו מוצגת הודעת שגיאה מועילה יותר
שינויים ב-API
- ההערה הניסיונית
ExperimentalAnnotationReport
גלויה עכשיו לכולם. השימוש ב-API הניסיוני BenchmarkState#report מחייב עכשיו את ההערה הזו
גרסה 1.0.0-alpha05
5 בספטמבר 2019
הגרסאות androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
ו-androidx.benchmark:benchmark-junit4:1.0.0-alpha05
יוצאות. כאן אפשר לראות את הקומיטים שכלולים בגרסה הזו.
שינויים ב-API
- ממשק ה-API
BenchmarkState.reportData
מסומן עכשיו כניסיוני
תיקוני באגים
- תיקון של סקריפט נעילת השעון, שנכשל במכשירים שחסרים בהם כלי השירות של מעטפת
cut
אוexpr
. - תוקנה בעיה במשימה
./gradlew lockClocks
שגרמה להשבתה של מכשירים שעברו Root עם גרסה ישנה של כלי ה-su, שלא תמכה בדגל-c
.
גרסה 1.0.0-alpha04
7 באוגוסט 2019
הגרסאות androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
ו-androidx.benchmark:benchmark-junit4:1.0.0-alpha04
יוצאות. כאן אפשר לראות את הקומיטים שכלולים בגרסה הזו.
נוסף גם תיעוד חדש שמסביר איך להשתמש בספריית Benchmark בלי Gradle, גם לשימוש במערכות בנייה שונות (כמו Bazel או Buck) וגם כשמריצים ב-CI. מידע נוסף זמין במאמרים יצירת מדדים להשוואה בלי Gradle והפעלת מדדים להשוואה בשילוב עם Continuous Integration.
תכונות חדשות
- פלאגין Gradle
- עכשיו המערכת משביתה באופן אוטומטי את כיסוי הבדיקה ומגדירה את
AndroidBenchmarkRunner
כברירת מחדל (b/138374050) - נוספה תמיכה בהעתקת נתונים חדשה שמבוססת על AGP, כשמריצים בדיקות השוואה וכשמשתמשים ב-AGP 3.6 ומעלה
- עכשיו המערכת משביתה באופן אוטומטי את כיסוי הבדיקה ומגדירה את
- תוספות לפורמט JSON
- פלט של משך הזמן הכולל של בדיקת הביצועים (b/133147694)
@Parameterized
מדדים שמשתמשים במחרוזת שם (לדוגמה@Parameters(name = "size={0},depth={1}")
) מפיקים עכשיו שמות וערכים של פרמטרים לכל מדד בפלט JSON (b/132578772)
- מצב פרימטר לבדיקות (b/138785848)
- נוסף מצב 'הרצה יבשה' להרצת כל לולאת מדד השוואה פעם אחת בלבד, כדי לבדוק אם יש שגיאות או קריסות בלי לתעד מדידות. לדוגמה, אפשר להשתמש בזה כדי להריץ במהירות בדיקות השוואה לפני שליחת קוד, כדי לוודא שהן לא פגומות.
שינויים ב-API
- מבנה המודול השתנה, והספרייה פוצלה (b/138451391)
-
benchmark:benchmark-junit4
מכיל מחלקות עם תלות ב-JUnit: AndroidBenchmarkRunner
ו-BenchmarkRule
, שניהם הועברו לחבילהandroidx.benchmark.junit4
-
benchmark:benchmark-common
מכיל את שאר הלוגיקה, כולל BenchmarkState API - הפיצול הזה יאפשר לספרייה לתמוך בהשוואה לשוק ללא ממשקי API של JUnit4 בעתיד
-
- אזהרות לגבי הגדרות אישיות מטופלות עכשיו כשגיאות, והן יגרמו לקריסת הבדיקה (b/137653596)
- השינוי הזה נועד לעודד מדידות מדויקות, במיוחד ב-CI
- אפשר להפוך את השגיאות האלה לאזהרות באמצעות ארגומנט של מכשור. לדוגמה:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
תיקוני באגים
- כשמתרחשות שגיאות בכתיבה לאחסון חיצוני במכשירי Q, מוצגות הודעות עם תיאור מפורט יותר והצעות לפתרון הבעיה
- המסכים מופעלים אוטומטית במהלך הפעלות של בדיקות השוואה, במקום שהבדיקות ייכשלו כשהמסך כבוי
תכנים שנוספו על ידי משתמשים חיצוניים
- תודה לסרגיי זכרוב על העזרה בשיפור פלט ה-JSON ועל התיקון של בעיות שקשורות למסך כבוי.
גרסה 1.0.0-alpha03
2 ביולי 2019
הגרסאות androidx.benchmark:benchmark:1.0.0-alpha03
וandroidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
יוצאות לאור. כאן אפשר לראות את הקומיטים שכלולים בגרסה הזו.
תכונות חדשות
- הצגת משך השינה עקב ויסות תרמי לכל מדד השוואה בדוח ה-JSON המלא
תיקוני באגים
- הפלאגין Gradle לא צריך להיות מוחל יותר אחרי פלאגינים של Android והבלוק Android
- נוספה תמיכה בדוחות השוואה לשוק במכשירי Android 10 שמשתמשים באחסון מוגבל
גרסה 1.0.0-alpha02
6 ביוני 2019
הגרסאות androidx.benchmark:1.0.0-alpha02
וandroidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
יוצאות לאור. כאן אפשר לראות את הקומיטים שכלולים בגרסה הזו.
שימו לב שאנחנו מתייחסים לסכימת ה-JSON כאל API. אנחנו מתכננים לפעול בהתאם לאותם אילוצי יציבות כמו בממשקי API אחרים: יציבות (עם חריגים נדירים מאוד) אחרי שהגרסה תהיה בבטא, וקביעות בגרסה הסופית, עם תוספות רק בגרסאות משניות ושינויים או הסרות בגרסאות ראשיות.
שינויים ב-API
שיפוץ של סכימת ה-JSON. סביר להניח ששינויים נוספים בסכימת ה-JSON יוגבלו לתוספות:
- ארגנו מחדש את מבנה אובייקט התוצאה כדי לתמוך בעתיד בקבוצות נוספות של מדדים (b/132713021)
- נוסף מידע על ההקשר של הרצת הבדיקה, כמו מידע על המכשיר והגרסה, וגם אם השעונים נעולים, לאובייקט ברמה העליונה (b/132711920)
- השמות של מדדי הזמן כוללים עכשיו את התחילית 'ns' (b/132714527)
- נוספו נתונים סטטיסטיים נוספים לכל מדד שדווח (מקסימום, חציון, מינימום), והוסר נתון הסיכום הפשוט 'ננו' (b/132713851)
הוסר פלט XML (b/132714414)
הוסר מה-API של
BenchmarkState.reportData
זיהוי של ויסות תרמי (b/132887006)
תיקוני באגים
- תוקנה הבעיה שבה
./gradlew lockClocks
לא נשארת בחלק מהמכשירים עם מערכות הפעלה עדכניות (b/133424037) - השבתת זיהוי ויסות נתונים באמולטור (b/132880807)
גרסה 1.0.0-alpha01
7 במאי 2019
androidx.benchmark:benchmark:1.0.0-alpha01
משוחרר. הקודים לשינויים (commits) שכלולים בגרסה הזו זמינים כאן.