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