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