תיעוד מדדי מאקרובנצ'מרק

מדדים הם סוג המידע העיקרי שאפשר לחלץ מהשוואות לשוק. הם מועברים לפונקציה 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.

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

התוצאות של TraceSectionMetric ו-FrameTimingMetric.
איור 1. התוצאות של TraceSectionMetric ו-FrameTimingMetric.

StartupTimingMetric

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

  • timeToInitialDisplayMs: משך הזמן שעובר מהרגע שהמערכת מקבלת כוונת הפעלה ועד שהיא מעבדת את הפריים הראשון של היעד Activity.
  • timeToFullDisplayMs: משך הזמן מהרגע שבו המערכת מקבלת כוונה להפעלה ועד שהאפליקציה מדווחת על ציור מלא באמצעות השיטה reportFullyDrawn(). המדידה נעצרת בסיום העיבוד של המסגרת הראשונה אחרי קריאה ל-reportFullyDrawn() או שמכילה אותה. יכול להיות שהמדידה הזו לא תהיה זמינה ב-Android מגרסה 10 (רמת API‏ 29) ומטה.

הפונקציה StartupTimingMetric מפיקה את הערכים המינימלי, החציוני והמקסימלי מהחזרות של ההפעלה. כדי להעריך את השיפור בזמן ההפעלה, כדאי להתמקד בערכי החציון, כי הם מספקים את האומדן הטוב ביותר של זמן ההפעלה הממוצע. מידע נוסף על הגורמים שמשפיעים על זמן ההפעלה של האפליקציה זמין במאמר זמן ההפעלה של האפליקציה.

תוצאות של StartupTimingMetric
איור 2. StartupTimingMetric תוצאות.

FrameTimingMetric

FrameTimingMetric מתעד את פרטי התזמון מפריימים שהופקו על ידי נקודת השוואה, כמו גלילה או אנימציה, ומפיק את הערכים הבאים:

  • frameOverrunMs: משך הזמן שבו פריים מסוים לא הגיע למועד היעד שלו. מספרים חיוביים מציינים ירידה בפריימים ותנודות או גמגום גלויים. מספרים שליליים מציינים את המהירות היחסית של פריים בהשוואה למועד היעד. הערה: התכונה הזו זמינה רק ב-Android 12 (רמת API ‏31) ואילך.
  • frameDurationCpuMs: משך הזמן שבו נוצר המסגרת ב-CPU, גם בשרשור של ממשק המשתמש וגם ב-RenderThread.

המדידות האלה נאספות בהתפלגות של האחוזונים ה-50, ה-90, ה-95 וה-99.

למידע נוסף על זיהוי פריימים איטיים ושיפור שלהם, ראו עיבוד איטי.

תוצאות של FrameTimingMetric
איור 3. FrameTimingMetric תוצאות.

TraceSectionMetric

TraceSectionMetric מתעד את מספר הפעמים שמופיע קטע ניתוח נתונים שתואם ל-sectionName שצוין, ואת משך הזמן שלוקח לו להופיע. בזמן, הפונקציה מפיקה את הזמנים המינימלי, החציוני והמקסימלי באלפיות השנייה. קטע המעקב מוגדר על ידי קריאת הפונקציה trace(sectionName) או על ידי הקוד בין Trace.beginSection(sectionName) ל-Trace.endSection(), או על ידי הגרסאות האסינכרוניות שלהם. תמיד נבחר המופע הראשון של קטע המעקב שצולם במהלך המדידה. כברירת מחדל, הפונקציה מפיקה רק קטעי מעקב מהחבילה. כדי לכלול תהליכים מחוץ לחבילה, צריך להגדיר את הערך targetPackageOnly = false.

מידע נוסף על ניתוח נתונים זמין במאמרים סקירה כללית על ניתוח נתונים במערכת והגדרת אירועים מותאמים אישית.

TraceSectionMetric
איור 4. TraceSectionMetric תוצאות.

מדד כוח

המשתנה PowerMetric מתעד את השינוי בעוצמה או באנרגיה במהלך הבדיקה, בקטגוריות העוצמה שצוינו. כל קטגוריה שנבחרה מחולקת לרכיבי המשנה המדדים שלה, וקטגוריות שלא נבחרו מתווספות למדד 'לא נבחר'.

המדדים האלה מודדים את הצריכה ברמת המערכת, ולא את הצריכה בכל אפליקציה בנפרד, והם מוגבלים למכשירי Pixel 6,‏ Pixel 6 Pro ודגמים מתקדמים יותר:

  • power<category>Uw: כמות האנרגיה שנצרכה במהלך הבדיקה בקטגוריה הזו.
  • energy<category>Uws: כמות האנרגיה שהועברה ליחידת זמן במהלך הבדיקה בקטגוריה הזו.

הקטגוריות כוללות את האפשרויות הבאות:

  • CPU
  • DISPLAY
  • GPU
  • GPS
  • MEMORY
  • MACHINE_LEARNING
  • NETWORK
  • UNCATEGORIZED

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

תוצאות של PowerMetric
איור 5. PowerMetric תוצאות.