المقاييس هي النوع الرئيسي من المعلومات المستخرَجة من مقاييس الأداء. ويتم
تمريرها إلى دالة measureRepeated
بصفتها List
، ما يتيح لك تحديد
مقاييس قياس متعددة في آنٍ واحد. يجب تقديم نوع واحد على الأقل من المقاييس لبدء تنفيذ الاختبار القياسي.
يسجِّل مقتطف الرمز البرمجي التالي مقياسَي توقيت اللقطة ومقاييس القسم المخصّص للتتبّع:
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
في هذا المثال، RV CreateView
وRV OnBindView
هما معرّفات الوحدات القابلة للتتبّع التي تم تحديدها في
RecyclerView
. يُعدّ
رمز المصدر لطريقة createViewHolder()
مثالاً على كيفية تحديد وحدات قابلة للتتبّع ضمن
الرمز الخاص بك.
تتم تغطية StartupTimingMetric
،
TraceSectionMetric
،
FrameTimingMetric
، وPowerMetric
،
بالتفصيل في وقت لاحق من هذا المستند.
يتمّ عرض نتائج اختبار الأداء في Android Studio، كما هو موضّح في الشكل 1. في حال تحديد مقاييس متعددة، يتم دمجها جميعًا في الإخراج.
StartupTimingMetric
يرصد StartupTimingMetric
مقاييس توقيت بدء تشغيل التطبيق بالقيم التالية:
timeToInitialDisplayMs
: المدة التي تستغرقها عملية عرض اللقطة الأولى للوجهةActivity
، بدءًا من وقت تلقّي النظام لمحاولة الإطلاقtimeToFullDisplayMs
: المدة التي تستغرقها عملية الرسم بالكامل من وقت تلقّي النظام لمحاولة الإطلاق إلى وقت إبلاغ التطبيق باستخدام الأسلوبreportFullyDrawn()
يتوقف القياس عند اكتمال عرض الإطار الأول بعد طلبreportFullyDrawn()
أو عند تضمينه. قد لا يكون هذا القياس متاحًا على الإصدار 10 من Android (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأقدم.
تُخرج دالة StartupTimingMetric
القيم الدنيا والوسيطة والقصوى من تكرارات البدء. لتقييم تحسين بدء التشغيل، عليك التركيز على القيم المتوسطة،
لأنّها تقدّم أفضل تقدير لوقت بدء التشغيل المعتاد. لمزيد من
المعلومات حول العوامل التي تساهم في وقت بدء تشغيل التطبيق، يُرجى الاطّلاع على وقت
بدء تشغيل التطبيق.
FrameTimingMetric
FrameTimingMetric
تُسجِّل معلومات التوقيت من اللقطات التي ينتج عنها مقياس الأداء، مثل
الانتقال أو الصور المتحركة، وتُخرج القيم التالية:
frameOverrunMs
: مقدار الوقت الذي يتأخر فيه إطار معيّن عن الموعد النهائي تشير الأرقام الموجبة إلى تقطُّع اللقطات وظهور تقطُّع أو تقطُّع في الصوت. تشير الأرقام السالبة إلى مدى سرعة عرض اللقطة مقارنةً بالموعد النهائي. ملاحظة: لا تتوفّر هذه الميزة إلا على الإصدار 12 من نظام التشغيل Android (المستوى 31 من واجهة برمجة التطبيقات) والإصدارات الأحدث.-
frameDurationCpuMs
: مدة إنتاج اللقطة على وحدة المعالجة المركزية (CPU) في كلّ من سلسلة واجهة المستخدم وRenderThread
يتم جمع هذه القياسات في توزيع الشريحة المئوية الخمسين والتسعين والخامسة والتسعين والتسعين.
لمزيد من المعلومات حول كيفية تحديد اللقطات البطيئة وتحسينها، يُرجى الاطّلاع على مقالة بطء العرض.
TraceSectionMetric
يُسجِّل مقياس TraceSectionMetric
عدد مرّات حدوث قسم تتبُّع يتطابق مع sectionName
المقدَّمة والمدة التي يستغرقها. بالنسبة إلى الوقت، يتم عرض الحد الأدنى
والوسيط والحد الأقصى للمرات بالمللي ثانية. يتم تعريف قسم التتبّع إما
بواسطة طلب الدالة
trace(sectionName)
أو الرمز البرمجي بين
Trace.beginSection(sectionName)
و
Trace.endSection()
أو
الصيغ غير المتزامنة لها. ويكون الاختيار دائمًا للنسخة الأولى من قسم التتبّع
الذي تم تسجيله أثناء القياس. لا يتم عرض سوى أقسام التتبُّع من حِزمك
تلقائيًا. لتضمين العمليات خارج حِزمك، اضبط
targetPackageOnly = false
.
لمزيد من المعلومات عن التتبُّع، اطّلِع على نظرة عامة على تتبُّع النظام وتحديد أحداث مخصّصة.
PowerMetric
يرصد مقياس PowerMetric
التغيير في الطاقة أو استهلاك الطاقة على مدار مدة الاختبار لفئات الطاقة المقدَّمة.
يتم تقسيم كل فئة تم اختيارها إلى مكوّنات فرعية قابلة للقياس، ويتم
إضافة الفئات غير المحدّدة إلى المقياس "غير محدّد".
تقيس هذه المقاييس الاستهلاك على مستوى النظام، وليس الاستهلاك على مستوى كل تطبيق، وهي تقتصر على هواتف Pixel 6 وPixel 6 Pro والإصدارات الأحدث:
power<category>Uw
: مقدار الطاقة المستهلك خلال مدّة الاختبار في هذه الفئةenergy<category>Uws
: مقدار الطاقة المنقولة لكل وحدة زمنية لمدة الاختبار في هذه الفئة
تشمل الفئات ما يلي:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
في بعض الفئات، مثل CPU
، قد يكون من الصعب فصل العمل الذي تنفّذه
العمليات الأخرى عن العمل الذي ينفّذه تطبيقك. للحدّ من التداخل،
عليك إزالة التطبيقات والحسابات غير الضرورية أو حظرها.
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون لغة JavaScript غير مفعّلة.
- إنشاء الملفات الشخصية للمرجع {:#creating-profile-rules}
- كتابة اختبار أداء على مستوى التطبيق
- تحليل بدء تشغيل التطبيق وتحسينه {:#app-startup-analysis-optimization}