بدءًا من Android 13، يخصّص النظام مخازن مؤقتة جديدة للإطارات ، تُستخدَم أثناء إنشاء العميل، كلما تغيّرت دقة العرض. تُجري خدمة SurfaceFlinger عملية التخصيص هذه في دورة إبطال الصلاحية التالية بعد تغيير الدقة.
إدارة المخزن المؤقت للإطارات أثناء تبديل الدقة
تحدث تغييرات الدقة لأحد السيناريوهَين التاليَين:
حدث توصيل وفصل سريع، بدأه مكوِّن Hardware Composer (HWC)، ويحدث عند التبديل من شاشة عرض خارجية إلى شاشة عرض خارجية مختلفة بدقة تلقائية مختلفة.
أثناء حدث التوصيل والفصل السريع، يحرّر مكوِّن HWC مقابض المخازن المؤقتة القديمة للإطارات عند إلغاء تخصيص بيانات شاشة العرض القديمة.
تبديل وضع شاشة العرض الذي بدأته خدمة SurfaceFlinger، ويحدث عند تغيير الدقة باستخدام إعدادات المستخدم أو عندما يغيّر أحد التطبيقات الدقة باستخدام
preferredDisplayModeId.أثناء تبديل وضع شاشة العرض، تحرّر خدمة SurfaceFlinger مقابض المخازن المؤقتة الحالية للإطارات الخاصة بالعميل قبل استدعاء
setActiveConfigأوsetActiveConfigWithConstraints.
لمنع حدوث مشاكل كارثية، مثل تجزئة الذاكرة على الأجهزة التي لا تتوفّر فيها ذاكرة كافية للمخزن المؤقت للإطارات، يجب أن يحرّر مكوِّن HWC مقابض المخازن المؤقتة القديمة للإطارات. ويكون ذلك بالغ الأهمية في الحالات التالية:
بالنسبة إلى أحداث التوصيل والفصل السريع، مباشرةً قبل استدعاء
onHotplug.بالنسبة إلى عمليات تبديل الوضع، مباشرةً بعد استدعاء
setActiveConfigأوsetActiveConfigWithConstraints.
يسمح تحرير المقابض بإلغاء تخصيص ذاكرة المخزن المؤقت للإطارات بالكامل قبل أن تخصّص خدمة SurfaceFlinger مخازن مؤقتة جديدة للإطارات أثناء دورة إبطال الصلاحية التالية.
اقتراحات لإدارة المخزن المؤقت للإطارات
إذا لم يحرّر مكوِّن HWC مقابض المخازن المؤقتة القديمة للإطارات في الوقت المناسب، يحدث تخصيص مخزن مؤقت جديد للإطارات قبل إلغاء تخصيص المخزن المؤقت القديم للإطارات. ويمكن أن يؤدي ذلك إلى حدوث مشاكل كارثية عندما يفشل التخصيص الجديد بسبب التجزئة أو مشاكل أخرى. والأسوأ من ذلك، إذا لم يحرّر مكوِّن HWC هذه المقابض على الإطلاق، يمكن أن يحدث تسرّب في الذاكرة.
لتجنُّب حالات فشل التخصيص الكارثية، اتّبِع الاقتراحات التالية:
إذا كان مكوِّن HWC بحاجة إلى مواصلة استخدام المخازن المؤقتة القديمة للإطارات الخاصة بالعميل إلى أن يتم توفير مخازن مؤقتة جديدة للإطارات الخاصة بالعميل، من المهم حجز ذاكرة كافية لكل من المخازن المؤقتة القديمة والجديدة للإطارات، وربما تشغيل خوارزميات إلغاء التجزئة على مساحة ذاكرة المخزن المؤقت للإطارات.
خصِّص مجموعة ذاكرة مخصّصة للمخازن المؤقتة للإطارات منفصلة عن بقية ذاكرة المخزن المؤقت للرسومات. هذا مهم لأنّ عملية تابعة لجهة خارجية قد تحاول تخصيص ذاكرة الرسومات بين إلغاء تخصيص المخزن المؤقت للإطارات وإعادة تخصيصه. إذا كان المخزن المؤقت للإطارات يستخدم مجموعة ذاكرة الرسومات نفسها وإذا كانت ذاكرة الرسومات ممتلئة، يمكن أن تشغل العملية التابعة لجهة خارجية الذاكرة التي سبق أن خصّصها مخزن مؤقت للإطارات. ويمكن أن يؤدي ذلك إلى عدم توفّر ذاكرة كافية لإعادة تخصيص المخزن المؤقت للإطارات أو تجزئة الذاكرة.
اختبار إدارة المخزن المؤقت للإطارات
يُنصح مصنّعو المعدات الأصلية باختبار الإدارة السليمة لذاكرة المخزن المؤقت للإطارات الخاصة بالعميل على مستوى عمليات تبديل الدقة لأجهزتهم، كما هو موضّح أدناه:
بالنسبة إلى أحداث التوصيل والفصل السريع، افصل شاشتَي عرض مختلفتَين بدقتَين مختلفتَين وأعِد توصيلهما.
بالنسبة إلى عمليات تبديل الوضع، استخدِم اختبار
ModeSwitchingTestActivityCTS Verifier لبدء تبديل الوضع من أجل اختبار سلوك ذاكرة المخزن المؤقت للإطارات. يمكن أن يحدّد هذا الاختبار بصريًا المشاكل التي يصعُب رصدها برمجيًا.