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