מושגים ויישום ב-Jetpack Compose
מדדים הם סוג המידע העיקרי שמופק מהשוואות לשוק. הם מועברים לפונקציה measureRepeated כ-List, וכך אפשר לציין כמה מדדים נמדדים בבת אחת. כדי להריץ את ההשוואה לשוק, צריך לבחור לפחות סוג אחד של מדד.
קטע הקוד הבא מתעד את התזמון של הפריימים ואת המדדים של קטע המעקב המותאם אישית:
Kotlin
benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(
FrameTimingMetric(),
TraceSectionMetric("RV CreateView"),
TraceSectionMetric("RV OnBindView"),
),
iterations = 5,
// ...
)
Java
benchmarkRule.measureRepeated(
TARGET_PACKAGE, // packageName
Arrays.asList( // metrics
new StartupTimingMetric(),
new TraceSectionMetric("RV CreateView"),
new TraceSectionMetric("RV OnBindView"),
),
5, // Iterations
// ...
);
בדוגמה הזו, RV CreateView ו-RV OnBindView הם המזהים של בלוקים שאפשר לעקוב אחריהם ומוגדרים ב-RecyclerView. קוד המקור של השיטה createViewHolder() הוא דוגמה לאופן שבו אפשר להגדיר בלוקים שאפשר לעקוב אחריהם בקוד שלכם.
StartupTimingMetric, TraceSectionMetric וFrameTimingMetric מוסברים בפירוט בהמשך המסמך הזה. רשימה מלאה של מדדים זמינה במחלקות המשנה של Metric.
תוצאות הערכת הביצועים מוצגות ב-Android Studio, כמו באיור 1. אם מוגדרים כמה מדדים, כולם משולבים בפלט.
TraceSectionMetric ושל
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric מתעד מדדים של תזמון הפעלת האפליקציה עם הערכים הבאים:
-
timeToInitialDisplayMs: משך הזמן מרגע שהמערכת מקבלת כוונת הפעלה ועד שהיא מעבדת את הפריימים הראשונים של היעדActivity. -
timeToFullDisplayMs: משך הזמן שחל מהרגע שבו המערכת מקבלת כוונה להפעיל אפליקציה ועד שהאפליקציה מדווחת על ציור מלא באמצעות ה-methodreportFullyDrawn(). המדידה מסתיימת בסיום העיבוד של הפריים הראשון אחרי הקריאה לפונקציהreportFullyDrawn()או בתוכה. יכול להיות שהמדידה הזו לא תהיה זמינה ב-Android 10 (רמת API 29) ובגרסאות קודמות.
StartupTimingMetric מחזירה את ערכי המינימום, החציון והמקסימום מהאיטרציות של ההפעלה. כדי להעריך את השיפור בהפעלה, תמיד צריך להתמקד בערכי החציון, כי הם מספקים את האומדן הטוב ביותר של זמני ההפעלה האופייניים של המשתמשים. מידע נוסף על הגורמים שמשפיעים על זמן ההפעלה של האפליקציה זמין במאמר זמן ההפעלה של האפליקציה.
StartupTimingMetric תוצאות.FrameTimingMetric
FrameTimingMetric מתעד מידע על תזמון מתוך פריימים שנוצרו על ידי מדד השוואה, כמו גלילה או אנימציה, ומפיק את הערכים הבאים:
-
frameOverrunMs: משך הזמן שבו פריים מסוים לא עמד בדדליין. מספרים חיוביים מציינים שהייתה נפילה של פריים, שגרמה לבעיות בממשק (jank) או לגמגום. מספרים שליליים מציינים כמה מהר יותר הושלם פריים ביחס למועד האחרון של חומרת מערכת המשנה. הערה: המדד הזה זמין רק ב-Android 12 (רמת API 31) ובגרסאות מתקדמות יותר. -
frameDurationCpuMs: משך הזמן שנדרש ליצירת הפריים במעבד (CPU) בשרשור UI וב-RenderThread.
הנתונים האלה נאספים בהתפלגות של אחוזון 50, 90, 95 ו-99.
מידע נוסף על זיהוי מסגרות איטיות ושיפור שלהן זמין במאמר עיבוד איטי.
FrameTimingMetric תוצאות.TraceSectionMetric
TraceSectionMetric מתעד את מספר הפעמים שקטע מסוים של מעקב מתרחש ואת משך הזמן המוחלט שלוקח לו להתבצע. למעקב אחרי זמן, הפלט כולל את הזמנים המינימליים, הממוצעים והמקסימליים באלפיות השנייה.
הקטע של עקבות היעד מוגדר על ידי קריאה לפונקציה trace(sectionName) או על ידי גבולות של בלוק ברמה נמוכה יותר בין Trace.beginSection(sectionName) לבין Trace.endSection() או הגרסאות האסינכרוניות שלהם. הוא תמיד בוחר את המופע הראשון של קטע מעקב שנלכד במהלך מדידה. כברירת מחדל, הפלט כולל רק קטעי מעקב מהחבילה. כדי לכלול תהליכים מחוץ לחבילה, צריך להגדיר את targetPackageOnly =
false.
מידע נוסף על מעקב זמין במאמרים סקירה כללית על מעקב אחר המערכת והגדרת אירועים מותאמים אישית.
TraceSectionMetric תוצאות.מומלץ בשבילכם
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- יצירת פרופיל Baseline {:#creating-profile-rules}
- כתיבת Macrobenchmark
- ניתוח ואופטימיזציה של הפעלת אפליקציות {:#app-startup-analysis-optimization}