Android 13 में, बिना सिग्नल वाले बफ़र को लैच करने के लिए, AutoSingleLayer नाम का नया कॉन्फ़िगरेशन पेश किया गया है. इस कॉन्फ़िगरेशन की मदद से, SurfaceFlinger को ऐसे बफ़र को लॉक करने की अनुमति मिलती है जिसे सिग्नल नहीं मिला है. ऐसा तब होता है, जब सिर्फ़ एक लेयर अपडेट हो रही हो.
यह उन मामलों पर लागू नहीं होता जो लेयर में होते हैं. उदाहरण के लिए, ज्यामिति में बदलाव या सिंक किए गए लेन-देन.
इससे पहले, Android ओपन सोर्स प्रोजेक्ट (AOSP) में मौजूद debug.sf.latch_unsignaled फ़्लैग की मदद से, SurfaceFlinger सभी अनसिग्नल बफ़र को लैच कर सकता था. भले ही, इस्तेमाल का तरीका कुछ भी हो. इस कॉन्फ़िगरेशन को चालू करने पर, कुछ समस्याएं हो सकती हैं. जैसे, सिंक किए गए लेन-देन में रुकावट आना और बफ़र पूरा न होने पर, पूरी डिसप्ले फ़्रीज़ हो जाना.
AutoSingleLayer मोड में, SurfaceFlinger एक फ़्रेम में सिर्फ़ एक बफ़र को अपडेट करता है. इस मोड की मदद से, गेम और अन्य फ़ुलस्क्रीन ऐप्लिकेशन को बिना सिग्नल वाले बफ़र को लैच करने और ऐप्लिकेशन के धीमे चलने की समस्या को कम करने का फ़ायदा मिलता है. साथ ही, डिसप्ले फ़्रीज़ होने की समस्या से भी इन पर कोई असर नहीं पड़ता.
AutoSingleLayer मोड की सेटिंग
Android 13 के लिए, लैच अनसिग्नल बफ़र सुविधा का डिफ़ॉल्ट मोड AutoSingleLayer है. इस मोड को सिस्टम प्रॉपर्टी debug.sf.auto_latch_unsignaled कंट्रोल करती है.
SurfaceFlinger, बूट होने पर LatchUnsignaledConfig को पढ़ता है. ये कॉन्फ़िगरेशन हो सकते हैं:
LatchUnsignaledConfig::AutoSingleLayerAOSP के इस डिफ़ॉल्ट मोड में, 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पर सेट करें.
Test AutoSingleLayer
यह जांच करने के लिए कि बफ़र को बिना किसी सिग्नल के लैच किया गया है या नहीं, Perfetto में SurfaceFlinger से मिले इन ट्रेस को देखें:
पहली इमेज. Perfetto में, बिना सिग्नल वाले बफ़र का ट्रेस