Android 13 پیکربندی جدیدی به نام
AutoSingleLayer برای چفت کردن بافرهای بدون سیگنال معرفی میکند. این پیکربندی به SurfaceFlinger اجازه میدهد
وقتی فقط یک لایه درحال بهروزرسانی است، بافر بدون سیگنال را قفل کند.
این مورد برای مواردی که در لایههای مختلف رخ میدهد، برای مثال، تغییرات هندسی یا تراکنشهای همگامسازی، اعمال نمیشود.
قبلاً، پرچم debug.sf.latch_unsignaled در «پروژه منبع باز Android» (AOSP) به SurfaceFlinger اجازه میداد همه بافرهای بدون سیگنال را، صرفنظر از مورد استفاده، قفل کند. وقتی این پیکربندی را فعال میکنید، میتواند باعث عوارض جانبی ناخواسته شود، برای مثال، تراکنشهای همگامسازی را قطع کند و کل نمایشگر را درحالیکه منتظر بافرهای ناقص است منجمد کند.
در حالت AutoSingleLayer، SurfaceFlinger فقط میانگیر یک سطح را در یک فریم بهروز میکند. این حالت به بازیها و دیگر برنامههای تمامصفحه امکان میدهد از
مزایای بافر کردن بدون سیگنال و کاهش لرزش برنامه بهرهمند شوند و درعینحال تحتتأثیر
یخ زدن نمایشگر قرار نگیرند.
تنظیمات حالت AutoSingleLayer
برای Android 13، AutoSingleLayer حالت پیشفرض برای ویژگی بافر بدون سیگنال قفل است. این حالت توسط ویژگی سیستم debug.sf.auto_latch_unsignaled کنترل میشود.
SurfaceFlinger در زمان راهاندازی LatchUnsignaledConfig را میخواند. پیکربندیهای
ممکن عبارتاند از:
LatchUnsignaledConfig::AutoSingleLayerدر این حالت پیشفرض AOSP، SurfaceFlinger اجازه میدهد میانگیرهای بدون سیگنال هنگام بهروزرسانی یک لایه در یک فریم، قفل شوند. بهروزرسانی باید فقط شامل بهروزرسانی میانگیر بدون تراکنشهای همگامسازی یا تغییرات هندسی باشد. بهطور پیشفرض، این حالت
debug.sf.auto_latch_unsignaledرا رویtrueتنظیم میکند.LatchUnsignaledConfig::Disabledاین حالت عملکرد بدون علامت قفل را غیرفعال میکند و فقط تراکنشهای علامتدار را قفل میکند. این حالت همچنین حالت
AutoSingleLayerرا غیرفعال میکند. برای پیکربندی این حالت،debug.sf.latch_unsignaledوdebug.sf.auto_latch_unsignaledرا رویfalseتنظیم کنید.LatchUnsignaledConfig::Alwaysدر این حالت، SurfaceFlinger همه میانگیرها را بدون علامتدهی قفل میکند. برای پیکربندی این حالت،
debug.sf.latch_unsignaledرا رویtrueتنظیم کنید.
آزمایش AutoSingleLayer
برای آزمایش اینکه آیا میانگیری بدون سیگنال قفل شده است یا نه، ردگیریهای زیر را از SurfaceFlinger در Perfetto جستجو کنید:
شکل ۱. ردیابی بافر بدون سیگنال قفلشده در Perfetto