غالبًا ما تكون عمليات التتبّع هي أفضل مصدر للمعلومات عند النظر في مشكلة تتعلّق بالأداء لأول مرة. وتسمح لك بصياغة فرضية عن المشكلة وتحديد مكان البدء في البحث.
هناك مستويان لتتبُّع العمليات متوافقان مع Android: تتبُّع النظام وتتبُّع الطريقة.
وبما أنّ تتبُّع النظام لا يتتبّع سوى المناطق التي تم وضع علامة عليها تحديدًا للتتبُّع، فإنّه يستهلك موارد منخفضة ولا يؤثّر في أداء تطبيقك بشكل كبير. إنّ تتبُّع النظام يُعدّ أمرًا رائعًا لمعرفة الوقت الذي يستغرقه تنفيذ أقسام معيّنة من الرمز البرمجي.
تتبُّع الطريقة يتتبّع كل طلب دالة في تطبيقك. وهذا إجراء مكلف للغاية ويؤثر بشكل كبير في أداء تطبيقك، ولكنه يمنحك صورة كاملة عن ما يحدث والدوالّ التي يتمّ استدعاؤها ومعدّل استدعاؤها.
بشكلٍ تلقائي، لا تتضمّن عمليات تتبُّع النظام وظائف فردية قابلة للتجميع. وهي متاحة في عمليات تتبُّع الطرق.
نختبر حاليًا وظيفة تتبُّع جديدة للنظام لعرض وظائف قابلة للتجميع داخل عمليات تتبُّع النظام. يوفّر لك هذا الإجراء مستوى منخفضًا من التداخل مع عملية التتبّع في النظام، مع مستويات من التفاصيل في التركيب تُتاح من خلال تتبّع الطريقة.
الإعداد لتتبُّع التركيب
لتجربة ميزة تتبُّع إعادة التركيب في مشروعك، عليك التحديث إلى الإصدارات التالية على الأقل:
- Android Studio Flamingo
- واجهة المستخدم لإنشاء الرسائل: 1.3.0
- أداة تجميع الرسائل: 1.3.0
يجب أيضًا أن يكون الجهاز أو المحاكي الذي تُجري عليه عملية التتبُّع متوافقًا مع المستوى 30 على الأقل من واجهة برمجة التطبيقات.
بالإضافة إلى ذلك، عليك إضافة تبعية جديدة لميزة "تتبُّع مدة التشغيل" في Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
باستخدام هذا الاعتماد، عند تتبُّع النظام الذي يتضمّن إعادة التركيب، يمكنك الاطّلاع على الدوالّ القابلة للتجميع تلقائيًا.
تتبُّع النظام
لإجراء عملية تتبُّع للنظام والاطّلاع على عملية تتبُّع إعادة التركيب الجديدة، اتّبِع الخطوات التالية:
افتح أداة تحليل الأداء:
انقر على المخطط الزمني لوحدة المعالجة المركزية (CPU).
انتقِل في تطبيقك إلى واجهة المستخدم التي تريد تتبُّعها، ثم اختَر النظام تتبُّع وتسجيل.
استخدِم تطبيقك لإعادة التركيب وإيقاف التسجيل. بعد معالجة التتبّع وظهوره، من المفترض أن تتمكّن الآن من الاطّلاع على العناصر القابلة للتجميع في تتبّع إعادة التركيب. يمكنك استخدام لوحة المفاتيح والماوس للتكبير والتصغير حول التتبُّع. إذا لم تكن معتادًا على التنقّل في التتبُّع، يمكنك الاطّلاع على مستندات تسجيل عمليات التتبُّع.
يؤدي النقر مرّتين على عنصر قابل للتركيب في الرسم البياني إلى نقلك إلى رمزه المصدر.
يمكنك أيضًا الاطّلاع على العناصر القابلة للتجميع في مخطّط Flame Chart مع رقم الملف والخط:
المحاذير
حجم حزمة APK غير الضروري
على الرغم من أنّنا سعينا إلى تقليل وقت استجابة الميزة قدر الإمكان، يحدث زيادة في حجم حِزم APK لتطبيقات Compose بسبب سلاسل التتبُّع المضمّنة في حِزم APK بواسطة مُجمِّع Compose. يمكن أن تكون هذه الزيادة في الحجم صغيرة نسبيًا إذا كان تطبيقك لا يستخدم الكثير من Compose أو أكبر لتطبيقات Compose الكاملة. بالإضافة إلى ذلك، لا يتم تشويش سلاسل التتبُّع هذه حتى تظهر في أدوات التتبُّع، كما هو موضّح سابقًا. ويُدخل مُجمِّع Compose هذه العناصر في كل التطبيقات، بدءًا من الإصدار 1.3.0.
يمكن إزالة سلاسل التتبّع في إصدار الإصدار عن طريق إضافة قاعدة proguard التالية:
-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 Studio تلقائيًا نيابةً عنك.
إضافة التبعيات
أولاً، أضِف التبعيات الإضافية إلى تطبيقك.
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 Macrobenchmark
يمكنك قياس الأداء باستخدام 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
مَعلمة أداة القياس قبل إجراء اختبارات الأداء. اطّلِع على مَعلمات أداة قياس الأداء على مستوى التطبيق للحصول على مزيد من المعلومات عن مَعلمات أداة قياس الأداء على مستوى التطبيق.
ملاحظات
يسرّنا معرفة ملاحظاتك حول هذه الميزة وأي أخطاء تواجهها فيها، وأي طلبات لديك. يمكنك إرسال ملاحظاتك إلينا من خلال أداة تتبُّع الصعوبات.