SurfaceFlinger

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

הצופה של SurfaceFlinger ב-Winscope מציג את המידע הזה למעקבים שנאספו באמצעות מצב פעיל או שנוצרו ממעקב אחר עסקאות כשיוצרים דוח באגים (כברירת מחדל, ההגדרה של Droidfood), וגם למעקבים של dumps.

מידע נוסף על איסוף נתונים זמין במאמר SurfaceFlinger (שכבות).

ניתוח עקבות של SurfaceFlinger

איור 1. ניתוח של נתוני מעקב ב-SurfaceFlinger.

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

צ'יפים של היררכיה

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

  • V: מציין שכבות גלויות.
  • RelZParent: מזהה שכבות עם צאצא RelZ.
  • RelZ: מזהה שכבות עם RelZParent ומצייר אותן לפי סדר z כהיררכיה שלהן.
  • HWC: מזהה שכבות שנוצרו על ידי Hardware Composer.
  • GPU: מזהה שכבות שנוצרו על ידי ה-GPU.

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

נכסים שנבחרו במיוחד

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

מאפיינים של SurfaceFlinger

איור 2. מאפייני SurfaceFlinger.

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

חשיפה

הבלוק הזה מכיל מידע על הנראות של השכבה והסבר למה היא לא גלויה. היא כוללת:

דגלים: הדגלים האלה שולטים בנראות, לדוגמה, HIDDEN ו-OPAQUE.

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

מוסתר, מוסתר חלקית או מכוסה:

  • מוסתר: השכבה הנוכחית מחושבת כגלויות, אבל שכבה אטומה אחרת מצוירת מעליה, ולכן השכבה הנוכחית לא גלויה. השכבה שמעל השכבה Occluded היא אטומה, כלומר, הדגל OPAQUE שלה מוגדר, או שפורמט הפיקסלים לא מכיל אלפא או שלא מוגדר אלפא בשכבה.
  • מוסתר חלקית: השכבה הנוכחית גלויה חלקית כי השכבה האטומית שמצוירת מעליה לא מכסה אותה לגמרי. השכבה שמעל השכבה Partially Occluded אטומה, כלומר הדגל OPAQUE מוגדר או שפורמט הפיקסלים לא מכיל אלפא או שלא מוגדר אלפא בשכבה.
  • מוסתר: השכבה הנוכחית מוסתרת, באופן מלא או חלקי, על ידי שכבה לא אטומה, ויכול להיות שהיא עדיין גלויה במסך. השכבה שמעל השכבה Covered לא אטומה, כלומר הדגל OPAQUE לא מוגדר או שפורמט הפיקסלים מכיל אלפא או שהאלפא מוגדר בשכבה. עם זאת, במעקב אחר SurfaceFlinger, שכבת Covered מוצגת כשכבה גלויה, בשכבות שמתחת ל-SurfaceFlinger:

    שכבה מכוסה ב-SurfaceFlinger

    איור 3. שכבה מכוסה ב-SurfaceFlinger.

גיאומטריה ואפקטים

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

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

באיור 2, השכבה מבקשת להגדיר את רדיוס הפינה ל-0 פיקסלים. עם זאת, באחת משכבות ההורה שלו מוגדר רדיוס הפינה כ-97.419 px, וזה הערך שמוחל:

מאגר נתונים זמני

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

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

היררכיה

המאפיינים הבאים מתארים איך נקבעת ההיררכיה של השכבות:

  • z-order: בהיררכיה של השכבות, הסדר הזה קובע את המיקום היחסי של שכבה ביחס לשכבות אחרות באותה רמה. שכבה עם ערך z של 0 ממוקמת מעל השכבה הראשית שלה. אם לכמה שכבות יש אותו ערך z, השכבה עם מזהה השכבה הגבוה יותר ממוקמת למעלה.
  • relative parent: מציין את שכבת ההורה היחסית בסדר ה-z. הצאצא לא יורש אף מאפיין מההורה היחסי שלו, מלבד הדגל המוסתר.

קלט

המאפיינים הבאים מכילים מידע על אזור שניתן להקשה ועל מיקוד:

  • חיתוך אזור המגע עם הפריט: שימוש בגבולות השכבה לחיתוך אזור המגע.
  • החלפת אזור המגע בחיתוך: שימוש בחיתוך הנוכחי של השכבות כאזור שאפשר לגעת בו.