בדיקות ביצועים של Hero הן קבוצה של בדיקות ביצועים שכוללות התהליך שעובר המשתמש ברמה גבוהה באפליקציה, כמו הפעלת האפליקציה או גלילה באפליקציית Pokedex בקוד פתוח.
- נקודות השוואה של Startup hero: מעקב אחרי הזמן שעובר מרגע פתיחת האפליקציה ועד שהתוכן מוצג.
- נקודות השוואה של Scroll hero: מדידת ביצועי הגלילה של רשת עם טעינה מדורגת (lazy grid) עם תמונות.
הגדרת הבדיקה
- בחירת האפליקציה: ביצענו את הבדיקות האלה באמצעות אפליקציית Pokedex בקוד פתוח, והשווינו בין הגרסאות שלה מבוססות-התצוגה ומבוססות-Compose. האפליקציה נבחרה כדי לייצג תרחישים בעולם האמיתי, והיא לא פותחה על ידי צוות Compose.
- הגדרת החומרה: בדיקות הביצועים בוצעו במכשיר Pixel 6 עם Android 17 (API 37) עם מעבדים (CPU) ומעבדים גרפיים (GPU) נעולים. לפני Compose 1.12, בדיקות השוואה נערכו ב-Pixel 3a. החל מגרסה 1.12 של Compose, מכשיר Pixel 6 משמש כערך הבסיס הסטנדרטי לביצועים של הערכות ביצועים חשובות.
- הגדרת ה-build: בדיקות הביצועים משתמשות באפליקציה שנוצרה במצב גרסה עם R8 מופעל. האפליקציה עוברת קימפול מראש באופן מלא כדי לצמצם את חוסר היציבות שנובע מקימפול just-in-time (JIT).
- בחירת התוצאות: כדי להבטיח ניתוח של התרחיש הגרוע ביותר, חריגים קיצוניים ורעש לא מייצג הוחרגו מתוצאות ההשוואה. לאחר מכן, נקבע קו בסיס על ידי בחירת ערכי החציון של נתוני הביצועים של הגבול העליון
נקודות השוואה של גיבורי סטארט-אפ
כדי למדוד את ההפעלה, השתמשנו ב-PokedexStartupBenchmark. המדד PokedexStartupBenchmark מודד את משך הזמן שנדרש עד שהאפליקציה Pokedex מוצגת למשתמש.
הפעלת אפליקציה יכולה להתבצע באחד משלושה מצבים: הפעלה במצב קר (Cold start), הפעלה במצב ביניים (Warm start) או הפעלה במצב חם (Hot start). כל מצב משפיע על משך הזמן שחולף עד שהאפליקציה מוצגת למשתמש. בהפעלה במצב התחלתי (cold start), האפליקציה מופעלת מאפס. בבדיקה הזו אנחנו מודדים את ביצועי ההפעלה של האפליקציה במצב של הפעלה מההתחלה (cold start). מומלץ תמיד לבצע אופטימיזציה של האפליקציה בהנחה שהיא תופעל בהפעלה קרה. כך אפשר לשפר גם את הביצועים של הפעלות במצב ביניים (warm start) והפעלות במצב חם (hot start).
המדדים שבהם אנחנו משתמשים כדי למדוד את זמן ההפעלה של האפליקציה הם הזמן עד להצגה הראשונית והזמן עד להצגה המלאה.
הזמן עד להצגה הראשונית
המדד "זמן עד לתצוגה הראשונית" (TTID) מודד את הזמן שלוקח לאפליקציה להפיק את הפריים הראשון שלה, כולל אתחול התהליך במהלך הפעלה קרה, יצירת פעילות במהלך הפעלה קרה או חמה והצגת הפריים הראשון.
ב-PokedexStartupBenchmark, פיתוח נייטיב בגרסה 1.12 תואם ל-Views ל-TTID עם הפעלה קרה.
זמן עד להצגה מלאה
המדד "זמן עד לתצוגה מלאה" (TTFD) מודד את הזמן עד שהאפליקציה הופכת לאינטראקטיבית. כלומר, כל הנתונים נטענו ומוצגים. מידע נוסף על הזמן עד להצגה מלאה זמין במאמר זמן ההפעלה של האפליקציה.
ב-PokedexStartupBenchmark, Compose בגרסה 1.12 איטי יותר בכ-2% בהשוואה ל-Views ב-TTFD עם הפעלה במצב התחלתי (cold start).
נקודות השוואה של גלילה ב-Hero
כדי למדוד את ביצועי הגלילה, השתמשנו ב-PokedexScrollBenchmark. הוא מודד את ביצועי הגלילה של מסך האפליקציה Pokedex עבור רשת עם טעינה מדורגת (lazy grid) עם תמונות. בבדיקה הזו, כל המסך נגלל ומוסט כמה פעמים ופריטים חדשים נטענים. ביצועי הגלילה נמדדים לפי שיעור הקיטועים.
שיעור הפריימים שדילגו עליהם
מכשירי Android מעבדים עד 60 או 120 פריימים לשנייה (FPS). זה אומר שלמערכת יש מועד אחרון קפדני (לדוגמה, 16.6 אלפיות השנייה ל-60fps) ליצירת פריים. אם לאפליקציה לוקח יותר מדי זמן לבצע את העבודה שלה, זה יכול לגרום לבעיות בממשק (jank).
ב-PokedexScrollBenchmark, הביצועים של פיתוח נייטיב תואמים לביצועים של Views, עם 0 נקודות אחוז של עודף פריימים שנתקעו מאז גרסה 1.9.0 של פיתוח נייטיב. ב-Pixel 6 (נבדק החל מ-Compose 1.11), גם Compose וגם Views משיגים שיעור של 0% של קפיצות בפריימים.
הרצת הערכות ביצועים של גיבורים
כדי לאמת את תוצאות הביצועים ולהריץ את נקודות ההשוואה באופן מקומי:
- כדי לבדוק את קוד המקור, פועלים לפי המדריך של AndroidX.
- פועלים לפי ההוראות בקובץ README של קוד המקור של Hero Benchmarks כדי ליצור את חבילות ה-APK של נקודות ההשוואה והיעד (
pokedex-macrobenchmarkו-pokedex-macrobenchmark-target), מתקינים אותן במכשיר בדיקה ומריצים את החבילותPokedexStartupBenchmarkו-PokedexScrollBenchmarkבאמצעותadbאו Android Studio.
אתם יכולים להריץ את נקודות ההשוואה האלה בכל מכשיר נתמך, כמו מכשיר ספציפי שאתם מבצעים אופטימיזציה של האפליקציה בשבילו. עם זאת, כדי לאמת את התוצאות הרשמיות, צריך להשתמש באותה הגדרת חומרה.