يضيف Android 13 تكوينًا جديدًا يُسمى AutoSingleLayer
لإغلاق المخازن المؤقتة غير المُشار إليها. يتيح هذا التكوين لـ SurfaceFlinger إغلاق مخزن مؤقت غير مشار إليه عند تحديث طبقة واحدة فقط، وليس للحالات التي تحدث عبر الطبقات، مثل التغييرات الهندسية أو معاملات المزامنة.
قبل Android 13، كانت العلامة debug.sf.latch_unsignaled
في AOSP تسمح لـ SurfaceFlinger بإغلاق جميع المخازن المؤقتة غير المُشار إليها، بغض النظر عن حالة الاستخدام. عند تمكين هذا التكوين، تكون هناك تأثيرات جانبية غير مرغوب فيها، مثل قطع معاملات المزامنة وتجميد العرض بالكامل أثناء انتظار المخازن المؤقتة غير المكتملة.
باستخدام وضع AutoSingleLayer
، يتم تحديث المخزن المؤقت لسطح واحد فقط في الإطار. يمكّن هذا الوضع الألعاب وتطبيقات ملء الشاشة الأخرى من الاستفادة من إغلاق المخازن المؤقتة غير المُشار إليها وتقليل التطبيقات غير المرغوب فيها مع عدم التأثر بتجميد العرض.
إعدادات وضع AutoSingleLayer
في Android 13، يعد AutoSingleLayer
هو الوضع الافتراضي لميزة المخزن المؤقت غير المُشار إليه. يتم التحكم في هذا الوضع من خلال خاصية النظام debug.sf.auto_latch_unsignaled
.
يقرأ SurfaceFlinger 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. أثر المخزن المؤقت غير المُغلق في Perfetto