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

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

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

निम्न दो परिदृश्यों में से किसी एक के कारण रिज़ॉल्यूशन परिवर्तन होते हैं:

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

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

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

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

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

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

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

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

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

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

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

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

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

फ़्रेमबफ़र प्रबंधन का परीक्षण करें

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

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

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