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