المقاييس هي النوع الرئيسي من المعلومات المستخرَجة من مقاييس الأداء. ويتم تمريرها إلى الدالة 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"، كما هو موضّح في الشكل 1. وإذا تم تحديد مقاييس متعددة، سيتم دمجها جميعًا في الناتج.
StartupTimingMetric
يعرض StartupTimingMetric
مقاييس توقيت بدء تشغيل التطبيق بالقيم التالية:
timeToInitialDisplayMs
: مقدار الوقت المنقضي منذ تلقي النظام لهدف الإطلاق إلى وقت عرض الإطار الأول للوجهةActivity
.timeToFullDisplayMs
: مقدار الوقت المنقضي منذ أن يتلقّى النظام عملية الإطلاق إلى وقت إبلاغ التطبيق عن الرسم الكامل باستخدام الطريقةreportFullyDrawn()
. يتوقف القياس عند اكتمال عرض الإطار الأول بعد - أو يشتمل على - استدعاءreportFullyDrawn()
. قد لا يكون هذا القياس متاحًا على نظام التشغيل Android 10 (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأقدم.
تنتج عن StartupTimingMetric
قيم الحدّ الأدنى والمتوسط والحد الأقصى من تكرارات بدء التشغيل. لتقييم تحسين الشركة الناشئة، يجب التركيز على القيم المتوسطة،
لأنها توفر أفضل تقدير لوقت بدء التشغيل النموذجي. لمزيد من المعلومات عن العوامل التي تساهم في تحديد مدة بدء تشغيل التطبيق، يمكنك الاطّلاع على وقت بدء تشغيل التطبيق.
FrameTimingMetric
يلتقط FrameTimingMetric
معلومات التوقيت من الإطارات التي تم إنشاؤها من خلال مقياس أداء، مثل التمرير أو الصورة المتحركة، وتعرض القيم التالية:
frameOverrunMs
: مقدار الوقت الذي يتخطى فيه إطار معيّن الموعد النهائي المحدد له. تشير الأرقام الموجبة إلى سقوط الإطار ووجود تعطّل أو تقطُّع مرئي. تشير الأرقام السالبة إلى مدى سرعة الإطار عن الموعد النهائي. ملاحظة: لا تتوفّر هذه الميزة إلا على نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث.frameDurationCpuMs
: مقدار الوقت المستغرَق ليتم إنتاجه على وحدة المعالجة المركزية (CPU) على كل من سلسلة واجهة المستخدم وRenderThread
.
تُجمع هذه القياسات بتوزيع بنسبة مئوية 50 و90 و95 و99.
لمزيد من المعلومات حول كيفية تحديد اللقطات البطيئة وتحسينها، يمكنك الاطّلاع على العرض البطيء.
مقياس التتبع
وتلتقط TraceSectionMetric
عدد مرات حدوث مقطع تتبُّع يتطابق مع sectionName
المقدمة مع الوقت المستغرق. بالنسبة للوقت، فهي تُخرج الحد الأدنى والمتوسط والحد الأقصى للأوقات بالمللي ثانية. يتم تعريف قسم التتبُّع إما من خلال استدعاء الدالة
trace(sectionName)
أو الرمز بين
Trace.beginSection(sectionName)
وTrace.endSection()
أو من صيغهما غير المتزامنة. وتختار دائمًا المثيل الأول لقسم التتبّع
الذي تم التقاطه أثناء القياس. فهي تؤدي إلى إخراج أقسام تتبُّع من الحِزمة بشكل تلقائي فقط. ولتضمين العمليات خارج الحزمة، يمكنك ضبط targetPackageOnly = false
.
لمزيد من المعلومات عن التتبُّع، اطّلِع على نظرة عامة على تتبُّع النظام وتحديد الأحداث المخصّصة.
مقياس الطاقة
تسجِّل العلامة PowerMetric
التغيُّر في الطاقة أو الطاقة خلال مدة الاختبار
لفئات الطاقة المقدّمة.
يتم تقسيم كل فئة محددة إلى مكوّناتها الفرعية القابلة للقياس، وإضافة الفئات غير المحددة إلى المقياس "غير المحددة".
تقيس هذه المقاييس الاستهلاك على مستوى النظام، وليس الاستهلاك على أساس كل تطبيق، وتقتصر على هواتف Pixel 6 وPixel 6 Pro والإصدارات الأحدث:
power<category>Uw
: مقدار الطاقة المستهلكة خلال مدة اختبارك في هذه الفئة.energy<category>Uws
: مقدار الطاقة المنقولة لكل وحدة زمنية خلال مدة الاختبار في هذه الفئة.
وتشمل الفئات ما يلي:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
في بعض الفئات، مثل CPU
، قد يكون من الصعب فصل العمل الذي تنجزه العمليات الأخرى عن العمل الذي يؤديه تطبيقك. للحدّ من التداخل، يجب إزالة التطبيقات والحسابات غير الضرورية أو حظرها.
أفلام مُقترَحة لك
- ملاحظة: يظهر نص الرابط عند إيقاف JavaScript
- إنشاء ملفات شخصية لم يتم إنشاؤها من قِبل المستخدمين الحاليين {:#developers-profile-rules}
- كتابة مقياس ماكرو
- تحليل وتحسين بدء تشغيل التطبيقات {:#app-startup-analysis-optimization}