دادههای SurfaceFlinger تصویری از SurfaceFlinger در یک زمان خاص ارائه میدهند. ردپاهای SurfaceFlinger دارای یک توالی زمانی از حالتها هستند که بینش ارزشمندی در مورد نحوه نمایش یک پنجره روی صفحه ارائه میدهند و تعیین میکنند که کدام پنجره در مکانهای خاص پاسخهای لمسی دریافت میکند. این اطلاعات به شما کمک میکند تا مشکلاتی مانند عدم پاسخگویی برنامه به لمس یا سوسو زدن تصویر هنگام تماشای ویدیو را عیبیابی کنید.
در Winscope، نمایشگر SurfaceFlinger این اطلاعات را برای ردیابیهایی که با استفاده از حالت فعال یا ردیابی تراکنشها هنگام دریافت گزارش اشکال (بهطور پیشفرض، پیکربندی Droidfood) جمعآوری میکنید، و همچنین برای dumpها نمایش میدهد.
برای اطلاعات بیشتر در مورد جمعآوری ردپاها، به SurfaceFlinger (لایهها) مراجعه کنید.
شکل ۱. تحلیل رد SurfaceFlinger.
سمت چپ صفحه نمایش، نمای سهبعدی از لایهها را نشان میدهد. نمای مستطیلی، مرزهای لایه، ترتیب z، شفافیت، Z نسبی و گوشههای گرد را در نظر میگیرد.
تراشههای سلسله مراتبی
بخش مرکزی تب، سلسله مراتب لایهها را به همراه تراشههایی برای اطلاعات بیشتر، مانند روابط والد-فرزندی بین لایهها، به شرح زیر نشان میدهد:
- V : لایههای قابل مشاهده را شناسایی میکند.
- RelZParent : لایههایی را که فرزند RelZ دارند شناسایی میکند.
- RelZ : لایههایی را که دارای RelZParent هستند و به صورت سلسله مراتبی در z-order ترسیم شدهاند، شناسایی میکند.
- HWC : لایههای تشکیلشده توسط Hardware Composer را شناسایی میکند.
- GPU : لایههای تشکیلشده توسط GPU را شناسایی میکند.
سمت راست صفحه نمایش لیستی از ویژگیهای انتخابشده و همچنین یک نمونه اولیه از تمام ویژگیهای لایههای موجود را نشان میدهد. برای اطلاعات بیشتر در مورد ویژگیهای بخش نمونه اولیه، به بخش ویژگیها مراجعه کنید.
املاک منتخب
برای آسانتر کردن اشکالزدایی، نمایشگر SurfaceFlinger فهرستی از ویژگیها را ارائه میدهد که رایجترین اطلاعات مورد استفاده را در قالبی سازمانیافتهتر ارائه میدهد:
شکل ۲. خواص SurfaceFlinger.
این فهرست شامل دستههای زیر است.
قابلیت مشاهده
این بلوک شامل اطلاعاتی در مورد قابلیت مشاهده لایه و توضیحی در مورد دلیل عدم نمایش آن است. این شامل موارد زیر است:
پرچمها: این پرچمها میزان دیده شدن را کنترل میکنند، برای مثال،
HIDDEN
وOPAQUE
.دلیل نامرئی بودن: توضیحی برای اینکه چرا لایه یا سطح در صفحه نمایش نامرئی است (در صورت وجود)، مثلاً توسط خودش یا والدش پنهان شده باشد، یا بافری برای ترسیم نداشته باشد.
مسدود ، نیمه مسدود یا پوشیده:
- Occluded: لایه فعلی به عنوان لایه قابل مشاهده محاسبه میشود، اما یک لایه مات دیگر روی آن رسم میشود که لایه فعلی را نامرئی میکند. لایه بالای لایه Occluded مات است، یعنی یا علامت
OPAQUE
آن تنظیم شده است، یا فرمت پیکسل حاوی آلفا نیست یا هیچ آلفایی روی لایه تنظیم نشده است. - نیمهپوشیده (Partially Occluded): لایه فعلی تا حدی قابل مشاهده است زیرا لایه مات رسم شده روی آن، آن را به طور کامل نمیپوشاند. لایه بالای لایه نیمهپوشیده مات است، یعنی پرچم
OPAQUE
روی آن تنظیم شده است، یا فرمت پیکسل حاوی آلفا نیست یا هیچ آلفایی روی لایه تنظیم نشده است. پوشیده شده: لایه فعلی، به طور کامل یا جزئی، توسط یک لایه غیر مات پوشانده شده است و ممکن است هنوز روی صفحه قابل مشاهده باشد. لایه بالای لایه پوشیده شده مات نیست، یعنی پرچم
OPAQUE
تنظیم نشده است یا فرمت پیکسل حاوی آلفا است یا آلفا روی لایه تنظیم شده است. با این حال، برای ردیابیهای SurfaceFlinger، یک لایه پوشیده شده به صورت قابل مشاهده نشان داده میشود، برای لایههای زیر SurfaceFlinger:شکل ۳. لایه پوشانده شده روی SurfaceFlinger.
- Occluded: لایه فعلی به عنوان لایه قابل مشاهده محاسبه میشود، اما یک لایه مات دیگر روی آن رسم میشود که لایه فعلی را نامرئی میکند. لایه بالای لایه Occluded مات است، یعنی یا علامت
هندسه و جلوهها
این بخش هندسه و جلوههای درخواستی و محاسبهشده برای لایه فعلی را شرح میدهد.
بخش Requested ویژگیهایی را که روی لایه تنظیم میشوند نشان میدهد. در مقابل، بخش Calculated ویژگیهایی را که روی لایه اعمال میشوند نمایش میدهد. این تمایز به این دلیل است که هندسه و جلوهها از سلسله مراتب به پایین منتقل میشوند و از عناصر والد به ارث میرسند.
در شکل ۲، لایه درخواست میکند که Corner Radius روی ۰ پیکسل تنظیم شود. با این حال، یکی از لایههای والد آن Corner Radius را روی ۹۷.۴۱۹ پیکسل تنظیم میکند که مقدار اعمال شده است.
بافر
ویژگیهای زیر اطلاعاتی در مورد وجود بافر در لایه، اندازه آن و تبدیل آن را نمایش میدهند:
- شماره فریم: شماره افزایشی که از زمان ایجاد برنامه شروع میشود.
- فریم مقصد: برای مقیاسبندی بافر تا مرزهای تعریفشده توسط فریم مقصد استفاده میشود.
سلسله مراتب
ویژگیهای زیر نحوه تعیین سلسله مراتب لایهها را شرح میدهند:
- z-order: در سلسله مراتب لایهها، z-order موقعیت نسبی یک لایه را نسبت به لایههای همخانوادهاش تعیین میکند. لایهای با مقدار z برابر با ۰ بالاتر از لایه والد خود قرار میگیرد. اگر چندین لایه مقدار z یکسانی داشته باشند، لایهای که شناسه لایه بالاتری دارد، در بالا قرار میگیرد.
- والد نسبی: لایه والد نسبی را در مرتبه z نشان میدهد. لایه فرزند هیچ ویژگی از والد نسبی خود به جز پرچم پنهان به ارث نمیبرد.
ورودی
ویژگیهای زیر حاوی اطلاعاتی در مورد ناحیه قابل لمس و فوکوس هستند:
- برش ناحیه لمس شده با آیتم: از مرزهای لایه برای برش ناحیه قابل لمس استفاده کنید.
- جایگزینی ناحیه لمس با برش: از برش لایههای فعلی به عنوان ناحیه قابل لمس آن استفاده کنید.