SurfaceFlinger dump מספק snapshot של SurfaceFlinger בזמן ספציפי. ב-traces של SurfaceFlinger יש רצף כרונולוגי של מצבים שמספקים תובנות חשובות לגבי האופן שבו חלון מופיע במסך, ומאפשרים לקבוע איזה חלון יקבל תגובות מגע במיקומים ספציפיים. המידע הזה חיוני לפתרון בעיות כמו האפליקציה לא מגיבה למגע שלי או היו הבזקים בזמן הצפייה בסרטון.
המידע הזה מוצג ב-SurfaceFlinger viewer של Winscope למעקב אחרי טראקים שנאספו במצב פעיל או שנוצרו ממעקב העסקאות בזמן יצירת דוח באג (ברירת המחדל היא ההגדרה של Droidfood), וגם למעקב אחרי דמפים.
מידע נוסף על איסוף נתוני מעקב זמין במאמר SurfaceFlinger (שכבות).
איור 1. ניתוח נתוני מעקב של SurfaceFlinger.
בצד ימין של המסך מוצגת תצוגת תלת-ממד של השכבות. בתצוגת ה-rects נלקחים בחשבון גבולות השכבות, סדר Z, אטימות, Z יחסי ופינות מעוגלות.
צ'יפים של היררכיה
הקטע המרכזי בכרטיסייה מציג את היררכיית השכבות עם צ'יפים שמספקים מידע נוסף, כמו היחסים של הורה-צאצא בין השכבות, באופן הבא:
- V: מזהה שכבות גלויות.
- RelZParent: מזהה שכבות עם צאצא RelZ.
- RelZ: מזהה שכבות עם RelZParent ומתאר אותן לפי היררכיית הציור שלהן לפי z-order.
- HWC: מזהה שכבות שנוצרו על ידי ה-Hardware Composer.
- GPU: מזהה שכבות שנוצרו על ידי ה-GPU.
בצד שמאל של המסך מוצגת רשימה של מאפיינים שנבחרו בקפידה, וגם קובץ פרוטו של כל מאפייני השכבות הזמינים. מידע נוסף על המאפיינים של הקטע proto dump זמין בקטע מאפיינים.
נכסים שנבחרו במיוחד
כדי להקל על ניפוי הבאגים, מוצגת ב-SurfaceFlinger רשימה של מאפיינים נבחרים, שבה המידע הנפוץ ביותר מוצג בפורמט מאורגן יותר:
איור 2. מאפייני SurfaceFlinger.
הרשימה הזו כוללת את הקטגוריות הבאות.
חשיפה
הבלוק הזה מכיל מידע על החשיפה של השכבה והסבר למה היא לא גלויה. היא כוללת:
דגלים: הדגלים האלה קובעים את רמת החשיפה, לדוגמה, HIDDEN
ו-OPAQUE
.
הסיבה לכך שהשכבה או המשטח לא גלויים: הסבר לכך שהשכבה או המשטח לא גלויים במסך, אם רלוונטי. למשל, הם מוסתרים בעצמם או על ידי האב שלהם, או שאין להם מאגר לצורך ציור.
חסום, חסום חלקית או מכוסה:
- מוסתרת: השכבה הנוכחית מחושבת כגלויה, אבל שכבה אטומה אחרת נמשכת מעליה, כך שהשכבה הנוכחית לא גלויה. השכבה שמעל השכבה Occluded היא אטומה, כלומר הדגל
OPAQUE
שלה מוגדר, או שפורמט הפיקסלים לא מכיל אלפא או שלא מוגדר אלפא בשכבה. - חלקית חסומה: השכבה הנוכחית גלויה חלקית כי השכבה האטומה שמצוירת מעליה לא מכסה אותה לגמרי. השכבה שמעל השכבה Partially Occluded היא אטומה, כלומר הדגל
OPAQUE
מוגדר, או שפורמט הפיקסלים לא מכיל אלפא או שלא מוגדר אלפא בשכבה. מכוסה: השכבה הנוכחית מכוסה, באופן מלא או חלקי, בשכבה לא אטומה, ויכול להיות שהיא עדיין תהיה גלויה במסך. השכבה שמעל השכבה Covered היא לא אטומה, כלומר הדגל
OPAQUE
לא מוגדר או שפורמט הפיקסלים מכיל אלפא או שהאלפא מוגדר בשכבה. עם זאת, בשרטוטים של SurfaceFlinger, שכבה מכוסה מוצגת כגלויה, בשכבות מתחת ל-SurfaceFlinger:איור 3. שכבה מכוסה ב-SurfaceFlinger.
גיאומטריה ואפקטים
בקטע הזה מתוארים הגיאומטריה והאפקטים המבוקשים והמחושבים של השכבה הנוכחית.
בקטע Requested מוצגים המאפיינים שמוגדרים בשכבה. לעומת זאת, בקטע מחושב מוצגים המאפיינים שחלים על השכבה. ההבדל הזה נובע מכך שהגיאומטריה והאפקטים מועברים במורד ההיררכיה ועוברים בירושה מרכיבי הורה.
באיור 2, השכבה מבקשת להגדיר את Corner Radius לערך 0 px. עם זאת, באחת משכבות ההורה שלו מוגדר הערך 97.419px ל-Corner Radius, והוא הערך שיוחל:
מאגר נתונים זמני
המאפיינים הבאים מציגים מידע על כך שלשכבה יש מאגר, על הגודל שלה ועל הטרנספורמציה שלה.
- מספר פריים: מספר מצטבר שמתחיל כשאפליקציה נוצרת.
- Destination Frame: משמש לשינוי קנה המידה של המאגר בהתאם לגבולות שמוגדרים על ידי מסגרת היעד.
היררכיה
המאפיינים הבאים מתארים איך נקבעת היררכיית השכבות:
- z-order: בהיררכיית השכבות, סדר z קובע את המיקום היחסי של שכבה ביחס לשכבות אחיות. שכבה עם ערך z של 0 ממוקמת מעל ההורה שלה. אם לכמה שכבות יש אותו ערך z, השכבה עם מזהה השכבה הגבוה יותר תופיע בחלק העליון.
- relative parent: מציין את שכבת ההורה היחסית בסדר z. הצאצא לא יורש מאפיינים מנכס ההורה היחסי, מלבד הדגל hidden.
קלט
המאפיינים הבאים מכילים מידע על אזור שניתן לגעת בו ועל המיקוד:
- חיתוך אזור המגע עם הפריט: משתמשים בגבולות השכבה כדי לחתוך את האזור שניתן לגעת בו.
- החלפת אזור המגע בחיתוך: שימוש בחיתוך של השכבות הנוכחיות כאזור המגע.