Android 13 में, बिना सिग्नल वाले बफ़र को लॉक करने के लिए, AutoSingleLayer
नाम का नया कॉन्फ़िगरेशन जोड़ा गया है. इस कॉन्फ़िगरेशन की मदद से, SurfaceFlinger ऐसे बफ़र को लैच कर सकता है जिसके लिए सिग्नल नहीं मिला है. ऐसा सिर्फ़ तब होता है, जब एक लेयर अपडेट हो रही हो. यह उन मामलों में नहीं होता जो लेयर के बीच होते हैं. जैसे, ज्यामिति में बदलाव या सिंक ट्रांज़ैक्शन.
Android 13 से पहले, AOSP में मौजूद debug.sf.latch_unsignaled
फ़्लैग की मदद से 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
यह देखने के लिए कि बफ़र को बिना किसी सूचना के लॉक किया गया है या नहीं, Perfetto में SurfaceFlinger से मिले इन ट्रेस को देखें:
पहली इमेज. Perfetto में, बिना सिग्नल वाले बफ़र का निशान