הפחתת ציור יתר

בדף הזה נסביר מה זה overdraw, איך לאבחן אותו ואיך למנוע או לצמצם אותו.

כשבאפליקציה מציירים את אותו פיקסל יותר מפעם אחת בתוך פריים אחד, התופעה הזו נקראת ציור יתר. בדרך כלל אין צורך בציור יתר, ועדיף להימנע ממנו. הבעיה בציור יתר מתרחשת כשזמן המעבד הגרפי מבוזבז על עיבוד פיקסלים שלא תורמים למה שהמשתמש רואה במסך.

מידע על שימוש יתר

המונח 'ציור יתר' מתייחס למצב שבו המערכת מציירת פיקסל במסך מספר פעמים בפריים יחיד של רינדור. לדוגמה, אם יש לכם כמה כרטיסי ממשק משתמש שמונחים אחד על השני, כל כרטיס מסתיר חלק מהכרטיס שמתחתיו.

עם זאת, המערכת עדיין צריכה לצייר את החלקים המוסתרים של הכרטיסים בערימה. הסיבה לכך היא שהכרטיסים המוערמים מעובדים לפי האלגוריתם של הצייר, כלומר בסדר מהסוף להתחלה. רצף העיבוד הזה מאפשר למערכת להחיל מיזוג אלפא נכון על אובייקטים שקופים למחצה, כמו צללים.

.

איתור בעיות של ציור יתר

הפלטפורמה מציעה את הכלים הבאים שיעזרו לכם לקבוע אם ציור יתר משפיע על ביצועי האפליקציה.

כלי לניפוי באגים של פיקסלים עודפים (overdraw) ב-GPU

הכלי Debug GPU Overdraw משתמש בקידוד צבעים כדי להראות את מספר הפעמים שבהם האפליקציה מציירת כל פיקסל על המסך. ככל שהמספר הזה גבוה יותר, כך גדל הסיכוי שציור יתר ישפיע על ביצועי האפליקציה.

מידע נוסף זמין במאמר בנושא הדמיה של ציור יתר של GPU.

כלי לעיבוד פרופיל ב-GPU

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

ב-GPU עם ביצועים נמוכים, קצב המילוי הזמין – המהירות שבה ה-GPU יכול למלא את מאגר המסגרות – יכול להיות נמוך. ככל שמספר הפיקסלים שנדרשים לציור של פריים גדל, יכול להיות שייקח ל-GPU יותר זמן לעבד פקודות חדשות, והוא יבקש משאר המערכת לחכות עד שהוא יוכל להדביק את הפער. בסרגל Process (תהליך) אפשר לראות את העלייה הזו, שמתרחשת כשהמעבד הגרפי מוצף בניסיון לצייר פיקסלים מהר ככל האפשר. גם בעיות אחרות, לא רק מספרים גולמיים של פיקסלים, יכולות לגרום לעלייה חדה במדד הזה. לדוגמה, אם הכלי Debug GPU Overdraw מציג משיכת יתר כבדה וערכי Process גבוהים, כנראה שיש בעיה במשיכת היתר.

למידע נוסף, אפשר לקרוא את המאמר בנושא מהירות העיבוד של פרופיל ב-GPU.

תיקון פיקסלים עודפים (overdraw)

כדי לצמצם את האפשרות לחריגה מהמסגרת או למנוע אותה, אפשר:

  • הסרת רקעים מיותרים בפריסות.
  • השטחת היררכיית התצוגות.
  • הפחתת השקיפות.

בקטע הזה מוסבר על כל אחת מהגישות האלה.

הסרת רקעים מיותרים בפריסות

כברירת מחדל, לפריסה אין רקע, כלומר היא לא מעבדת שום דבר ישירות בעצמה. עם זאת, אם הפריסות כוללות רקעים, הם עלולים לגרום לציור יתר.

כדי לשפר את ביצועי העיבוד, אפשר להסיר רקעים מיותרים. יכול להיות שלא תראו רקע מיותר כי הוא מכוסה לגמרי בכל מה שהאפליקציה מציירת מעליו. לדוגמה, המערכת עשויה לכסות לחלוטין את הרקע של תצוגת האב כשהיא מציירת מעליה את תצוגות הצאצא.

כדי להבין למה אתם מבצעים משיכת יתר, כדאי לעיין בהיררכיה בכלי Layout Inspector. אפשר לחפש רקעים שלא גלויים למשתמש ולמחוק אותם. אפשר להסיר רקעים מיותרים בכל מקום שיש הרבה מאגרי תגים שמשתמשים באותו צבע רקע. אפשר להגדיר את הרקע של החלון לצבע הרקע הראשי של האפליקציה, ולהשאיר את כל המאגרים שמעליו ללא ערכי רקע מוגדרים.

השטחת היררכיית התצוגה

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

אם נתקלים בבעיה הזו, אפשר לשפר את הביצועים על ידי אופטימיזציה של היררכיית התצוגה כדי להקטין את מספר האובייקטים של ממשק המשתמש שחופפים. מידע נוסף על האופן שבו עושים את זה זמין במאמר היררכיות של ביצועים ותצוגות.

הפחתת השקיפות

רינדור של פיקסלים שקופים במסך, שנקרא רינדור אלפא, הוא גורם מרכזי לציור יתר. בניגוד לציור יתר רגיל – שבו המערכת מסתירה לחלוטין פיקסלים קיימים שצויירו על ידי ציור פיקסלים אטומים מעליהם – כדי לצייר אובייקטים שקופים צריך קודם לצייר פיקסלים קיימים, כדי שמשוואת המיזוג הנכונה תוכל להתבצע.

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

כדי לקבל מידע נוסף על עלויות הביצועים שנובעות מהשקיפות לאורך כל צינור הציור, אפשר לצפות בסרטון העלויות הנסתרות של השקיפות.