क्लाइंट फ़्रेमबफ़र प्रबंधन

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

रिज़ॉल्यूशन स्विच के दौरान फ़्रेमबफ़र प्रबंधन

निम्न दो परिदृश्यों में से एक के कारण समाधान परिवर्तन होते हैं:

  • हार्डवेयर कम्पोज़र (HWC) द्वारा शुरू किया गया एक हॉटप्लग इवेंट , जो तब होता है जब एक बाहरी डिस्प्ले से दूसरे बाहरी डिस्प्ले में स्वैप किया जाता है जिसमें एक अलग डिफ़ॉल्ट रिज़ॉल्यूशन होता है।

    हॉटप्लग इवेंट के दौरान, पुराने फ्रेमबफ़र्स के हैंडल तब रिलीज़ होते हैं जब पुराने डिस्प्ले डेटा को हटा दिया जाता है।

  • सर्फेसफ्लिंगर द्वारा शुरू किया गया एक डिस्प्ले मोड स्विच, जो तब होता है जब उपयोगकर्ता उपयोगकर्ता सेटिंग्स के साथ रिज़ॉल्यूशन बदलता है, या कोई ऐप preferredDisplayModeId डिस्प्लेमोडआईड के साथ रिज़ॉल्यूशन बदलता है।

    डिस्प्ले मोड स्विच के दौरान, मौजूदा क्लाइंट फ्रेमबफर के हैंडल को सेटएक्टिव कॉन्फिग या setActiveConfigWithConstraints setActiveConfig को कॉल करने से पहले सर्फेसफ्लिंगर द्वारा जारी किया जाता है।

पुराने और नए फ्रेमबफ़र्स के लिए पर्याप्त मेमोरी आरक्षित नहीं करने वाले उपकरणों पर स्मृति विखंडन जैसी विनाशकारी समस्याओं से बचने के लिए, यह महत्वपूर्ण है कि HWC पुराने फ्रेमबफ़र्स का उपयोग करना बंद कर दे और इन फ़्रेमबफ़र्स को कोई भी हैंडल जारी करे जैसा कि निम्नलिखित मामलों में दिखाया गया है:

  • हॉटप्लग ईवेंट के लिए, onHotplug पर कॉल करने से ठीक पहले।

  • मोड स्विच के लिए, कॉल के तुरंत बाद setActiveConfig या setActiveConfigWithConstraints पर कॉल करें।

हैंडल जारी करने से फ़्रेमबफ़र मेमोरी को नए फ़्रेमबफ़र्स के आवंटन से पहले पूरी तरह से हटा दिया जा सकता है जो कि सर्फेसफ्लिंगर अगले अमान्य चक्र के दौरान करता है।

फ़्रेमबफ़र प्रबंधन के लिए अनुशंसाएँ

यदि एचडब्ल्यूसी समय पर पुराने फ्रेमबफर को हैंडल जारी नहीं करता है, तो नया फ्रेमबफर आवंटन पुराने फ्रेमबफर डीलोकेशन से पहले होता है। विखंडन या अन्य मुद्दों के कारण नया आवंटन विफल होने पर यह भयावह समस्या पैदा कर सकता है। इससे भी बदतर, अगर एचडब्ल्यूसी इन हैंडल को बिल्कुल भी जारी नहीं करता है, तो स्मृति रिसाव हो सकता है।

विपत्तिपूर्ण आवंटन विफलताओं से बचने के लिए, इन अनुशंसाओं का पालन करें:

  • यदि HWC को नए क्लाइंट फ़्रेमबफ़र्स प्रदान किए जाने तक पुराने क्लाइंट फ़्रेमबफ़र्स का उपयोग जारी रखने की आवश्यकता है, तो पुराने और नए फ़्रेमबफ़र्स दोनों के लिए पर्याप्त मेमोरी आरक्षित करना महत्वपूर्ण है, और संभवतः फ़्रेमबफ़र मेमोरी स्पेस पर डीफ़्रेग्मेंटेशन एल्गोरिदम चलाना।

  • फ्रेमबफ़र्स के लिए एक समर्पित मेमोरी पूल आवंटित करें जो बाकी ग्राफिक बफर मेमोरी से अलग है। यह महत्वपूर्ण है क्योंकि फ़्रेमबफ़र्स के डीलोकेशन और पुन: आवंटन के बीच, एक तृतीय-पक्ष प्रक्रिया ग्राफिक्स मेमोरी आवंटित करने का प्रयास कर सकती है। यदि फ़्रेमबफ़र द्वारा समान ग्राफ़िक्स मेमोरी पूल का उपयोग किया जाता है और यदि ग्राफ़िक्स मेमोरी भरी हुई है, तो तृतीय-पक्ष प्रक्रिया फ़्रेमबफ़र द्वारा पहले आवंटित की गई ग्राफ़िक्स मेमोरी पर कब्जा कर सकती है, इस प्रकार फ़्रेमबफ़र पुनर्वितरण के लिए अपर्याप्त मेमोरी छोड़ सकती है या संभवतः मेमोरी स्पेस को खंडित कर सकती है। .

टेस्ट फ्रेमबफर प्रबंधन

ओईएम को सलाह दी जाती है कि वे अपने डिवाइस के लिए रिजॉल्यूशन स्विच में उचित क्लाइंट फ्रेमबफर मेमोरी प्रबंधन का परीक्षण करें, जिसका वर्णन इस प्रकार है:

  • हॉटप्लग इवेंट के लिए, बस दो अलग-अलग डिस्प्ले को अलग-अलग रिज़ॉल्यूशन के साथ अनप्लग करें और फिर से कनेक्ट करें।

  • मोड स्विच के लिए, फ़्रेमबफ़र मेमोरी व्यवहार के परीक्षण के लिए मोड स्विच आरंभ करने के लिए ModeSwitchingTestActivity CTS सत्यापनकर्ता परीक्षण का उपयोग करें। यह परीक्षण उन समस्याओं की पहचान कर सकता है जिन्हें प्रोग्रामेटिक रूप से पहचानना मुश्किल है।