Android 13 में, बिना सिग्नल वाले बफ़र को लैच करने के लिए, AutoSingleLayer नाम का नया कॉन्फ़िगरेशन पेश किया गया है. इस कॉन्फ़िगरेशन की मदद से, SurfaceFlinger सिर्फ़ एक लेयर अपडेट होने पर, बिना सिग्नल वाले बफ़र को लैच कर सकता है.
यह उन मामलों पर लागू नहीं होता जो लेयर में होते हैं. उदाहरण के लिए, ज्यामिति में बदलाव या सिंक किए गए लेन-देन.
इससे पहले, Android Open Source Project (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 में, बिना सिग्नल वाले बफ़र का निशान