الجلسات البطيئة (الألعاب فقط)

"الجلسات البطيئة" هي مقياس جديد ضِمن "مؤشرات Android الحيوية" في Google Play Console. الجلسة البطيئة هي الجلسة التي تكون فيها أكثر من 25% من اللقطات بطيئة. وتكون اللقطة بطيئة إذا لم يتم عرضها بعد أقل من 50 ملي ثانية من الإطار (ما يعادل 20 لقطة في الثانية). تشير "مؤشرات Android الحيوية" أيضًا إلى مقياس ثانٍ "للجلسات البطيئة" بهدف 34 ملي ثانية (ما يعادل 30 لقطة في الثانية). تتيح لك ميزة "الجلسات البطيئة" فهم أداء عدد اللقطات في الثانية للعبتك، وتأثير هذا الأداء في سلاسة لعبتك بالنسبة إلى المستخدمين.

وفي الوقت المناسب، سيبدأ Play بإبعاد المستخدمين عن الألعاب التي لا يمكنها تحقيق معدّل 20 لقطة في الثانية على هواتفهم. تجدر الإشارة إلى أنّ "مؤشرات Android الحيوية" تبدأ في رصد عدد اللقطات في الثانية فقط بعد تشغيل لعبتك لمدة دقيقة واحدة.

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

رسومات تشبه الرسم البياني الدائري تعرض عدد اللقطات البطيئة واللقطات غير البطيئة.
الشكل 1. جلسة بطيئة في "مؤشرات Android الحيوية".

كيفية قياس عدد اللقطات في الثانية ورصد اللقطات البطيئة

يوفر أمر dumpsys surfaceflinger timestats في نظام التشغيل Android متوسط عدد اللقطات في الثانية ومشاركة العرض في المدرّج التكراري للتوقيت لجميع الطبقات التي يتم عرضها. وقت مشاركة العرض لإطار هو الفاصل بين الإطار الحالي والإطار السابق الذي يتم رسمه. إليك الخطوات التي يجب اتّباعها لاستخدام الأمر لجمع عدد اللقطات في الثانية في لعبتك:

  1. شغّل الأمر بالعلامات enable وclear لبدء تسجيل المعلومات:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. عند تشغيل اللعبة لمدة كافية، شغِّل الأمر مرة أخرى مع إضافة علامة dump لتفريغ المعلومات:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    توفّر المعلومات التي تم تفريغها إجمالي عدد اللقطات ومدرّجًا لعرض التكرار في جميع الطبقات التي يعرضها SurfaceFlinger. عليك العثور على القسم في لعبتك من خلال الفلترة حسب layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    يمكن حساب بطء عدد اللقطات في الثانية للجلسة بناءً على معلومات كل طبقة.

    على سبيل المثال، نسبة اللقطات البطيئة 20 لقطة في الثانية = (مجموع القيم من 54 إلى 1000 ملي ثانية) / إجمالي اللقطات × 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0
    13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0
    24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0
    36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0
    66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0
    110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0
    150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0
    650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
    

    يتم أيضًا عرض متوسط عدد اللقطات في الثانية لكل طبقة في تقرير التفريغ:

    ...
    averageFPS = 30.179
    ...
    
  3. بعد جمع كل المعلومات، يجب إيقاف الإحصائيات الزمنية باستخدام العلامة disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

أسباب بطء اللقطات والحلول

هناك العديد من الأسباب التي قد تؤدي إلى عرض الإطار أو عرضه لمدة أطول على الشاشة من الهدف الذي حدده المطوّر. قد تكون اللعبة مرتبطة بوحدة المعالجة المركزية (CPU)/وحدة معالجة الرسومات. أو ترتفع درجة حرارة الجهاز أكثر من اللازم ويفعّل حالة حرارية مقيَّدة. وقد يكون هناك عدم تطابق في عدد اللقطات في الثانية في اللعبة ومعدّل إعادة تحميل شاشة الجهاز.

يمكنك استخدام نظام سرعة إطارات Android (Swappy) وVulkan وADPF لمعالجة هذه المشاكل وتحسين أداء لعبتك.

ما هو Suppy؟

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

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

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

كيفية استخدام Squarepy في المشاريع ذات الصلة

يمكنك الاطّلاع على الأدلة التالية لدمج مكتبة Android Frame Pacing في لعبتك:

كيفية استخدام Suppy في محرك لعبة Unity

قامت شركة Unity بدمج ميزة Android Frame Pacing في محرّكها. لتفعيل هذه الميزة في Unity 2019.2 أو إصدار أحدث، ضَع علامة في مربّع الاختيار "تحسين وتيرة الإطار" ضمن إعدادات المشروع > المشغّل > الإعدادات لنظام التشغيل Android > درجة الدقة والعرض التقديمي:

مربّع حوار إعدادات المشروع
الشكل 2. تفعيل سرعة الإطارات في Unity Engine

وبدلاً من ذلك، يمكنك تفعيل خيار "سرعة عرض الإطارات المحسّنة" آليًا في رمزك المنطقي للسماح لتطبيق Unity بتوزيع الإطارات بالتساوي مع تقليل التباين في عدد اللقطات في الثانية، ما يساهم في توفير أسلوب لعب أكثر سلاسة.

