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