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

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