مستوى سرعة الإطار

مكتبة Android Frame Pacing، المعروفة أيضًا باسم Swappy، هي جزء من حزمة SDK لألعاب Android. ويساعد هذا الإصدار ألعاب OpenGL وVulkan في تحقيق عرض سلس ومعدل عرض اللقطات الصحيح على Android.

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

  • تخزين الإطارات السابقة مؤقتًا داخل التطبيق
  • رصد عمليات إرسال اللقطات المتأخرة
  • مواصلة عرض الإطار الحالي عند رصد إطار متأخر

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

تؤدي مكتبة "معدّل عرض اللقطات" المهام التالية:

  • تعويض عن التوقفات المفاجئة بسبب قصر مدة عرض اللقطات في اللعبة
    • تُضيف الطوابع الزمنية للعرض التقديمي حتى يتم عرض اللقطات في الوقت المحدّد وليس مبكرًا.
    • يستخدم إضافات الطوابع الزمنية للعروض التقديمية EGL_ANDROID_presentation_time وVK_GOOGLE_display_timing.
  • يستخدم هذا الخيار حدودًا لمزامنة اللقطات الطويلة التي تؤدي إلى حدوث تقطُّع وتأخير.
    • تحقِّق هذه الميزة من توفُّر وقت كافٍ للتطبيق، ما يسمح لقناة العرض بالاستجابة بشكلٍ أفضل بدلاً من السماح بزيادة الضغط.
    • يستخدم حواجز المزامنة (EGL_KHR_fence_sync وVkFence).
  • اختيار معدّل إعادة تحميل لتوفير مرونة وعرض سلس، إذا كان جهازك يتيح معدّلات إعادة تحميل متعددة
  • تقدِّم إحصاءات لتصحيح الأخطاء وإنشاء الملفات الشخصية باستخدام إحصاءات عرض اللقطات.

للتعرّف على كيفية ضبط المكتبة للعمل في أوضاع مختلفة وفقًا لما تحتاجه، اطّلِع على أوضاع التشغيل المتوافقة.

لتنفيذ ذلك باستخدام أداة عرض OpenGL أو أداة عرض Vulkan، يُرجى الاطّلاع على

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحقيق معدّل عرض اللقطات المناسب.

التدخل في عدد اللقطات في الثانية

من خلال التدخل في معدل عرض اللقطات في الثانية (FPS)، يمكن للألعاب الحفاظ على معدّل مناسب لعرض اللقطات باستخدام تغييرات على مستوى المنصة فقط وبدون الحاجة إلى اتّخاذ أي إجراء من جانب المطوّرين.

يستخدم تنفيذ التدخل في الحدّ من معدّل عرض اللقطات المكوّنات التالية:

GameManagerService

يحتفظ مكوّن GameManagerService بجميع معلومات وضع اللعبة والتدخل في اللعبة لكل مستخدم ولعبة. يتم تخزين معلومات عدد اللقطات في الثانية في GameManagerService مع معلومات التدخل الأخرى، مثل عامل تقليل الدقة، في تعيين <PACKAGE_NAME, Interventions> لكل ملف شخصي للمستخدم. يتم الوصول إلى معلومات عدد اللقطات في الثانية عند تغيير وضع اللعبة أو تعديل التدخل. إنّ UID فريد لكل PACKAGE_NAME ومستخدم، ويمكن تحويله أيضًا إلى زوج <UID, Frame Rate> لإرساله إلى SurfaceFlinger.

SurfaceFlinger

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

يوضِّح الشكل التالي التفاعل بين GameManagerService وSurfaceFlinger:

التفاعل بين GameManagerService وSurfaceFlinger

الشكل 1: التفاعل بين GameServiceManager وSurfaceFlinger

يحافظ SurfaceFinger على تعيين <UID, Frame Rate> لضبط أولوية جديدة للحد من معدل عرض اللقطات. يكون UID فريدًا بين المستخدمين والألعاب، بحيث يمكن لكل مستخدم على جهاز واحد ضبط معدل عرض اللقطات بشكل مختلف في اللعبة نفسها. لتقليل معدل عرض اللقطات في إحدى الألعاب، يستدعي GameServiceManager‏ SurfaceFlinger لإلغاء معدل عرض اللقطات لملف UID. باستخدام هذه الآلية، يعدّل SurfaceFlinger عملية الربط كلما تغيّر وضع اللعبة أو تم تعديل التدخل. يعالج SurfaceFlinger تغيير عدد اللقطات في الثانية من خلال قفل المخازن المؤقتة وفقًا لذلك.

لفهم المزيد من المعلومات عن الحدّ من عدد اللقطات في الثانية، يُرجى الاطّلاع على مقدّمة عن الحدّ من عدد اللقطات في الثانية.