AutoSingleLayer के साथ असंकेतित बफर लैचिंग

एंड्रॉइड 13 बिना सिग्नल वाले बफ़र्स को लैच करने के लिए AutoSingleLayer नामक एक नया कॉन्फ़िगरेशन जोड़ता है। यह कॉन्फ़िगरेशन सरफेसफ्लिंगर को एक बिना सिग्नल वाले बफर को पकड़ने की सुविधा देता है जब केवल एक परत अपडेट हो रही हो, न कि उन मामलों के लिए जो परतों में होते हैं, जैसे कि ज्यामिति परिवर्तन या सिंक लेनदेन।

Android 13 से पहले, AOSP में debug.sf.latch_unsignaled फ़्लैग, SurfaceFlinger को उपयोग के मामले की परवाह किए बिना, सभी बिना सिग्नल वाले बफ़र्स को लैच करने देता है। जब यह कॉन्फ़िगरेशन सक्षम किया जाता है, तो अवांछित दुष्प्रभाव होते हैं, जैसे सिंक लेनदेन को तोड़ना और अपूर्ण बफ़र्स पर प्रतीक्षा करते समय पूरे डिस्प्ले को फ्रीज करना।

AutoSingleLayer मोड के साथ, एक फ्रेम में केवल एक ही सतह का बफर अपडेट किया जाता है। यह मोड गेम और अन्य फ़ुलस्क्रीन ऐप्स को बिना सिग्नल वाले बफ़र्स को लैच करने और डिस्प्ले फ़्रीज़ से अप्रभावित रहते हुए ऐप जंक को कम करने का लाभ प्राप्त करने में सक्षम बनाता है।

ऑटोसिंगललेयर मोड सेटिंग्स

एंड्रॉइड 13 में, AutoSingleLayer लैच अनसिग्नल्ड बफर सुविधा के लिए डिफ़ॉल्ट मोड है। इस मोड को सिस्टम प्रॉपर्टी debug.sf.auto_latch_unsignaled द्वारा नियंत्रित किया जाता है।

SurfaceFlinger बूट पर LatchUnsignaledConfig पढ़ता है। यहां संभावित कॉन्फ़िगरेशन हैं:

  • LatchUnsignaledConfig::AutoSingleLayer

    इस एओएसपी डिफॉल्ट मोड में, बिना सिग्नल वाले बफ़र्स को लैच करने की अनुमति तब दी जाती है जब एक फ्रेम में एक परत को अपडेट किया जाता है, और अपडेट में केवल एक बफ़र अपडेट शामिल होता है जिसमें कोई सिंक लेनदेन या ज्यामिति परिवर्तन नहीं होता है। इस मोड में, 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 परीक्षण करें

यह जांचने के लिए कि क्या बफ़र को बिना सिग्नल के लैच किया गया है, पर्फ़ेटो में सरफेसफ्लिंगर से निम्नलिखित निशान देखें:

बिना सिग्नल वाले बफ़र का पता लगाया गया

चित्र 1. पर्फ़ेटो में एक कुंडी रहित सिग्नल रहित बफ़र का निशान