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

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