إدارة مخزن الإطارات المؤقت للعميل

بدءًا من Android 13 ، يتم تخصيص الإطارات المؤقتة الجديدة المستخدمة أثناء تكوين العميل كلما تغيرت دقة العرض. يتم تنفيذ هذا التخصيص بواسطة SurfaceFlinger في دورة الإبطال التالية بعد تغيير الدقة.

إدارة Framebuffer أثناء تبديل القرار

تحدث تغييرات الدقة بسبب أحد السيناريوهين التاليين:

  • حدث hotplug ، بدأ بواسطة Hardware Composer (HWC) ، ويحدث عند التبديل من شاشة خارجية إلى شاشة خارجية مختلفة ذات دقة افتراضية مختلفة.

    أثناء حدث hotplug ، يتم تحرير مقابض الإطارات المخزنة المؤقتة القديمة عند إلغاء تخصيص بيانات العرض القديمة.

  • يتم تشغيل تبديل وضع العرض بواسطة SurfaceFlinger ، والذي يحدث عندما يغير المستخدم الدقة باستخدام إعدادات المستخدم ، أو عندما يغير أحد التطبيقات الدقة باستخدام preferredDisplayModeId .

    أثناء تبديل وضع العرض ، يتم تحرير المقابض الخاصة بمخزونات الإطارات المؤقتة الخاصة بالعميل بواسطة SurfaceFlinger قبل استدعاء setActiveConfig أو setActiveConfigWithConstraints .

لتجنب المشاكل الكارثية ، مثل تجزئة الذاكرة ، على الأجهزة التي لا تحتفظ بذاكرة كافية لمخزنات الإطارات المؤقتة القديمة والجديدة ، من الأهمية بمكان أن تتوقف HWC عن استخدام الإطارات المؤقتة القديمة وتحرر أي مقابض لهذه الإطارات كما هو موضح في الحالات التالية:

يسمح تحرير المقابض بإلغاء تخصيص ذاكرة التخزين المؤقت للإطار بالكامل قبل تخصيص إطارات الإطارات المؤقتة الجديدة التي يقوم بها SurfaceFlinger أثناء دورة الإبطال التالية.

توصيات لإدارة الإطارات الاحتياطية

إذا لم يقم HWC بإصدار مقابض إلى الإطارات المؤقتة القديمة في الوقت المناسب ، فسيتم تخصيص الإطار المؤقت الجديد قبل إلغاء تخصيص الإطارات الاحتياطية القديمة. يمكن أن يسبب هذا مشاكل كارثية عند فشل التخصيص الجديد بسبب التجزئة أو مشاكل أخرى. والأسوأ من ذلك ، إذا لم تصدر HWC هذه المقابض على الإطلاق ، فقد يحدث تسرب للذاكرة.

لتجنب الإخفاقات الكارثية في التخصيص ، اتبع هذه التوصيات:

  • إذا احتاج HWC إلى الاستمرار في استخدام مخزن الإطارات المؤقت للعميل القديم حتى يتم توفير مخزن الإطارات المؤقت للعميل الجديد ، فمن الأهمية بمكان الاحتفاظ بذاكرة كافية لكل من الإطارات المخزنة القديمة والجديدة ، وربما تشغيل خوارزميات إلغاء التجزئة على مساحة ذاكرة الإطارات المؤقتة.

  • قم بتخصيص مجموعة ذاكرة مخصصة لمخزن الإطارات المؤقت المنفصل عن باقي ذاكرة المخزن المؤقت للرسومات. هذا مهم لأنه بين إلغاء تخصيص وإعادة تخصيص الإطارات المؤقتة ، يمكن لعملية جهة خارجية محاولة تخصيص ذاكرة رسومات. إذا تم استخدام نفس تجمع ذاكرة الرسومات بواسطة المخزن المؤقت للإطار وإذا كانت ذاكرة الرسومات ممتلئة ، يمكن لعملية الجهة الخارجية أن تشغل ذاكرة الرسومات التي تم تخصيصها مسبقًا بواسطة مخزن الإطارات المؤقت ، مما يترك ذاكرة غير كافية لإعادة تخصيص الإطارات المخزنة أو ربما تجزئة مساحة الذاكرة .

اختبار إدارة الإطارات الاحتياطية

يُنصح مصنعي المعدات الأصلية باختبار إدارة ذاكرة التخزين المؤقت للإطار للعميل بشكل مناسب عبر محولات الدقة الخاصة بأجهزتهم ، على النحو التالي:

  • بالنسبة إلى أحداث hotplug ، ما عليك سوى فصل وإعادة توصيل شاشتين مختلفتين بدقة مختلفة.

  • بالنسبة لمفاتيح الوضع ، استخدم اختبار ModeSwitchingTestActivity CTS Verifier لبدء تبديل الوضع لاختبار سلوك ذاكرة التخزين المؤقت للإطار. يمكن لهذا الاختبار تحديد المشكلات التي يصعب اكتشافها برمجيًا بصريًا.