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

"الجلسات البطيئة" هو مقياس جديد ضمن "مؤشرات 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
    

    تقدّم المعلومات التي تم تفريغها إجمالي عدد اللقطات والمخطّط التكراري presentToPresent لجميع الطبقات التي يعرضها 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. بعد جمع كل المعلومات، عليك إيقاف ملف تعريف الارتباط timestats باستخدام العلامة disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

أسباب اللقطات البطيئة وحلولها

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

استخدِم Android Frame Pacing (Swappy) وVulkan وADPF لحلّ هذه المشاكل وتحسين أداء لعبتك.

ما هو تطبيق Swappy؟

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

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

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

تعرَّف على كيفية استخدام Mir 2 لتطبيق Swappy لتقليل معدّل الجلسات البطيئة من% 40 إلى%10.

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

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

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

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

مربّع حوار إعدادات المشروع
الشكل 2. فعِّل ميزة "معدّل عرض اللقطات" في Unity Engine.

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

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

يدمج الإصدار 4.25 من Unreal والإصدارات الأحدث مكتبة Android Frame Pacing Library، وهي جزء من مجموعة تطوير ألعاب Android. توضّح مقالة معدّل عرض اللقطات في الأجهزة الجوّالة كيفية تفعيل مكتبة Android Frame Pacing Library وكيفية التحكّم في معدّل عرض اللقطات من رمز C++.

ما هو Vulkan؟

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

يوفّر Vulkan المزايا التالية مقارنةً بـ OpenGL ES:

  • بنية أكثر كفاءة مع انخفاض النفقات العامة لوحدة المعالجة المركزية في برنامج تشغيل الرسومات
  • استراتيجيات تحسين جديدة لتحسين أداء وحدة المعالجة المركزية
  • ميزات الرسومات الجديدة غير المتوفّرة في 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. إذا كنت تستخدم IDE 2021.1 أو إصدارًا سابقًا، هذه هي الطريقة الوحيدة لاستخدام Vulkan.

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

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

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

لتفعيل واجهة برمجة التطبيقات Vulkan graphics API، انتقِل إلى إعدادات المشروع > المنصات > Android > الإصدار واختَر إتاحة Vulkan. عند تحديد كل من إتاحة استخدام Vulkan وإتاحة استخدام 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) على تحسين الألعاب استنادًا إلى ميزات الإدارة الديناميكية للحرارة ووحدة المعالجة المركزية ووحدة معالجة الرسومات على Android. يتم التركيز على الألعاب، ولكن يمكنك أيضًا استخدام الميزات في التطبيقات الأخرى التي تتطلّب أداءً عاليًا.

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

في ما يلي الميزات الرئيسية لخدمة ADPF:

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

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

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

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

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

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

يرشدك موفِّر الأداء التكيُّفي لنظام التشغيل Android إلى الخطوات اللازمة لتنفيذ ميزة "الأداء التكيُّفي للألعاب على Android" في Unity.

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

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

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

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