كيفية استخدام ميزة Suppy في محرّك الألعاب Unreal

يعمل الإصدار Unreal 4.25 والإصدارات الأحدث على دمج مكتبة Pacing Library (مكتبة لإطار Android) التي تُعد جزءًا من Android Game Development Kit. توضح مقالة Mobile Frame Pacing كيفية تفعيل مكتبة Pacing Library (مكتبة معدّل لإطار Android) وكيفية التحكّم في سرعة الإطار من رمز C++.

ما هو Vulkan؟

Vulkan هي واجهة برمجة تطبيقات حديثة للرسومات الثلاثية الأبعاد ثلاثية الأبعاد تم تصميمها لتقليل التجريد بين أجهزة الرسومات على الأجهزة ولعبتك. Vulkan هي واجهة برمجة التطبيقات الأساسية المنخفضة المستوى للرسومات على نظام التشغيل Android، لتحلّ محلّ OpenGL ES. لا يزال OpenGL ES متوافقًا على Android، ولكنه لم يعُد قيد التطوير النشط للميزات.

توفر Vulkan المزايا التالية التي تفوق OpenGL ES:

  • بنية أكثر كفاءة مع خفض النفقات العامة لوحدة المعالجة المركزية (CPU) في برنامج تشغيل الرسومات
  • استراتيجيات تحسين جديدة لتحسين أداء وحدة المعالجة المركزية (CPU)
  • ميزات رسومات جديدة غير متوفرة في OpenGL ES، مثل واجهات برمجة التطبيقات غير القابلة للربط وتتبُّع الشعاع

كيفية استخدام Vulkan في مشاريع Android الأصلية

يرشدك الدرس التطبيقي بدء استخدام Vulkan على Android خلال عملية إعداد مسار عرض Vulkan ثم عرض مثلث مزخرف ودوار على الشاشة. يمكنك الاستعانة بالدرس التطبيقي حول الترميز للتعرّف على كيفية عرض رسومات لعبتك.

كيفية استخدام Vulkan في محرِّك ألعاب Unity

لتفعيل الاختيار التلقائي للأجهزة على Unity، اتّبِع خطوات ضبط Auto Graphics API.

مربّع حوار إعدادات المشروع
الشكل 3. تفعيل واجهة برمجة التطبيقات Unity Auto Graphics API

وبدلاً من ذلك، يمكنك تفعيل Vulkan يدويًا عن طريق إيقاف Auto Graphics API ووضع Vulkan في الأولوية القصوى في قائمة Graphics APIs. إذا كنت تستخدم Unity 2021.1 أو إصدارًا سابقًا، هذه هي الطريقة الوحيدة لاستخدام Vulkan.

مربّع حوار إعدادات المشروع
الشكل 4. يمكنك اختيار Vulkan يدويًا كواجهة برمجة تطبيقات رئيسية للرسومات في Unity.

يمكنك استخدام المكوّن الإضافي Vkquality Unity لتقديم اقتراحات في وقت إطلاق واجهة برمجة التطبيقات للرسومات لكي تستخدمها لعبتك على أجهزة محددة.

كيفية استخدام Vulkan في محرّك لعبة Unreal

لتفعيل واجهة Vulkan graphics API، انتقِل إلى Project Settings (إعدادات المشروع) > Platforms (الأنظمة الأساسية) > Android > Build (إصدار Android) واختَر Support Vulkan (دعم Vulkan). عند اختيار كل من Support Vulkan وSupport OpenGL ES3.2، يستخدم Unreal أداة Vulkan تلقائيًا. إذا لم يكن الجهاز متوافقًا مع Vulkan، يعود Unreal إلى استخدام OpenGL ES 3.2.

مربّع حوار إعدادات المشروع
الشكل 5. فعِّل Vulkan في Unreal Engine.

إذا كنت تستخدم ميزات Vulkan معيّنة معروفة بأنّها سيئة الأداء على أجهزة معيّنة، يمكنك تخصيص ملف BaseDeviceProfile.ini لاستبعاد تلك الأجهزة. اطّلِع على مقالة تخصيص الملفات الشخصية للأجهزة وقابلية التوسّع في Android للتعرّف على كيفية تخصيص BaseDeviceProfile.ini. وبما أنّ برامج التشغيل الجديدة للأجهزة قد تصلح الأجهزة السيئة المعروفة سابقًا، ننصحك بإبقاء ملف BaseDeviceProfile.ini محدَّثًا للحصول على جميع التحسينات.

ما هو ADPF؟

يعمل إطار عمل Android الديناميكي للأداء (ADPF) على تحسين الألعاب استنادًا إلى ميزات إدارة الوحدات الحرارية ووحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات الديناميكية على Android. ينصب التركيز على الألعاب، إلا أنه يمكنك أيضًا استخدام ميزات تطبيقات أخرى ذات أداء مكثف.

