Android 13 में, नए फ़्रेम बफ़र का इस्तेमाल किया जा रहा है. क्लाइंट कंपोज़िशन का डेटा कंपोज़िशन में तब शामिल किया जाता है, जब डिसप्ले रिज़ॉल्यूशन में बदलाव होता है. यह डेटा ऐलोकेशन, SurfaceFlinger से अगले अमान्य साइकल पर किया जाता है समस्या को हल करने में मदद मिलेगी.
रिज़ॉल्यूशन स्विच के दौरान, फ़्रेमबफ़र मैनेजमेंट
इनमें से किसी एक वजह से समाधान में बदलाव होते हैं दो स्थितियां:
कोई हॉटप्लग इवेंट, हार्डवेयर कंपोज़र (एचडब्ल्यूसी) की ओर से शुरू किया गया, जो किसी एक बाहरी से स्वैप करने पर होता है किसी दूसरे बाहरी डिसप्ले पर डिसप्ले करना, जिसका डिफ़ॉल्ट रिज़ॉल्यूशन अलग हो.
हॉटप्लग इवेंट के दौरान, पुराने फ़्रेमबफ़र के हैंडल रिलीज़ किए जाते हैं जब पुराना डिसप्ले डेटा हटा दिया जाता है.
SurfaceFlinger में दिखाया जाने वाला डिसप्ले मोड स्विच. यह तब होता है, जब जब उपयोगकर्ता उपयोगकर्ता सेटिंग की मदद से रिज़ॉल्यूशन बदलता है, या कोई ऐप्लिकेशन,
preferredDisplayModeId
का इस्तेमाल करके रिज़ॉल्यूशन बदल देता है.डिसप्ले मोड स्विच के दौरान, मौजूदा क्लाइंट फ़्रेमबफ़र को हैंडल किया जाता है
setActiveConfig
को कॉल करने से पहले SurfaceFlinger ने ऐप्लिकेशन रिलीज़ किए याsetActiveConfigWithConstraints
.
ऐसे डिवाइसों पर विनाशकारी समस्याओं से बचने के लिए, जैसे कि मेमोरी फ़्रैगमेंटेशन पुराने और नए फ़्रेमबफ़र के लिए काफ़ी मेमोरी सुरक्षित नहीं रखते, यह ज़रूरी है कि एचडब्ल्यूसी पुराने फ़्रेमबफ़र का इस्तेमाल करना बंद कर दे और इन फ़्रेम बफ़र को हैंडल करता है, जैसा कि नीचे दिए गए मामलों में दिखाया गया है:
हॉटप्लग इवेंट के लिए,
onHotplug
को कॉल करने से ठीक पहले.मोड स्विच करने के लिए, कॉल करने के तुरंत बाद
setActiveConfig
पर जाएं याsetActiveConfigWithConstraints
.
हैंडल को रिलीज़ करने से, फ़्रेमबफ़र मेमोरी को पूरी तरह से हटाया जा सकता है SurfaceFlinger में किए गए नए फ़्रेमबफ़र के बंटवारे से पहले अमान्य होने पर, अगले साइकल में नहीं.
फ़्रेम बफ़र मैनेजमेंट के लिए सुझाव
अगर एचडब्ल्यूसी समय पर पुराने फ़्रेमबफ़र पर हैंडल रिलीज़ नहीं करता, तो नया फ़्रेमबफ़र आवंटन, पुराने फ़्रेमबफ़र से पहले पूरा होता है डील का स्थान. यह नया बजट असाइन करने में समस्या आ सकती है. इससे समस्याएं पैदा हो सकती हैं फ़्रैगमेंटेशन या अन्य समस्याओं की वजह से ऐसा हो सकता है. इससे भी खराब, अगर HWT इन हैंडल को रिलीज़ नहीं करता है, तो मेमोरी लीक होने की वजह से होता है.
बजट के बंटवारे में किसी भी तरह की रुकावट से बचने के लिए, यह तरीका अपनाएं:
अगर एचडब्ल्यूसी को पुराने क्लाइंट फ़्रेमबफ़र का इस्तेमाल तब तक जारी रखना है, जब तक क्लाइंट फ़्रेम बफ़र उपलब्ध कराए जाते हैं, तो ज़रूरी है कि ज़रूरत के मुताबिक मेमोरी रिज़र्व रखी जाए दोनों के लिए एक जैसा अनुभव देगा. एल्गोरिदम की मदद से बनाया गया है.
अलग-अलग फ़्रेम बफ़र के लिए, अलग से एक मेमोरी पूल असाइन करें ग्राफ़िक बफ़र मेमोरी का बचा हुआ हिस्सा. यह इसलिए ज़रूरी है, क्योंकि साथ ही, तीसरे पक्ष की प्रोसेस ग्राफ़िक मेमोरी को असाइन करने की कोशिश की जाती है. अगर एक ही ग्राफ़िक मेमोरी पूल है का इस्तेमाल फ़्रेम बफ़र के साथ किया जाता है और अगर ग्राफ़िक मेमोरी भर गई है, तो तीसरे पक्ष प्रोसेस, फ़्रेमबफ़र के ज़रिए पहले असाइन की गई ग्राफ़िक मेमोरी का इस्तेमाल कर सकती है, इस तरह, फ़्रेमबफ़र फिर से असाइन करने के लिए मेमोरी में कमी आ जाती है या इसकी वजह से फ़्रैगमेंटिंग की जा सकती है.
फ़्रेम बफ़र मैनेजमेंट की जांच करें
OEM को यह सलाह दी जाती है कि वे सभी क्लाइंट फ़्रेमबफ़र मेमोरी मैनेजमेंट के लिए, जांच कर लें उसके डिवाइस के रिज़ॉल्यूशन को बदलने की सुविधा का इस्तेमाल करने के बारे में यहां बताया गया है:
हॉटप्लग इवेंट के लिए, दो अलग-अलग डिसप्ले को अनप्लग करके फिर से कनेक्ट करें में सहायता मिलती है.
मोड स्विच करने के लिए,
ModeSwitchingTestActivity
सीटीएस का इस्तेमाल करें फ़्रेमबफ़र मेमोरी के काम करने के तरीके की जांच के लिए, मोड स्विच शुरू करने के लिए पुष्टि करने वाला टेस्ट. इस टेस्ट से, विज़ुअल तौर पर उन समस्याओं की पहचान की जा सकती है जिनका पता लगाना मुश्किल होता है प्रोग्रामेटिक रूप से.