מדדים הם סוג המידע העיקרי שמופק מהשוואות לשוק. הם מועברים לפונקציה 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 ועל PowerMetric.
רשימה מלאה של מדדים זמינה במחלקות המשנה של Metric.
תוצאות ההשוואה מוצגות ב-Android Studio, כמו באיור 1. אם מוגדרים כמה מדדים, כולם משולבים בפלט.
TraceSectionMetric ושל
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric
מתעד מדדים של תזמון הפעלת האפליקציה עם הערכים הבאים:
-
timeToInitialDisplayMs: משך הזמן מרגע שהמערכת מקבלת כוונת הפעלה ועד שהיא מעבדת את הפריים הראשון של היעדActivity. -
timeToFullDisplayMs: משך הזמן שחלף מהרגע שבו המערכת קיבלה כוונה להפעיל את האפליקציה ועד שהאפליקציה דיווחה על ציור מלא באמצעות השיטהreportFullyDrawn(). המדידה מסתיימת כשהפריים הראשון מסתיים את העיבוד אחרי הקריאהreportFullyDrawn()או בתוכה. יכול להיות שהמדד הזה לא יהיה זמין ב-Android 10 (רמת API 29) ובגרסאות קודמות.
StartupTimingMetric מחזירה את הערכים המינימליים, החציוניים והמקסימליים מאיטרציות ההפעלה. כדי להעריך את השיפור בזמן ההפעלה, כדאי להתמקד בערכי החציון, כי הם מספקים את ההערכה הטובה ביותר של זמן ההפעלה האופייני. מידע נוסף על הגורמים שמשפיעים על זמן ההפעלה של האפליקציה זמין במאמר זמן ההפעלה של האפליקציה.
StartupTimingMetric תוצאות.FrameTimingMetric
FrameTimingMetric
מתעד מידע על תזמון מתוך פריימים שנוצרו על ידי מדד השוואה, כמו גלילה או אנימציה, ומפיק את הערכים הבאים:
-
frameOverrunMs: משך הזמן שבו פריים מסוים לא עמד בדדליין. מספרים חיוביים מציינים פריים שהושמט וגמגום או קפיצות שניתן לראות. מספרים שליליים מציינים כמה מהר יותר פריים מסוים מהזמן שנקבע. הערה: התכונה הזו זמינה רק ב-Android מגרסה 12 (רמת API 31) ואילך. -
frameDurationCpuMs: משך הזמן שנדרש ליצירת הפריים במעבד (CPU) בשרשור UI וב-RenderThread.
הנתונים האלה נאספים בהתפלגות של אחוזון 50, 90, 95 ו-99.
מידע נוסף על זיהוי ושיפור רינדור איטי זמין במאמר רינדור איטי.
FrameTimingMetric תוצאות.TraceSectionMetric
TraceSectionMetric
מתעד את מספר הפעמים שקטע של מעקב שתואם ל-sectionName שצוין מתרחש, ואת משך הזמן שנדרש לכך. לגבי הזמן, הפונקציה מחזירה את הזמן המינימלי, החציוני והמקסימלי באלפיות השנייה. הקטע של ה-trace מוגדר על ידי בקשה להפעלת פונקציה trace(sectionName) או על ידי הקוד שבין Trace.beginSection(sectionName) לבין Trace.endSection() או הגרסאות האסינכרוניות שלהם. הכלי תמיד בוחר את המופע הראשון של קטע מעקב שתועד במהלך מדידה. כברירת מחדל, הפלט כולל רק קטעי מעקב מהחבילה שלכם. כדי לכלול תהליכים מחוץ לחבילה, צריך להגדיר את targetPackageOnly = false.
מידע נוסף על מעקב זמין במאמרים סקירה כללית על מעקב מערכת והגדרת אירועים בהתאמה אישית.
TraceSectionMetric תוצאות.PowerMetric
PowerMetric מתעד את השינוי בעוצמה או באנרגיה במהלך הבדיקה עבור קטגוריות העוצמה שצוינו.
כל קטגוריה שנבחרה מפורטת לרכיבי המשנה שלה שאפשר למדוד, וקטגוריות שלא נבחרו מתווספות למדד 'לא נבחר'.
המדדים האלה מודדים את הצריכה בכל המערכת, ולא את הצריכה לפי אפליקציה, והם מוגבלים למכשירים מדגם Pixel 6, Pixel 6 Pro ומכשירים מתקדמים יותר:
-
power<category>Uw: כמות החשמל שנצרכה במהלך הבדיקה בקטגוריה הזו. -
energy<category>Uws: כמות האנרגיה שהועברה ליחידת זמן למשך הבדיקה בקטגוריה הזו.
הקטגוריות כוללות את האפשרויות הבאות:
CPUDISPLAYGPUGPSMEMORYMACHINE_LEARNINGNETWORKUNCATEGORIZED
בקטגוריות מסוימות, כמו CPU, יכול להיות שיהיה קשה להפריד בין עבודה שמתבצעת על ידי תהליכים אחרים לבין עבודה שמתבצעת על ידי האפליקציה שלכם. כדי לצמצם את ההפרעה, צריך להסיר או להגביל אפליקציות וחשבונות לא נחוצים.
PowerMetric תוצאות.מומלץ בשבילכם
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- יצירת פרופיל Baseline {:#creating-profile-rules}
- כתיבת Macrobenchmark
- ניתוח ואופטימיזציה של הפעלת אפליקציות {:#app-startup-analysis-optimization}