متوسط عدد اللقطات في الثانية
من المهمّ أن يكون عدد اللقطات في الثانية سلسًا وثابتًا لتقديم تجربة ألعاب عالية الجودة على أجهزة Android. عند قياس أداء اللعبة، يجب قياس متوسط عدد اللقطات في الثانية كـ مرجع للحصول على فهم أساسي للتجربة. يجب تحسين لعبتك لتلبية متوسط عدد اللقطات في الثانية البالغ 60 لقطة في الثانية لضمان تجربة ألعاب رائعة.
عدد اللقطات في الثانية عند النسبة المئوية 90 و99 لتحقيق الثبات
حتى مع متوسط عدد اللقطات في الثانية السلس البالغ 60 لقطة في الثانية، قد تستمر اللعبة في مواجهة مشاكل متقطّعة، مثل التقطّع البسيط والتأخير غير المتوقّع في الإدخال، ما يؤدي إلى تجربة سيئة للاعب.
لذلك، فإنّ ثبات عدد اللقطات في الثانية لا يقل أهمية عن تتبُّع متوسط عدد اللقطات في الثانية. هنا يجب قياس عدد اللقطات في الثانية عند النسبة المئوية 90 و99 كمقياس أساسي ثابت ومؤشر للتقطّع على التوالي. تسجّل هذه المقاييس "الطرف السفلي" من الأداء لتحسين سلاسة تجربة اللاعب.
المقاييس
- متوسط عدد اللقطات في الثانية (المقياس الأساسي): يوفّر هذا المقياس الأساسي مرجعًا عامًا لأداء لعبتك. على الرغم من أنّه معيار قياسي، فإنّ حساب المتوسط يعني أنّه لا يمكن رصد الانخفاضات المتقطّعة في عدد اللقطات في الثانية والتقطّع البسيط، ما يجعله غير كافٍ لتمثيل تجربة اللاعب بمفرده.
- عدد اللقطات في الثانية عند النسبة المئوية 90 (المقياس الأساسي الثابت عند النسبة المئوية% 10): يشير ذلك إلى أنّ %90 من اللقطات تجاوزت هذا المقياس الأساسي الثابت، وأنّ أبطأ% 10 من اللقطات فقط استغرقت وقتًا أطول للعرض. إذا كان عدد اللقطات في الثانية عند النسبة المئوية 90 مرتفعًا وقريبًا من المتوسط، فإنّ اللعبة تعمل بشكل جيد وثابت بالنسبة إلى الغالبية العظمى من الجلسة.
- عدد اللقطات في الثانية عند النسبة المئوية 99 (مؤشر التقطّع عند النسبة المئوية% 1): يشير ذلك إلى أنّ% 99 من اللقطات تجاوزت مؤشر التقطّع هذا، ما يؤدي إلى عزل أبطأ% 1 من اللقطات على وجه التحديد. هذا المقياس ضروري لرصد التقطّع البسيط والتأخير في تحميل مواد العرض والارتفاعات المفاجئة في العرض التي تتضمّن الكثير من مواد العرض والتي تسبب مشاكل مرئية.
أمثلة
من خلال مقارنة متوسط عدد اللقطات في الثانية بمقاييس عدد اللقطات في الثانية عند النسبة المئوية 90 و99، يمكنك تشخيص السلوك الأساسي للعبة بدقة.
السيناريو 1: منحنى مثالي (لعبة محسّنة)
- المتوسط: 60 لقطة في الثانية (16.6 ملي ثانية)
- النسبة المئوية 90: 58 لقطة في الثانية (17.2 ملي ثانية)
- النسبة المئوية 99: 52 لقطة في الثانية (19.2 ملي ثانية)
- التحليل: المقاييس متقاربة جدًا. تبدو اللعبة سلسة ومتّسقة بشكل لا يُصدّق. لا يحدث تقطّع بسيط، وحتى أبطأ% 1 من اللقطات بالكاد يمكن ملاحظتها بالعين البشرية.
السيناريو 2: عنق الزجاجة في التحميل (محدودية وحدة المعالجة المركزية/وحدة معالجة الرسومات)
- المتوسط: 45 لقطة في الثانية (22.2 ملي ثانية)
- النسبة المئوية 90: 40 لقطة في الثانية (25.0 ملي ثانية)
- النسبة المئوية 99: 38 لقطة في الثانية (26.3 ملي ثانية)
- التحليل: متوسط عدد اللقطات في الثانية أقل، ولكنّه ثابت. لا ينخفض عدد اللقطات في الثانية عند النسبة المئوية 99 بشكل كبير مقارنةً بالمتوسط. يشير ذلك إلى أنّ النظام مثقل بشكل أساسي بالإعدادات الرسومية أو قيود الدقة. لن تبدو اللعبة متقطّعة، بل بطيئة. عادةً ما يؤدي خفض الإعدادات الرسومية إلى زيادة هذه المقاييس بشكل موحّد.
السيناريو 3: 60 لقطة في الثانية غير ثابتة (تجميع التظليل / التقطّع الناتج عن بث مواد العرض )
- المتوسط: 60 لقطة في الثانية (16.6 ملي ثانية)
- النسبة المئوية 90: 45 لقطة في الثانية (22.2 ملي ثانية)
- النسبة المئوية 99: 15 لقطة في الثانية (66.6 ملي ثانية)
- التحليل: هذا هو أسوأ سيناريو. على الرغم من أنّ متوسط عدد اللقطات في الثانية يبدو ممتازًا، فإنّ عدد اللقطات في الثانية عند النسبة المئوية 99 يكشف عن مشكلة خطيرة. يعني عدد اللقطات في الثانية عند النسبة المئوية 99 البالغ 66.6 ملي ثانية أنّ اللعبة تتجمّد تمامًا لعدة لقطات في كل مرة. يشير ذلك إلى القيم المتطرّفة الشديدة، التي تحدث عادةً بسبب عنق الزجاجة في وحدة المعالجة المركزية أو التأخير في بث مواد العرض (على سبيل المثال، ذاكرة الوصول العشوائي أو مساحة التخزين البطيئة) أو المشاكل الناتجة عن تجميع التظليل.
القياس
لقياس متوسط عدد اللقطات في الثانية وعدد اللقطات في الثانية عند النسبة المئوية 90 و99 بشكل فعّال، يمكنك استخدام الأمر Android
dumpsys surfaceflinger timestats. توفّر هذه الأداة متوسط عدد اللقطات في الثانية ومخططًا بيانيًا زمنيًا لـ presentToPresent لجميع الطبقات التي يتم عرضها. إنّ وقت presentToPresent للقطة هو الفترة الفاصلة بين اللقطة الحالية واللقطة السابقة التي يتم رسمها.
في ما يلي التعليمات التفصيلية لجمع هذه المقاييس وحسابها للعبتك:
بدء التسجيل: شغِّل الأمر التالي باستخدام علامتَي enable وclear لبدء تسجيل المعلومات:
adb shell dumpsys SurfaceFlinger --timestats -clear -enableتفريغ المعلومات: بعد تشغيل اللعبة لفترة كافية، شغِّل الـ أمر مرة أخرى باستخدام علامة dump لعرض المعلومات:
adb shell dumpsys SurfaceFlinger --timestats -dumpالفلترة حسب الطبقة: توفّر المعلومات التي تم تفريغها بيانات لجميع الطبقات التي يعرضها SurfaceFlinger. عليك العثور على القسم الذي يتوافق مع لعبتك من خلال الفلترة استنادًا إلى
layerName(على سبيل المثال، layerName = SurfaceView[com.example.yourgame...]).layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833تحديد متوسط عدد اللقطات في الثانية: يتم حساب متوسط عدد اللقطات في الثانية لكل طبقة تلقائيًا ويظهر مباشرةً في ناتج التفريغ (على سبيل المثال، averageFPS = 30.179).
... averageFPS = 30.179 ...حساب عدد اللقطات في الثانية عند النسبة المئوية 90 و99: للعثور على مقاييس عدد اللقطات في الثانية عند النسبة المئوية 90 و99، عليك تحليل إجمالي اللقطات والمخطط البياني الزمني لـ
presentToPresentالمقدَّم في التفريغ.totalFrames = 1000 ... 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=850 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=100 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=35 54ms=0 58ms=0 62ms=0 66ms=10 70ms=0 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=5 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أ. مثال مفاهيمي (جدول التوزيع التراكمي) لنفترض أنّ جلسة اللعبة سجّلت إجمالي عدد اللقطات البالغ 1,000. للعثور على عدد اللقطات في الثانية عند النسبة المئوية 90 و99، عليك حساب الحدود الدنيا بالملّي ثانية التي يصل فيها العدد التراكمي للقطات إلى 900 لقطة (%90) و990 لقطة (%99) على التوالي، بدءًا من أقل مجموعة بالملّي ثانية.
وقت عرض اللقطة (بالملّي ثانية) عدد اللقطات (المخطط البياني) العدد التراكمي للقطات حالة النسبة المئوية / الحساب 16 ملي ثانية 850 850 %85.0 33 ملي ثانية 100 950 %95.0
(تم بلوغ عدد اللقطات المستهدَف عند النسبة المئوية 90 وهو 900 لقطة! ← 1000/33 = 30.3 لقطة في الثانية)50 ملي ثانية 35 985 %98.5 66 ملي ثانية 10 995 %99.5
(تم بلوغ عدد اللقطات المستهدَف عند النسبة المئوية 99 وهو 990 لقطة! ← 1000/66 = 15.1 لقطة في الثانية)102 ملي ثانية 5 1,000 %100 ب. منطق التنفيذ (الرمز الزائف) إذا كنت تُجري هذا التحليل تلقائيًا باستخدام نص برمجي بلغة Python أو أداة تحليل السجلّات، يمكن تنفيذ منطق استخراج قيم عدد اللقطات في الثانية عند النسبة المئوية 90 و99 من المخطط البياني على النحو التالي:
# Define target thresholds based on total frame count p90_target = totalFrames * 0.90 p99_target = totalFrames * 0.99 cumulative_frames = 0 p90_fps = None p99_fps = None # Iterate through the parsed SurfaceFlinger histogram data (sorted by millisecond) for ms_bucket, frame_count in present_to_present_histogram: cumulative_frames += frame_count # Capture P90 when cumulative frames cross the 90% threshold if p90_fps is None and cumulative_frames >= p90_target: p90_fps = 1000 / ms_bucket # Capture P99 when cumulative frames cross the 99% threshold if p99_fps is None and cumulative_frames >= p99_target: p99_fps = 1000 / ms_bucket break # Optimization: stop iterating once both targets are foundإيقاف التسجيل: بعد جمع كل المعلومات الضرورية، عليك إيقاف timestats باستخدام علامة disable:
adb shell dumpsys SurfaceFlinger --timestats -disable
الجلسات البطيئة
تحدّد الجلسات البطيئة مشاكل الأداء المنتشرة في العالم الحقيقي. تُعدّ الجلسة "بطيئة" إذا انخفضت أكثر من% 25 من اللقطات عن حد أدنى معيّن (على سبيل المثال، 20 لقطة في الثانية). على الرغم من أنّ هذا المقياس مفيد لرصد المشاكل الخطيرة في الإصدار، فإنّه وحده لا يمكنه ضمان تجربة مستدامة وعالية الجودة. قد تتجنّب اللعبة الحد الأدنى للجلسة البطيئة، ولكنّها قد تظل تعاني من التقطّع البسيط الذي يؤثر في تجربة 60 لقطة في الثانية السلسة.
على الرغم من أنّ كلًا من "الجلسة البطيئة" و"عدد اللقطات في الثانية" مستمدّان من أوقات عرض اللقطات، فإنّهما يؤديان دورَين مختلفَين. تقيس مقاييس متوسط عدد اللقطات في الثانية وعدد اللقطات في الثانية عند النسبة المئوية 90 و99 جودة الأداء واستدامته، وترصد الانخفاضات اللحظية والوتيرة غير المتّسقة التي قد يتجاهلها مقياس الجلسة البطيئة.
الخاتمة
يتطلّب تحسين الأداء بنجاح استراتيجية شاملة. على المطوّرين استخدام الجلسات البطيئة كأداة رادار أساسية لرصد التدهور الشديد في الأداء، ثم فحص متوسط عدد اللقطات في الثانية وعدد اللقطات في الثانية عند النسبة المئوية 90 و99 لتشخيص الأسباب الأساسية والتحقّق من السلاسة الفعلية لأسلوب اللعب. من خلال دمج هذه المقاييس، يمكنك ضمان تقديم تطبيقك تجربة مستخدم استثنائية ومستدامة باستمرار.
مراجع إضافية
لمزيد من المعلومات عن تقنيات تحديد المشاكل المتقدّمة وتنفيذ واجهة برمجة التطبيقات Frame Pacing API واستراتيجيات التحسين الخاصة بالمحرّك، يُرجى الاطّلاع على مستندات مطوّري Android الرسمية:
- مؤشرات Android الحيوية: الجلسات البطيئة: يمكنك فهم كيفية قياس Google Play لفترات العرض البطيء المستمرة والإبلاغ عنها، ما يؤثر بشكل مباشر في تجربة المستخدم. يتم تعريف "الجلسة البطيئة" على أنّها جلسة مستخدم تكون فيها أكثر من% 25 من اللقطات بطيئة (على سبيل المثال، تستغرق أكثر من 50 ملي ثانية، أي ما يعادل 20 لقطة في الثانية).
- مطوّرو Android: تحسين أداء اللعبة: يمكنك استكشاف المركز الرئيسي لتحسين ألعاب Android. يغطّي هذا الدليل الشامل أفضل الممارسات وأدوات تحديد المشاكل (مثل AGI وPerfetto) لمساعدتك في زيادة الأداء العام للعبتك إلى أقصى حد.