מושגים והטמעה של Jetpack Compose
המדדים הם סוג המידע העיקרי שמופק מההשוואות לשוק. הם מועברים לפונקציה 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. לרשימה המלאה של המדדים, עיינו במחלקות המשנה של Metric.
תוצאות הערכת הביצועים מוצגות ב-Android Studio, כמו באיור 1. אם מגדירים כמה מדדים, כולם משולבים בפלט.
TraceSectionMetric ושל
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric מתעד מדדי תזמון של הפעלת האפליקציה עם הערכים הבאים:
-
timeToInitialDisplayMs: משך הזמן מרגע שהמערכת מקבלת כוונה להפעלה ועד שהיא מעבדת את הפריים הראשון של היעדActivity. -
timeToFullDisplayMs: משך הזמן שעובר מהרגע שהמערכת מקבלת כוונה להפעלה ועד שהאפליקציה מדווחת על ציור מלא באמצעות ה-methodreportFullyDrawn(). המדידה מסתיימת בסיום העיבוד של הפריים הראשון אחרי הקריאה ל-reportFullyDrawn()או של הפריים שמכיל את הקריאה הזו. יכול להיות שהמדידה הזו לא תהיה זמינה ב-Android בגרסה 10 (רמת API 29) ומטה.
StartupTimingMetric מפיק את ערכי המינימום, החציון והמקסימום מהאיטרציות של ההפעלה. כדי להעריך את השיפור בהפעלה, תמיד צריך להתמקד בערכי החציון, כי הם מספקים את האומדן הטוב ביותר של זמני ההפעלה האופייניים של המשתמשים. במאמר זמן ההפעלה של האפליקציה מוסבר מה משפיע על זמן ההפעלה של האפליקציה.
StartupTimingMetric תוצאות.FrameTimingMetric
FrameTimingMetric מתעד את פרטי התזמון של פריימים שנוצרו על ידי נקודת השוואה, כמו גלילה או אנימציה, ומוציא את הערכים הבאים:
-
frameOverrunMs: משך הזמן שבו פריים מסוים חורג מהמועד האחרון שלו. מספרים חיוביים מציינים פריים שהושמט, וגם קפיצות או קטיעות שאפשר לראות. מספרים שליליים מציינים כמה מהר יותר הושלם פריים ביחס למועד האחרון של חומרת תת-המערכת. הערה: המדד הזה זמין רק ב-Android 12 (רמת API 31) ואילך. -
frameDurationCpuMs: משך הזמן שלוקח ליצור את הפריים במעבד (CPU) גם בשרשור ה-UI וגם ב-RenderThread.
המדידות האלה נאספות בהתפלגות של האחוזונים ה-50, ה-90, ה-95 וה-99.
במאמר רינדור איטי מוסבר איך לזהות פריימים איטיים ולשפר אותם.
FrameTimingMetric תוצאות.TraceSectionMetric
TraceSectionMetric מתעד את מספר הפעמים שבהן קטע מעקב ספציפי מתרחש ואת משך הזמן המוחלט שלוקח להפעיל אותו. למעקב אחר זמן, הפלט הוא הזמן המינימלי, החציוני והמקסימלי באלפיות השנייה.
הקטע של מעקב היעד מוגדר על ידי הקריאה להפעלת הפונקציה trace(sectionName) או על ידי גבולות הבלוק ברמה נמוכה יותר בין Trace.beginSection(sectionName) לבין Trace.endSection() או הווריאציות האסינכרוניות שלהם. הוא תמיד בוחר את המופע הראשון של קטע מעקב שתועד במהלך מדידה. כברירת מחדל, הפלט כולל רק קטעי מעקב מהחבילה שלכם. כדי לכלול תהליכים מחוץ לחבילה, צריך להגדיר את targetPackageOnly =
false.
מידע נוסף על מעקב זמין במאמרים סקירה כללית של מעקב אחר המערכת והגדרת אירועים בהתאמה אישית.
TraceSectionMetric תוצאות.מומלץ בשבילכם
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- יצירת פרופיל Baseline {:#creating-profile-rules}
- כתיבת Macrobenchmark
- ניתוח ואופטימיזציה של הפעלת האפליקציה {:#app-startup-analysis-optimization}