غالبًا ما تكون عمليات التتبّع هي أفضل مصدر للمعلومات عند النظر في مشكلة تتعلّق بالأداء لأول مرة. وتسمح لك بتكوين فرضية حول ماهية المشكلة وأين تبدأ في البحث.
هناك مستويان من التتبُّع متاح في نظام التشغيل Android: تتبُّع النظام وتتبُّع الطرق.
ونظرًا لأن نظام تتبُّع النظام لا يتتبّع سوى المناطق التي تم وضع علامة عليها خصيصًا للتتبُّع، فهو إجراء منخفض التكلفة ولا يؤثر بشكل كبير في أداء تطبيقك. إنّ تتبُّع النظام يُعدّ أمرًا رائعًا لمعرفة الوقت الذي يستغرقه تنفيذ أقسام معيّنة من الرمز البرمجي.
تتبُّع الطريقة يتتبّع كل طلب دالة في تطبيقك. وهذا إجراء مكلف للغاية ويؤثر بشكل كبير في أداء تطبيقك، ولكنه يمنحك صورة كاملة عن ما يحدث والدوالّ التي يتمّ استدعاؤها ومعدّل استدعاؤها.
لا تتضمن عمليات تتبُّع النظام تلقائيًا الدوال الفردية القابلة للإنشاء. وهي متاحة في عمليات تتبع الطريقة.
نختبر حاليًا وظيفة تتبُّع جديدة للنظام لعرض وظائف قابلة للتجميع داخل عمليات تتبُّع النظام. وتمنحك هذه الميزة مستوى تسلّل بسيط من بيانات تتبُّع النظام، بالإضافة إلى مستويات تتبُّع التفاصيل في التركيبة.
الإعداد لتتبُّع التركيب
لتجربة تتبع إعادة الإنشاء في مشروعك، تحتاج إلى التحديث إلى الإصدارات التالية على الأقل:
- زهرة فلامينغو في "استوديو Android"
- واجهة مستخدم الإنشاء: 1.3.0
- برنامج تجميع Compose: 1.3.0
يجب أن يكون الجهاز أو المحاكي الذي يتم تشغيل التتبع عليه أيضًا عند مستوى واجهة برمجة التطبيقات الأدنى 30.
بالإضافة إلى ذلك، عليك إضافة تبعية جديدة إلى تتبُّع بيئة تشغيل Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
باستخدام هذه التبعية، عندما تُجري تتبع نظام يتضمن إعادة التركيب، يمكنك رؤية الدوال القابلة للإنشاء تلقائيًا.
تتبُّع النظام
لإجراء عملية تتبُّع للنظام والاطّلاع على عملية تتبُّع إعادة التركيب الجديدة، اتّبِع الخطوات التالية:
افتح أداة تحليل الأداء:
انقر على المخطط الزمني لوحدة المعالجة المركزية (CPU).
انتقِل في تطبيقك إلى واجهة المستخدم التي تريد تتبُّعها، ثم اختَر النظام تتبُّع وتسجيل.
استخدِم تطبيقك لإعادة التركيب وإيقاف التسجيل. بعد معالجة آثار الرصد وظهورها، من المفترض أن يكون بإمكانك الآن رؤية العناصر القابلة للإنشاء في سجلّ تتبُّع إعادة التركيب. يمكنك استخدام لوحة المفاتيح والماوس للتكبير أو التصغير والعرض الشامل لتتبُّع آثار الأنشطة. وإذا لم تكن معتادًا على تتبُّع آثار الأنشطة، راجِع مستندات تسجيل آثار الأنشطة.
يؤدي النقر مرّتين على عنصر قابل للتجميع في الرسم البياني إلى نقلك إلى رمزه المصدر.
يمكنك أيضًا رؤية العناصر القابلة للإنشاء في مخطط Flame إلى جانب الملف ورقم السطر:
المحاذير
حجم حزمة APK غير الضروري
بينما كنا نهدف إلى تقليل عبء استخدام الميزة قدر الإمكان، إلا أن هناك زيادة في حجم APK لتطبيقات Compose بسبب سلاسل التتبُّع المضمَّنة في حزمة APK بواسطة المحول البرمجي لـ Compose. يمكن أن تكون هذه الزيادة في الحجم صغيرة نسبيًا إذا كان تطبيقك لا يستخدم الكثير من Compose أو أكبر في التطبيقات التي تستخدم Compose بالكامل . بالإضافة إلى ذلك، لا يتم تشويش سلاسل التتبع هذه حتى تظهر في أدوات التتبع، كما هو موضح سابقًا. ويدخلها المحول البرمجي للإنشاء في جميع التطبيقات، بدءًا من الإصدار 1.3.0.
يمكن إزالة سلاسل التتبُّع في إصدار الإنتاج من خلال إضافة قاعدة الحماية التالية:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
قد تتغير هذه الدوالّ في المستقبل، ولكن سيتم ذكر أي تغييرات في ملاحظات الإصدار الخاصة بتطبيق "الإنشاء".
ويُرجى ملاحظة أنّ الاحتفاظ بها في آن واحد مع تحمُّل بعض التكاليف المرتبطة بحجم حزمة APK يضمن أن تكون حزمة APK التي يتم تحليلها هي نفسها التي يشغّلها مستخدمو التطبيق.
التوقيت الدقيق
للحصول على ملف تعريف دقيق، كما هو الحال مع أي اختبار أداء، عليك إجراء profileable
وnon-debuggable
في التطبيق وفقًا للتطبيقات التي يمكن إنشاء ملف تعريف لها.
تسجيل تتبع من المحطة الطرفية
يمكن التقاط أثر التركيب من الطرف. ولإجراء ذلك، عليك تنفيذ الخطوات التي يؤديها "استوديو Android" تلقائيًا بالنيابة عنك.
إضافة التبعيات
أولاً، أضِف التبعيات الإضافية إلى تطبيقك.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
إنشاء أمر سجل
- أنشِئ أمر سجلّ باستخدام Perfetto.
إضافة قسم مصدر البيانات
track_event
يدويًا وفقًا للمثال التالي:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
تسجيل آثار الأنشطة
- افتح التطبيق وأعِد القسم الذي تريد تتبُّعه.
يمكنك تفعيل التتبُّع في التطبيق من خلال إصدار بث.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
ابدأ أمر التسجيل الذي أنشأته سابقًا.
فتح عملية التتبّع
adb pull <location>
التتبُّع من الجهاز (الموقع الجغرافي المحدّد في الأمر record)افتح في Perfetto.
تسجيل عملية التتبُّع باستخدام مقياس Jetpack طلبك
يمكنك قياس الأداء باستخدام Jetpack Macrobenchmark، الذي يقدّم عمليات التتبّع كنتائج. لتفعيل ميزة تتبُّع التركيبات باستخدام قياسات الأداء الإجمالية، عليك إجراء ما يلي:
أضِف هذه التبعيات الإضافية إلى وحدة اختبار Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
أضِف
androidx.benchmark.fullTracing.enable=true
مَعلمة أداة القياس قبل إجراء اختبارات الأداء. راجع وسيطات قياس قياس الأداء الماكرو للحصول على مزيد من المعلومات عن وسيطات قياس مقاييس الأداء الكلي.
ملاحظات
تسعدنا معرفة ملاحظاتك حول هذه الميزة، وأي أخطاء تواجهها، وأي طلبات لديك. يمكنك إرسال الملاحظات إلينا من خلال أداة تتبُّع المشاكل.