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

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

המשתנה 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 תוצאות.