Android כולל כמה אפשרויות למפתחים במכשיר שעוזרות לכם להמחיש איפה האפליקציה עלולה להיתקל בבעיות בעיבוד ממשק המשתמש שלה, למשל ביצוע יותר עבודת עיבוד מהנדרש או ביצוע פעולות ארוכות של שרשור ו-GPU. בדף הזה מוסבר איך לנפות באגים בשימוש יתר ב-GPU ואיך ליצור פרופיל של רינדור ב-GPU.
כאן אפשר לקרוא מידע נוסף על האפשרויות למפתחים במכשיר, כולל איך להפעיל אותן.
עיבוד פרופיל של מהירות הרינדור ב-GPU
הכלי Profile GPU Rendering (עיבוד פרופיל ב-GPU) מציג היסטוגרמה עם אפשרות גלילה, שבה מוצג באופן חזותי כמה זמן לוקח לעבד את המסגרות של חלון ממשק משתמש ביחס לנקודת השוואה של 16.67 אלפיות השנייה לכל מסגרת.
ב-GPU חלשים יותר, קצב המילוי הזמין (המהירות שבה ה-GPU יכול למלא את מאגר הפריימים) יכול להיות נמוך למדי. ככל שמספר הפיקסלים שנדרשים לציור פריים גדל, יכול להיות שייקח ל-GPU יותר זמן לעבד פקודות חדשות, ולכן שאר המערכת תצטרך לחכות עד שה-GPU יסיים את העיבוד.
כלי הפרופילים עוזר לכם לזהות מתי ה-GPU מוצף בניסיון לצייר פיקסלים או מתי הוא עמוס בציור יתר.
הפעלת הכלי ליצירת פרופילים
לפני שמתחילים, מוודאים שמשתמשים במכשיר עם Android 4.1 (API ברמה 16) ואילך, ומפעילים את אפשרויות הפיתוח. כדי להתחיל ליצור פרופיל של עיבוד GPU במכשיר בזמן השימוש באפליקציה, פועלים לפי השלבים הבאים:
- במכשיר, עוברים אל הגדרות ומקישים על אפשרויות למפתחים.
- בקטע Monitoring (מעקב), בוחרים באפשרות Profile GPU Rendering (עיבוד פרופיל ב-GPU) או באפשרות Profile HWUI rendering (עיבוד פרופיל ב-HWUI), בהתאם לגרסת Android שפועלת במכשיר.
- בתיבת הדו-שיח Profile GPU Rendering, בוחרים באפשרות On screen as bars כדי להציג את הגרפים בשכבת-על במסך המכשיר.
- פותחים את האפליקציה שרוצים ליצור לה פרופיל.
בדיקת הפלט
בתמונה המוגדלת של תרשים העיבוד של GPU בפרופיל שמוצג באיור 1, אפשר לראות את החלק הצבעוני, כפי שהוא מוצג ב-Android 6.0 (רמת API 23).
איור 1. תרשים מוגדל של עיבוד פרופיל ב-GPU.
הנה כמה דברים שכדאי לדעת על הפלט:
- הכלי מציג תרשים לכל אפליקציה שמוצגת.
- כל עמודה אנכית לאורך הציר האופקי מייצגת פריים, והגובה של כל עמודה אנכית מייצג את משך הזמן שנדרש לעיבוד הפריים (באלפיות השנייה).
- הקו הירוק האופקי מייצג 16.67 אלפיות השנייה. כדי להשיג 60 פריימים בשנייה, העמודה האנכית של כל פריימים צריכה להיות מתחת לקו הזה. אם אחד מהעמודות עובר את הקו הזה, יכול להיות שיהיו הפסקות באנימציות.
- הכלי מדגיש פריים שחורג מהסף של 16.67 אלפיות השנייה על ידי הרחבת העמודה המתאימה והפיכתה לפחות שקופה.
- לכל עמודה יש רכיבים צבעוניים שמתאימים לשלב בצינור העיבוד. מספר הרכיבים משתנה בהתאם לרמת ה-API של המכשיר.
בטבלה הבאה מופיעים תיאורים של כל פלח של פס אנכי בפלט של כלי הפרופיל כשהוא מופעל במכשיר עם Android מגרסה 6.0 ואילך.
| רכיב של בר | שלב הרינדור | תיאור |
|---|---|---|
| החלפת מאגרי נתונים זמניים | מייצג את הזמן שבו המעבד ממתין עד שה-GPU יסיים את העבודה שלו. אם העמודה הזו גבוהה, המשמעות היא שהאפליקציה מבצעת יותר מדי עבודה ב-GPU. | |
| בעיה בפקודה | מייצג את הזמן שחלף מאז שמעבד התלת-ממד של Android הוציא פקודות ל-OpenGL כדי לצייר ולצייר מחדש רשימות תצוגה. הגובה של העמודה הזו הוא ביחס ישר לסכום הזמן שלוקח לכל רשימת תצוגה לפעול – ככל שיש יותר רשימות תצוגה, כך העמודה האדומה גבוהה יותר. | |
| סנכרון והעלאה | הזמן שלוקח להעלות מידע על מפת סיביות ל-GPU. פלג גדול מצביע על כך שהאפליקציה משקיעה זמן רב בטעינה של כמויות גדולות של גרפיקה. | |
| ציור |
הזמן שנדרש לרישום פקודות ציור, כמו drawLine. בשלב הכתיבה, לפעמים יש גם פעולות של מדידה ופריסה. אם הסרגל הזה גבוה, כדאי לתעד את עקבות המערכת ולבדוק אותם באמצעות Perfetto כדי לקבל פירוט.
|
|
| מדידה / פריסה | מייצג את משך הזמן שחלף במהלך שלב הפריסה, שכולל ביצוע של שינויים במדידה ובמיקום, עד למיקום ולקביעת הגודל של רכיבי ממשק המשתמש. פלח גדול מצביע על חישובים מורכבים בתוך משני הגודל האלה או על עץ פריסה עמוק מדי שדורש חישוב מחדש לעיתים קרובות. | |
| טיפול בקלט ואנימציה |
הערך הזה מייצג את משך הזמן שנדרש להערכת קריאות ל-animation API או ל-handle pointer input והקריאות החוזרות שלו. אם הפלח הזה גדול, יכול להיות שפונקציית קריאה חוזרת (callback) מותאמת אישית או אנימציה מותאמת אישית מבזבזת יותר מדי זמן על עיבוד. במהלך הפלח הזה מתבצעים בדרך כלל גם חישוב מצב ומיפוי נתונים בזמן גלילה ב-LazyColumn או ב-LazyRow. אלה מקורות נפוצים יותר להאטה בפלח הזה.
|
|
| השהיה שונות של זמן או VSync | הזמן שבו האפליקציה מבצעת פעולות בין שני פריימים עוקבים. יכול להיות שזה מעיד על יותר מדי עיבוד שמתבצע בשרשור UI, שאפשר להעביר אותו לשרשור אחר. |
טבלה 1. סרגלי רכיבים ב-Android 6.0 ואילך.
מידע נוסף על האופן שבו מפרשים את המידע שמוצג בכלי ליצירת פרופילים זמין במאמר ניתוח באמצעות עיבוד פרופיל ב-GPU.