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::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
पर सेट करें.
Test AutoSingleLayer
यह देखने के लिए कि बफ़र को बिना किसी सूचना के लॉक किया गया है या नहीं, Perfetto में SurfaceFlinger से मिले इन ट्रेस को देखें:
पहली इमेज. Perfetto में, बिना सिग्नल वाले बफ़र का निशान