أمّا بروتوكول ADPF، فهو مجموعة من واجهات برمجة التطبيقات التي تتيح للألعاب والتطبيقات ذات الأداء المكثف التفاعل بشكل مباشر باستخدام أنظمة الطاقة والحرارة في أجهزة Android. يمكنك باستخدام واجهات برمجة التطبيقات هذه مراقبة السلوك الديناميكي على أنظمة Android وتحسين أداء الألعاب عند مستوى مستدام لا يرفع درجة حرارة الأجهزة.

في ما يلي ميزات ADPF الأساسية:

  • واجهة برمجة التطبيقات الحرارية: يمكنك مراقبة الحالة الحرارية للجهاز كي يتمكن التطبيق من تعديل أعباء العمل بشكل استباقي قبل أن يصبح غير مستدامة.
  • CPU Performance Hint API: يمكنك تقديم تلميحات عن الأداء تتيح لنظام التشغيل Android اختيار إعدادات الأداء المناسبة (على سبيل المثال، نقطة تشغيل وحدة المعالجة المركزية (CPU) أو وحدة المعالجة المركزية (CPU)) لأعباء العمل.
  • واجهة برمجة تطبيقات وضع الألعاب وواجهة برمجة تطبيقات حالة اللعبة: يمكنك تفعيل ميزة تحسين تشغيل الألعاب من خلال إعطاء الأولوية لخصائص الأداء أو عمر البطارية، استنادًا إلى إعدادات المستخدم والإعدادات الخاصة باللعبة.
  • وضع الأداء الثابت: يمكنك تفعيل وضع الأداء الثابت على أحد الأجهزة أثناء قياس الأداء للحصول على القياسات التي لا يتم تغييرها من خلال التسجيل الديناميكي لوحدة المعالجة المركزية (CPU).
  • وضع كفاءة استهلاك الطاقة: يخبر الجلسة بأنّه يمكن جدولة سلاسل المحادثات في "جلسة نصائح الأداء" بشكل آمن، وذلك لتفضيل كفاءة استهلاك الطاقة على الأداء. تتوفّر هذه الميزة في نظام التشغيل Android 15 (واجهة برمجة التطبيقات 35).

طريقة استخدام ADPF في مشاريع Android الأصلية

يرشدك الدرس التطبيقي حول الترميز Integrating Adaptability اقتراحات في لعبتك الأصلية لدمج ميزات ADPF في لعبتك من خلال خطوات يمكنك اتباعها بالوتيرة التي تناسبك. في نهاية الدرس التطبيقي حول الترميز، ستكون قد دمجت الميزات التالية:

  • واجهة برمجة التطبيقات الحرارية: يمكنك الاستماع إلى الحالة الحرارية للجهاز والتفاعل قبل أن يدخل في حالة التقييد الحراري.
  • واجهة برمجة التطبيقات لوضع الألعاب: يمكنك فهم الإعدادات المفضّلة لتحسين اللاعبين (تحسين الأداء إلى أقصى حدّ أو الحفاظ على البطارية) وضبط إعداداتها وفقًا لذلك.
  • واجهة برمجة تطبيقات حالة الألعاب: يمكنك السماح للنظام بمعرفة حالة لعبتك (التحميل والتشغيل وواجهة المستخدم وما إلى ذلك)، حيث يمكن للنظام ضبط الموارد وفقًا لذلك (تحسين وحدات الإدخال والإخراج أو وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات وما إلى ذلك).
  • Performance Hint API: يمكنك إعلام النظام بنموذج سلسلة المحادثات وعبء العمل كي يتمكّن النظام من تخصيص الموارد وفقًا لذلك.

كيفية استخدام ADPF في محرك لعبة Unity

الأداء التكيُّفي من Unity عبارة عن أداة لمطوّري الألعاب الذين يريدون تحسين ألعابهم على الأجهزة الجوّالة، لا سيما لمنظومة Android المتكاملة. وتمكِّن ميزة "الأداء التكيُّفي" لعبتك من التكيّف مع أداء الجهاز وخصائصه الحرارية في الوقت الفعلي، ما يضمن تجربة لعب سلسة وفعّالة.

يرشدك موفّر نظام Android للأداء التكيُّفي في خطوات تنفيذ ADPF في Unity.

مربّع حوار إعدادات المشروع
الشكل 6. دمج ADPF في Unity Engine

كيفية استخدام بروتوكول ADPF في محرّك الألعاب Unreal

مربّع حوار إعدادات المشروع
الشكل 7. دمج ADPF في Unreal Engine
  1. تنزيل المكون الإضافي
  2. نسخ المكون الإضافي إلى مجلد المكون الإضافي للمشروع
  3. تفعيل المكوِّن الإضافي ADPF Unreal Engine في محرِّر Unreal
  4. إعادة تشغيل محرِّر Unreal
  5. بناء اللعبة وطهيها

يوفّر المكوّن الإضافي Android Dynamic Performance Platform(ADPF) لبرنامج Unreal Engine أداءً مستقرًا ويمنع التقييد الحراري. يمكنك تنزيل المكوّن الإضافي من GitHub. يغيّر هذا المكوّن الإضافي الميزات من خلال ضبط قيم غير حقيقية لوحدة التحكّم.