الجلسات البطيئة

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

وفي الوقت المناسب، سيبدأ Google 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 Frame Pacing، المعروفة أيضًا باسم Swappy، هي جزء من مكتبات AGDK. تساعد ميزة Swappy ألعاب OpenGL وVulkan في تحقيق عرض سلس وتحديد معدّل اللقطات الصحيح على Android.

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

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

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

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

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

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

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

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

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

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

يدمج Unreal 4.25 والإصدارات الأحدث مكتبة Android Frame Pacing، وهي جزء من Android Game Development Kit. توضّح مقالة تحديد معدّل اللقطات على الأجهزة الجوّالة كيفية تفعيل مكتبة Android Frame Pacing وكيفية التحكّم في تحديد معدّل اللقطات من رمز 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. تفعيل Auto Graphics API في Unity

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

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

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

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

لتفعيل واجهة برمجة التطبيقات للرسومات Vulkan، انتقِل إلى إعدادات المشروع > المنصات > 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

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

يرشدك موفّر Adaptive Performance لنظام Android إلى خطوات استخدام ADPF في 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.