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

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

قبل الإصدار 13 من نظام التشغيل Android، يتيح العلامة debug.sf.latch_unsignaled في مشروع Android المفتوح المصدر (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