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

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

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

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

  • حدث Hotplug، يبدأه مُنشئ الأجهزة (HWC)، والذي يحدث عند التبديل من جهاز خارجي الشاشة على شاشة خارجية مختلفة ذات درجة دقة تلقائية مختلفة.

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

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

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

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

  • بالنسبة إلى أحداث مقبس الاتصال السريع، قبل الاتصال بالرقم onHotplug مباشرةً.

  • بالنسبة إلى مفاتيح التبديل بين الأوضاع، مباشرةً بعد الاتصال بـ setActiveConfig أو setActiveConfigWithConstraints

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

اقتراحات بشأن إدارة المخزن المؤقت للإطارات

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

لتجنُّب حدوث إخفاقات كارثية في عملية التخصيص، اتّبِع الاقتراحات التالية:

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

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

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

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

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

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