تتبُّع المقطوعة الموسيقية

غالبًا ما تكون عمليات التتبّع هي أفضل مصدر للمعلومات عند النظر لأول مرة في مشكلة تتعلّق بالأداء. وتسمح لك بصياغة فرضية عن المشكلة وتحديد مكان البدء في البحث.

هناك مستويان لتتبُّع عمليات التشغيل متوافقان مع Android: تتبُّع النظام وتتبُّع الطريقة.

وبما أنّ تتبُّع النظام لا يتتبّع سوى المناطق التي تم وضع علامة عليها تحديدًا للتتبُّع، فإنّه يستهلك موارد منخفضة ولا يؤثّر في أداء تطبيقك بشكل كبير. إنّ تتبُّع النظام يُعدّ أمرًا رائعًا لمعرفة الوقت الذي يستغرقه تنفيذ أقسام معيّنة من الرمز البرمجي.

تتبُّع الطريقة يتتبّع كل طلب دالة في تطبيقك. وهذا إجراء مكلف للغاية ويؤثّر بشكل كبير في أداء تطبيقك، ولكنه يمنحك صورة كاملة عن ما يحدث والدوالّ التي يتمّ طلبها ومعدّل تكرار طلبها.

بشكلٍ تلقائي، لا تتضمّن عمليات تتبُّع النظام وظائف فردية قابلة للتجميع. وهي متاحة في عمليات تتبُّع الطرق.

نختبر حاليًا وظيفة تتبُّع جديدة للنظام لعرض وظائف قابلة للتجميع داخل عمليات تتبُّع النظام. يوفّر لك هذا الإجراء مستوى منخفضًا من التداخل مع عملية التتبّع في النظام، مع مستويات من التفاصيل في التركيب تُتاح من خلال تتبّع الطريقة.

الإعداد لتتبُّع التركيب

لتجربة ميزة تتبُّع إعادة التركيب في مشروعك، عليك التحديث إلى الإصدارات التالية على الأقل:

  • Android Studio Flamingo
  • واجهة مستخدم ميزة "إنشاء": 1.3.0
  • أداة تجميع الرسائل: 1.3.0

يجب أيضًا أن يكون الجهاز أو المحاكي الذي تُجري عليه عملية التتبُّع متوافقًا مع المستوى 30 على الأقل من واجهة برمجة التطبيقات.

بالإضافة إلى ذلك، عليك إضافة تبعية جديدة لميزة "تتبُّع مدة التشغيل" في Compose:

implementation("androidx.compose.runtime:runtime-tracing:1.7.5")

إذا كنت تستخدم ملف BOM في ميزة "الإنشاء"، ليس عليك تحديد الإصدار:

val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
implementation(composeBom)
// ...

// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")

باستخدام هذا الاعتماد، عند تتبُّع النظام الذي يتضمّن إعادة التركيب، يمكنك الاطّلاع على الدوالّ القابلة للتجميع تلقائيًا.

تتبُّع النظام

لإجراء عملية تتبُّع للنظام والاطّلاع على عملية تتبُّع إعادة التركيب الجديدة، اتّبِع الخطوات التالية:

  1. افتح أداة تحليل الأداء:

    Android Studio - بدء ميزة "التحليل"
    الشكل 2: Android Studio - بدء تحليل الأداء
  2. انقر على المخطط الزمني لوحدة المعالجة المركزية (CPU).

    أداة تحليل الأداء في "استوديو Android": مخطط زمني لوحدة المعالجة المركزية
    الشكل 3: أداة تحليل الأداء في Android Studio - المخطط الزمني لوحدة المعالجة المركزية (CPU)
  3. انتقِل في تطبيقك إلى واجهة المستخدم التي تريد تتبُّعها، ثم اختَر النظام تتبُّع وتسجيل.

    خيارات التتبُّع - تتبُّع النظام
    الشكل 4: خيارات التتبُّع - تتبُّع النظام
  4. استخدِم تطبيقك لإعادة التركيب وإيقاف التسجيل. بعد معالجة التتبّع وظهوره، من المفترض أن تتمكّن الآن من الاطّلاع على العناصر القابلة للتجميع في تتبّع إعادة التركيب. يمكنك استخدام لوحة المفاتيح والماوس للتكبير والتصغير حول التتبُّع. إذا لم تكن معتادًا على التنقّل في التتبُّع، يمكنك الاطّلاع على مستندات تسجيل عمليات التتبُّع.

    تتبُّع النظام
    الشكل 5: تتبُّع النظام

    يؤدي النقر مرّتين على عنصر قابل للتجميع في الرسم البياني إلى نقلك إلى رمزه المصدر.

  5. يمكنك أيضًا الاطّلاع على العناصر القابلة للتجميع في مخطّط Flame Chart مع رقم الملف والخط:

    رسم بياني مفصّل لأداء الرموز
    الشكل 6: الرسم البياني المفصّل لأداء الرموز

المحاذير

حجم حزمة 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")

إنشاء طلب تسجيل

  1. أنشئ أمر تسجيل باستخدام Perfetto.
  2. أضِف يدويًا قسم مصدر البيانات 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

تسجيل تتبع

  1. افتح التطبيق وحضِّر القسم الذي تريد تتبُّعه.
  2. فعِّل ميزة التتبُّع في التطبيق من خلال إصدار بث.

    # 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
    
  3. ابدأ أمر التسجيل الذي أنشأته سابقًا.

افتح عملية التتبُّع.

  1. adb pull <location> التتبُّع من الجهاز (الموقع الجغرافي المحدّد في الأمر record)

  2. افتح الملف في Perfetto.

تسجيل تتبع باستخدام أداة Jetpack Macrobenchmark

يمكنك قياس الأداء باستخدام Jetpack Macrobenchmark، الذي يقدّم عمليات التتبّع كنتائج. لتفعيل ميزة تتبُّع التركيب باستخدام قياسات الأداء الإجمالية، عليك إجراء ما يلي:

  1. أضِف هذه التبعيات الإضافية إلى وحدة اختبار Macrobenchmark:

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. أضِف androidx.benchmark.fullTracing.enable=true مَعلمة أداة القياس قبل إجراء اختبارات الأداء. اطّلِع على مَعلمات أداة قياس الأداء على مستوى التطبيق للحصول على مزيد من المعلومات عن مَعلمات أداة قياس الأداء على مستوى التطبيق.

ملاحظات

يسرّنا معرفة ملاحظاتك حول هذه الميزة وأي أخطاء تواجهها فيها، وأي طلبات لديك. يمكنك إرسال ملاحظاتك إلينا من خلال أداة تتبُّع الصعوبات.