المفاهيم وتنفيذ Jetpack Compose
المقاييس هي النوع الرئيسي من المعلومات المستخرَجة من مقاييس الأداء. ويتم تمريرها إلى الدالة 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 بالتفصيل لاحقًا في هذا المستند. للاطّلاع على قائمة كاملة بالمقاييس، يُرجى مراجعة الفئات الفرعية من Metric.
يتم إخراج نتائج قياس الأداء إلى "استوديو Android"، كما هو موضّح في الشكل 1. في حال تحديد مقاييس متعددة، يتم دمجها كلها في الناتج.
TraceSectionMetric وFrameTimingMetricStartupTimingMetric
StartupTimingMetric تلتقط مقاييس توقيت بدء تشغيل التطبيق بالقيم التالية:
-
timeToInitialDisplayMs: مقدار الوقت من لحظة تلقّي النظام لطلب تشغيل إلى لحظة عرض اللقطة الأولى من الوجهةActivity. timeToFullDisplayMs: مقدار الوقت الذي يستغرقه النظام من وقت تلقّي طلب تشغيل إلى وقت إبلاغ التطبيق عن اكتمال الرسم باستخدام طريقةreportFullyDrawn(). يتوقف القياس عند اكتمال عرض الإطار الأول بعد استدعاءreportFullyDrawn()أو الذي يحتوي عليه. قد لا يتوفّر هذا القياس على الإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأقدم.
يعرض StartupTimingMetric الحد الأدنى والمتوسط والحد الأقصى للقيم من تكرارات بدء التشغيل. لتقييم تحسُّن وقت بدء التشغيل، ركِّز دائمًا على القيم المتوسطة، لأنّها توفّر أفضل تقدير لأوقات بدء التشغيل المعتادة لدى المستخدمين. لمزيد من المعلومات حول العوامل التي تؤثر في وقت بدء تشغيل التطبيق، يُرجى الاطّلاع على وقت بدء تشغيل التطبيق.
StartupTimingMetric نتيجة.FrameTimingMetric
FrameTimingMetric تلتقط معلومات التوقيت من اللقطات التي ينتجها مقياس الأداء، مثل الانتقال أو الصور المتحركة، وتُخرج القيم التالية:
-
frameOverrunMs: مقدار الوقت الذي تتجاوزه لقطة معيّنة عن الموعد النهائي المحدّد لها. تشير الأرقام الموجبة إلى إطار تم إسقاطه مصحوبًا بتأخُّر أو تقطُّع مرئي. تشير الأرقام السالبة إلى مدى سرعة اكتمال اللقطة مقارنةً بالموعد النهائي للأجهزة في النظام الفرعي. ملاحظة: لا يتوفّر هذا المقياس إلا على الإصدار 12 من نظام التشغيل Android (المستوى 31 من واجهة برمجة التطبيقات) والإصدارات الأحدث. -
frameDurationCpuMs: مقدار الوقت الذي تستغرقه وحدة المعالجة المركزية لإنتاج اللقطة في كلّ من سلسلة واجهة المستخدم وRenderThread.
يتم جمع هذه القياسات في توزيع للشريحة المئوية الخمسين والتسعين والخامسة والتسعين والتاسعة والتسعين.
لمزيد من المعلومات حول كيفية تحديد اللقطات البطيئة وتحسينها، يُرجى الاطّلاع على مقالة العرض البطيء.
FrameTimingMetric نتيجة.TraceSectionMetric
TraceSectionMetric يسجّل عدد مرات حدوث قسم تتبُّع معيّن والوقت المطلق الذي يستغرقه التنفيذ. بالنسبة إلى تتبُّع الوقت،
يتم عرض الحد الأدنى والوسيط والحد الأقصى للأوقات بالمللي ثانية.
يتم تحديد قسم التتبُّع المستهدَف إما من خلال استدعاء الدالة
trace(sectionName) أو حدود الكتلة ذات المستوى الأدنى بين
Trace.beginSection(sectionName) وTrace.endSection() أو صيغها
غير المتزامنة. ويختار دائمًا المثيل الأول لقسم التتبُّع الذي تم تسجيله
أثناء القياس. ويُخرج فقط أقسام التتبُّع من الحزمة تلقائيًا. لتضمين عمليات خارج الحزمة، اضبط targetPackageOnly =
false.
لمزيد من المعلومات حول التتبُّع، يُرجى الاطّلاع على نظرة عامة على تتبُّع النظام وتحديد الأحداث المخصّصة.
TraceSectionMetric نتيجة.التطبيقات المقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما يكون JavaScript غير مفعَّل
- إنشاء ملفات شخصية أساسية {:#creating-profile-rules}
- كتابة اختبار Macrobenchmark
- تحليل عملية بدء تشغيل التطبيق وتحسينها {:#app-startup-analysis-optimization}