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

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

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

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

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

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

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

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

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

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

توصيات لإدارة الإطارات المؤقتة

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

لتجنب حالات الفشل الفادحة في التخصيص، اتبع التوصيات التالية:

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

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

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

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

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

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