قفل المخزن المؤقت بدون إرسال إشارة باستخدام AutoSingleLayer

يقدّم Android 13 إعدادًا جديدًا يُسمى AutoSingleLayer لربط المخازن المؤقتة غير المُرسَلة. يتيح هذا الإعداد لـ SurfaceFlinger ربط مخزن مؤقت غير مُرسَل عندما يتم تعديل طبقة واحدة فقط. لا ينطبق ذلك على الحالات التي تحدث على مستوى الطبقات، مثل تغييرات الأشكال الهندسية أو معاملات المزامنة.

في السابق، كان العَلم debug.sf.latch_unsignaled في "مشروع Android مفتوح المصدر" (AOSP) يتيح لـ SurfaceFlinger ربط جميع المخازن المؤقتة غير المُرسَلة، بغض النظر عن حالة الاستخدام. عند تفعيل هذا الإعداد، يمكن أن يؤدي ذلك إلى آثار جانبية غير مرغوب فيها، مثل إيقاف معاملات المزامنة وتجميد الشاشة بأكملها أثناء انتظار المخازن المؤقتة غير المكتملة.

في وضع AutoSingleLayer، لا تعدِّل SurfaceFlinger سوى مخزن مؤقت لسطح واحد في إطار. يتيح هذا الوضع للألعاب والتطبيقات الأخرى التي تعمل في وضع ملء الشاشة الاستفادة من ربط المخازن المؤقتة غير المُرسَلة وتقليل إيقاف مؤقت لعرض واجهة المستخدم للتطبيق مع عدم التأثر بتجميد الشاشة.

إعدادات وضع AutoSingleLayer

في Android 13، يكون AutoSingleLayer هو الوضع التلقائي لميزة ربط المخزن المؤقت غير المُرسَل. يتم التحكّم في هذا الوضع من خلال الـ system property 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:

سجلّ التتبُّع الخاص بالمخزن المؤقت غير المُشار إليه

الشكل 1: تتبُّع لمخزن مؤقت غير مُرسَل تم ربطه في Perfetto