Android כולל כמה אפשרויות למפתחים במכשיר שעוזרות לכם להמחיש איפה האפליקציה עלולה להיתקל בבעיות בעיבוד ממשק המשתמש שלה, למשל ביצוע יותר עבודת עיבוד מהנדרש או ביצוע פעולות ארוכות של שרשור ו-GPU. בדף הזה מוסבר איך מנפים באגים בחריגה ב-GPU ואיך יוצרים פרופיל של עיבוד ב-GPU.
כדי לקבל מידע נוסף על האפשרויות למפתחים במכשיר, כולל הסבר על הפעלת האפשרויות האלה, אפשר לקרוא את המאמר הגדרה של אפשרויות למפתחים במכשיר.
עיבוד פרופיל של מהירות העיבוד ב-GPU
הכלי Profile GPU Rendering (עיבוד פרופיל ב-GPU) מציג היסטוגרמה עם אפשרות גלילה, שבה מוצג באופן חזותי כמה זמן לוקח לעבד את הפריימים של חלון ממשק המשתמש ביחס לנקודת השוואה של 16.67 אלפיות השנייה לכל פריים.
במעבדי GPU פחות עוצמתיים, קצב המילוי הזמין (המהירות שבה מעבד ה-GPU יכול למלא את מאגר הפריימים) יכול להיות נמוך למדי. ככל שמספר הפיקסלים שנדרשים לציור של פריים עולה, יכול להיות שייקח ל-GPU יותר זמן לעבד פקודות חדשות, והוא יבקש משאר המערכת לחכות עד שהוא יוכל להדביק את הפער. כלי הפרופילים עוזר לכם לזהות מתי ה-GPU מתקשה לצייר פיקסלים או מתי הוא עמוס מדי בציור יתר.
הפעלת הכלי ליצירת פרופילים
לפני שמתחילים, מוודאים שמשתמשים במכשיר עם Android 4.1 (רמת API 16) ומעלה, ומפעילים את אפשרויות הפיתוח. כדי להתחיל ליצור פרופיל של עיבוד ב-GPU של המכשיר בזמן השימוש באפליקציה:
- במכשיר, עוברים אל הגדרות ומקישים על אפשרויות למפתחים.
- בקטע Monitoring, בוחרים באפשרות Profile GPU Rendering (עיבוד פרופיל ב-GPU) או באפשרות Profile HWUI rendering (עיבוד פרופיל ב-HWUI), בהתאם לגרסת Android שפועלת במכשיר.
- בתיבת הדו-שיח Profile GPU Rendering (עיבוד GPU של פרופיל), בוחרים באפשרות On screen as bars (במסך כעמודות) כדי להציג את הגרפים בשכבת-על במסך המכשיר.
- פותחים את האפליקציה שרוצים ליצור לה פרופיל.
בדיקת הפלט
בתמונה המוגדלת של הגרף Profile GPU Rendering שמוצגת באיור 1, אפשר לראות את החלק הצבעוני, כפי שהוא מוצג ב-Android 6.0 (רמת API 23).
איור 1. תרשים מוגדל של עיבוד פרופיל ב-GPU.
הנה כמה דברים שכדאי לדעת על הפלט:
- הכלי מציג תרשים לכל אפליקציה שמוצגת.
- כל עמודה אנכית לאורך הציר האופקי מייצגת פריים, והגובה של כל עמודה אנכית מייצג את משך הזמן שלקח לעבד את הפריים (באלפיות השנייה).
- הקו הירוק האופקי מייצג 16.67 אלפיות השנייה. כדי להגיע ל-60 פריימים לשנייה, העמודה האנכית של כל פרים צריכה להיות מתחת לקו הזה. אם אחד מהעמודות עובר את הקו הזה, יכול להיות שיהיו הפסקות באנימציות.
- הכלי מדגיש פריים שחורג מהסף של 16.67 אלפיות השנייה על ידי הרחבת העמודה המתאימה והפיכתה לפחות שקופה.
- לכל עמודה יש רכיבים צבעוניים שממפים לשלב בצינור העיבוד. מספר הרכיבים משתנה בהתאם לרמת ה-API של המכשיר.
בטבלה הבאה מפורט תיאור של כל פלח של עמודה אנכית בפלט של כלי הפרופיל כשהוא מופעל במכשיר עם Android מגרסה 6.0 ואילך.
רכיב של סרגל | שלב העיבוד | תיאור |
---|---|---|
החלפת מאגרי נתונים | מייצג את הזמן שבו המעבד ממתין עד שה-GPU יסיים את העבודה שלו. אם העמודה הזו גבוהה, המשמעות היא שהאפליקציה מבצעת יותר מדי עבודה ב-GPU. | |
בעיה בפקודה | מייצג את הזמן שחלף מאז שהרכיב לרינדור דו-ממדי של Android שלח פקודות ל-OpenGL כדי לצייר ולצייר מחדש רשימות תצוגה. גובה העמודה הזו הוא ביחס ישר לסכום הזמן שלוקח לכל רשימת תצוגה לפעול – ככל שיש יותר רשימות תצוגה, כך העמודה האדומה גבוהה יותר. | |
סנכרון והעלאה | משך הזמן שלוקח להעלות מידע על מפת סיביות ל-GPU. פלח גדול מצביע על כך שהאפליקציה לוקחת זמן רב לטעינת כמויות גדולות של גרפיקה. | |
ציור | הערך הזה מייצג את הזמן שנדרש ליצירה ולעדכון של רשימות התצוגה של התצוגה המפורטת. אם החלק הזה של העמודה גבוה, יכול להיות שיש הרבה ציור של תצוגות בהתאמה אישית, או הרבה עבודה בשיטות onDraw. | |
מדידה / פריסה | מייצג את משך הזמן שחלף בין הקריאה ל-onLayout לבין הקריאה ל-onMeasure בהיררכיית התצוגה. פלח גדול מצביע על כך שלוקח הרבה זמן לעבד את ההיררכיה של התצוגה. | |
טיפול בקלט ואנימציה |
מייצג את משך הזמן שנדרש כדי להעריך את כל האנימטורים שהופעלו עבור המסגרת הזו ולטפל בכל קריאות החזרה של הקלט. אם הפלח הזה גדול, יכול להיות שפונקציית אנימציה מותאמת אישית או קריאה חוזרת של קלט מבזבזת יותר מדי זמן על עיבוד. בדרך כלל מתרחשת גם קשירת תצוגה במהלך גלילה, כמו
RecyclerView.Adapter.onBindViewHolder() ,
והיא מקור נפוץ יותר להאטה בפלח הזה.
|
|
השהיה שונות של זמן או VSync | מייצג את הזמן שבו האפליקציה מבצעת פעולות בין שני פריימים עוקבים. יכול להיות שזה מעיד על יותר מדי עיבוד שמתבצע בשרשור של ממשק המשתמש, שאפשר להעביר אותו לשרשור אחר. |
טבלה 1. סרגלי רכיבים ב-Android 6.0 ואילך.
בגרסאות Android מ-4.0 (רמת API 14) עד 5.0 (רמת API 21) יש פלחים כחולים, סגולים, אדומים וכתומים. בגרסאות Android מתחת ל-4.0 יש רק את הרכיבים הכחול, האדום והכתום. בטבלה הבאה מוצגים סרגלי הרכיבים ב-Android 4.0 וב-Android 5.0.
רכיב של סרגל | שלב העיבוד | תיאור |
---|---|---|
עיבוד | מייצג את הזמן שבו המעבד ממתין עד שה-GPU יסיים את העבודה שלו. אם העמודה הזו גבוהה, המשמעות היא שהאפליקציה מבצעת יותר מדי עבודה ב-GPU. | |
ביצוע | מייצג את הזמן שחלף מאז שהרכיב לרינדור דו-ממדי של Android שלח פקודות ל-OpenGL כדי לצייר ולצייר מחדש רשימות תצוגה. גובה העמודה הזו הוא ביחס ישר לסכום הזמן שלוקח לכל רשימת תצוגה לפעול – ככל שיש יותר רשימות תצוגה, כך העמודה האדומה גבוהה יותר. | |
XFer | הזמן שנדרש להעלאת נתוני מפת סיביות ל-GPU. פלח גדול מצביע על כך שהאפליקציה לוקחת זמן רב לטעינת כמויות גדולות של גרפיקה. הפלח הזה לא מוצג במכשירים עם Android מגרסה 4.0 ומטה. | |
עדכון | הערך הזה מייצג את הזמן שנדרש ליצירה ולעדכון של רשימות התצוגה של התצוגה המפורטת. אם החלק הזה של העמודה גבוה, יכול להיות שיש הרבה ציור של תצוגות בהתאמה אישית, או הרבה עבודה בשיטות onDraw. |
טבלה 2. סרגלי רכיבים ב-Android 4.0 וב-Android 5.0.
מידע נוסף על פענוח המידע שמוצג בכלי ליצירת פרופילים זמין במאמר ניתוח באמצעות Profile GPU Rendering.
הערה: למרות שהכלי הזה נקרא 'עיבוד פרופיל ב-GPU', כל התהליכים המנוטרים מתרחשים בפועל במעבד. העיבוד מתבצע על ידי שליחת פקודות ל-GPU, וה-GPU מעבד את המסך באופן אסינכרוני. במצבים מסוימים, יכול להיות שיהיה ל-GPU יותר מדי עבודה לבצע, וה-CPU יצטרך לחכות לפני שהוא יוכל לשלוח פקודות חדשות. במקרים כאלה, תראו קפיצות בערכים של העמודות הכתומות והאדומות, והגשת הפקודה תיחסם עד שיתפנה מקום בתור הפקודות של ה-GPU.
הדמיה של חריגה ב-GPU
תכונה נוספת באפשרויות למפתחים עוזרת לכם לזהות חריגה מקיבולת הזיכרון על ידי קידוד צבעים בממשק המשתמש. ציור יתר מתרחש כשהאפליקציה מציירת את אותו פיקסל יותר מפעם אחת באותו פריים. לכן, בהדמיה הזו אפשר לראות איפה האפליקציה מבצעת יותר עבודת רינדור מהנדרש, וזה יכול לגרום לבעיות בביצועים בגלל מאמץ נוסף של ה-GPU לרינדור פיקסלים שלא יהיו גלויים למשתמש. לכן, כדאי לתקן אירועים של ציור יתר כשזה אפשרי.
אם עדיין לא עשיתם את זה, מפעילים את האפשרויות למפתחים. כדי לראות את הציור החוזר במכשיר, פועלים לפי השלבים הבאים:
- במכשיר, עוברים אל הגדרות ומקישים על אפשרויות למפתחים.
- גוללים למטה לקטע Hardware accelerated rendering (רינדור עם האצת חומרה) ובוחרים באפשרות Debug GPU Overdraw (ניפוי באגים של ציור יתר ב-GPU).
- בתיבת הדו-שיח Debug GPU overdraw, בוחרים באפשרות Show overdraw areas.
רכיבי ממשק המשתמש של Android מקבלים צבעים כדי לזהות את כמות הציור החוזר, באופן הבא:
- צבע אמיתי: אין ציור יתר
כחול: חריגה ממסגרת האשראי פעם אחת
ירוק: חריגה ממסגרת האשראי פעמיים
ורוד: חריגה ממסגרת האשראי 3 פעמים
אדום: משיכת יתר 4 פעמים או יותר

איור 2. אפליקציה כפי שהיא מופיעה בדרך כלל (משמאל), וכפי שהיא מופיעה כשהאפשרות 'משיכת יתר למעבד גרפי' מופעלת (מימין)
שימו לב שהצבעים האלה שקופים למחצה, ולכן הצבע המדויק שמוצג במסך תלוי בתוכן של ממשק המשתמש.
עכשיו, אחרי שאתם יודעים איפה מתרחש overdraw בפריסה, כדאי לקרוא איך לצמצם את ה-overdraw.
חשוב לזכור שאי אפשר להימנע לחלוטין מחריגה ממסגרת האשראי. במהלך כוונון ממשק המשתמש של האפליקציה, כדאי לנסות להגיע להדמיה שמציגה בעיקר צבעים אמיתיים או רק שכבת יתר אחת (כחול).

איור 3. דוגמאות לאפליקציה עם הרבה ציור יתר (משמאל) והפחתה משמעותית של ציור היתר (מימין)