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 में, लॉच किए गए बिना सिग्नल वाले बफ़र का ट्रेस