يضيف Android 13 تكوينًا جديدًا يسمى AutoSingleLayer
لإغلاق المخازن المؤقتة غير المُشار إليها. يسمح هذا التكوين لـ SurfaceFlinger بإغلاق المخزن المؤقت بدون إشارة عند تحديث طبقة واحدة فقط ، وليس للحالات التي تحدث عبر الطبقات ، مثل التغييرات الهندسية أو معاملات المزامنة.
قبل Android 13 ، تتيح علامة debug.sf.latch_unsignaled
في AOSP لـ SurfaceFlinger تثبيت جميع المخازن المؤقتة غير المُشار إليها ، بغض النظر عن حالة الاستخدام. عند تمكين هذا التكوين ، تكون هناك آثار جانبية غير مرغوب فيها ، مثل كسر معاملات المزامنة وتجميد الشاشة بالكامل أثناء انتظار وجود مخازن مؤقتة غير مكتملة.
باستخدام وضع AutoSingleLayer
، يتم تحديث المخزن المؤقت لسطح واحد فقط في إطار. يتيح هذا الوضع للألعاب وتطبيقات ملء الشاشة الأخرى الاستفادة من إغلاق المخازن المؤقتة غير المُشار إليها وتقليل الرسائل غير المرغوب فيها في التطبيق مع عدم التأثر بتجميد الشاشة.
إعدادات وضع AutoSingleLayer
في Android 13 ، يعد AutoSingleLayer
هو الوضع الافتراضي لميزة المخزن المؤقت للمزلاج غير المُشار إليه. يتم التحكم في هذا الوضع بواسطة خاصية النظام debug.sf.auto_latch_unsignaled
.
يقرأ LatchUnsignaledConfig
عند التمهيد. فيما يلي التكوينات الممكنة:
LatchUnsignaledConfig::AutoSingleLayer
في هذا الوضع الافتراضي لـ AOSP ، يُسمح بإغلاق المخازن المؤقتة غير المُشار إليها عند تحديث طبقة واحدة في إطار ، ويتضمن التحديث تحديثًا للمخزن المؤقت فقط بدون معاملات مزامنة أو تغييرات هندسية. في هذا الوضع ، يتم تعيين
debug.sf.auto_latch_unsignaled
على "true
" افتراضيًا.LatchUnsignaledConfig::Disabled
يقوم هذا الوضع بتعطيل سلوك المزلاج غير المُشار إليه ولا يقوم إلا بإغلاق المعاملات التي تمت الإشارة إليها. يقوم هذا الوضع أيضًا بتعطيل وضع
AutoSingleLayer
. لتكوين هذا الوضع ، اضبطdebug.sf.latch_unsignaled
وdebug.sf.auto_latch_unsignaled
علىfalse
.LatchUnsignaledConfig::Always
في هذا الوضع ، يتم إغلاق جميع المخازن المؤقتة بدون إشارة. لتكوين هذا الوضع ، اضبط
debug.sf.latch_unsignaled
علىtrue
.
اختبار AutoSingleLayer
لاختبار ما إذا كان المخزن المؤقت مغلقًا بدون إشارة ، ابحث عن الآثار التالية من SurfaceFlinger في Perfetto :
الشكل 1. أثر لمخزن مؤقت غير مؤطر مغلق في بيرفيتو