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

مكتبة نظام ترتيب الإطارات لنظام التشغيل Android، المعروفة أيضًا باسم Suppy، هي جزء من حزمة تطوير البرامج (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).
  • اختيار معدل التحديث لتوفير المرونة وعرض سلس، إذا كان جهازك يتيح معدلات تحديث متعددة
  • توفير إحصاءات لتصحيح الأخطاء وإنشاء الملفات الشخصية باستخدام frame والإحصاءات.

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

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

لمعرفة المزيد من المعلومات، يمكنك الاطّلاع على تحقيق سرعة مناسبة للإطار.

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

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

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

خدمة GameManagerService

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

حذاء SurfaceFlinger

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

يصف الشكل التالي التفاعل بين GameManagerService وSurfaceFlinger:

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

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

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

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