कंपोज़िशन ट्रेसिंग

ट्रेस से जानकारी पाने का सबसे सही सोर्स, अक्सर परफ़ॉर्मेंस की समस्या. इनसे आपको यह अनुमान लगाने में मदद मिलती है कि समस्या क्या है और सवाल कैसे हल करें.

Android पर, ट्रेस करने के दो लेवल काम करते हैं: सिस्टम ट्रेस करने का तरीका और तरीका ट्रेसिंग.

क्योंकि सिस्टम ट्रेसिंग सिर्फ़ उन जगहों को ट्रैक करता है जिन्हें खास तौर पर ट्रेस करने के लिए मार्क किया गया है. इसलिए, इसमें कम ओवरहेड होगा और इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर ज़्यादा असर नहीं पड़ेगा. प्रणाली ट्रेसिंग की मदद से यह देखा जा सकता है कि आपके कोड के कुछ खास सेक्शन में कितना समय लग रहा है चलाने के लिए.

मेथड ट्रेसिंग आपके ऐप्लिकेशन में हर फ़ंक्शन कॉल को ट्रैक करती है. यह बहुत महंगा है और इसलिए यह आपके ऐप्लिकेशन के परफ़ॉर्मेंस पर काफ़ी असर डालता है, लेकिन इससे आपको कुल यह जानकारी कि क्या हो रहा है, किन फ़ंक्शन का इस्तेमाल किया जा रहा है, और तो उन्हें कॉल किया जा रहा है.

डिफ़ॉल्ट रूप से, सिस्टम ट्रेस में अलग-अलग कंपोज़ेबल फ़ंक्शन शामिल नहीं होते हैं. ये मेज़रमेंट, मेथड ट्रेस में उपलब्ध हैं.

फ़िलहाल, हम कंपोज़ेबल दिखाने के लिए, सिस्टम ट्रेस करने की नई सुविधा को टेस्ट कर रहे हैं फ़ंक्शन का इस्तेमाल करें. यह आपको सिस्टम से कम दखल देता है. जिसे ट्रैक करने के लिए इस्तेमाल किया जाता है.

कंपोज़िशन ट्रेस करने के लिए सेट अप करें

अपने प्रोजेक्ट में रीकंपोज़िशन ट्रेसिंग को आज़माने के लिए, आपको पर अपडेट करना होगा कम से कम निम्न वर्शन:

  • Android Studio फ़्लमिंगो
  • यूज़र इंटरफ़ेस (यूआई) लिखें: 1.3.0
  • कंपाइलर लिखें: 1.3.0

जिस डिवाइस या एम्युलेटर पर ट्रेस चलाया जा रहा है उसका एपीआई लेवल कम से कम होना चाहिए 30.

इसके अलावा, आपको रनटाइम ट्रेस बनाने की सुविधा के लिए एक नई डिपेंडेंसी जोड़नी होगी:

implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")

इस डिपेंडेंसी के साथ जब सिस्टम ट्रेस लिया जाता है, जिसमें रीकंपोज़ीशन शामिल होती है, कंपोज़ेबल फ़ंक्शन को अपने-आप देखा जा सकता है.

सिस्टम ट्रेस करें

सिस्टम ट्रेस करने और रीकंपोज़िशन ट्रेसिंग को काम करते हुए देखने के लिए, फ़ॉलो करें यह तरीका अपनाएं:

  1. प्रोफ़ाइलर खोलें:

    Android Studio - प्रोफ़ाइलिंग शुरू करें
    दूसरी इमेज. Android Studio - प्रोफ़ाइलिंग शुरू करें
  2. सीपीयू टाइमलाइन पर क्लिक करें

    Android Studio प्रोफ़ाइलर - सीपीयू टाइमलाइन
    तीसरी इमेज. Android Studio प्रोफ़ाइलर - सीपीयू टाइमलाइन
  3. अपने ऐप्लिकेशन के उस यूज़र इंटरफ़ेस (यूआई) पर जाएं जिसे आपको ट्रेस करना है. इसके बाद, सिस्टम ट्रेस करें और रिकॉर्ड

    ट्रेस के विकल्प - सिस्टम ट्रेस
    चौथी इमेज. ट्रेस के विकल्प - सिस्टम ट्रेस
  4. इसे फिर से बनाने और रिकॉर्डिंग रोकने के लिए, अपने ऐप्लिकेशन का इस्तेमाल करें. ट्रेस के पास हो जाने के बाद कंपोज़ेबल को प्रोसेस कर दिया जाता है और वे दिखने लगते हैं. अब आपको यहां कंपोज़ेबल रीकंपोज़िशन ट्रेस में. ज़ूम और पैन करने के लिए, कीबोर्ड और माउस का इस्तेमाल किया जा सकता है ट्रेस के आस-पास मौजूद होते हैं; अगर आपको ट्रेस पर नेविगेट करने के बारे में जानकारी नहीं है, तो ट्रैक रिकॉर्ड करें दस्तावेज़.

    सिस्टम ट्रेस करने वाला टूल
    पांचवीं इमेज. सिस्टम ट्रेस

    चार्ट में किसी कंपोज़ेबल पर दो बार क्लिक करने से, उसके सोर्स कोड पर पहुंचा जा सकता है.

  5. फ़ाइल और लाइन के साथ, फ़्लेम चार्ट में कंपोज़ेबल भी देखे जा सकते हैं संख्या:

    फ़्लेम चार्ट
    छठी इमेज. फ़्लेम चार्ट

सीमाएं

APK का साइज़ ओवरहेड

हमने इस सुविधा के ओवरहेड को जितना हो सके उतना कम करने पर काम किया, ट्रेसिंग स्ट्रिंग से आने वाले Compose ऐप्लिकेशन के लिए APK के साइज़ में बढ़ोतरी हुई है APK में 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> (इसमें बताई गई जगह रिकॉर्ड करें).

  2. Perfetto में खोलें.

Jetpack मैक्रोबेंचमार्क की मदद से, ट्रेस कैप्चर करें

परफ़ॉर्मेंस को Jetpack Macrobenchmark की मदद से मेज़र किया जा सकता है, जिससे नतीजों के तौर पर ट्रेस दिखते हैं. इसकी मदद से कंपोज़िशन ट्रेस करने की सुविधा चालू की जा सकती है तो आपको ये काम करने होंगे:

  1. इन अतिरिक्त डिपेंडेंसी को मैक्रोबेंचमार्क टेस्ट मॉड्यूल में जोड़ें:

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. androidx.benchmark.fullTracing.enable=true इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ें इस्तेमाल करने से पहले बेंचमार्क में जोड़ दिया जाता है. मैक्रोबेंचमार्क इंस्ट्रुमेंटेशन को चुनें तर्क लिखें, ताकि आप मैक्रोबेंचमार्क के बारे में ज़्यादा जानकारी पा सकें इंस्ट्रुमेंटेशन के तर्क.

सुझाव

अगर आपको इस सुविधा में कोई गड़बड़ी मिलती है, तो हमें उसके बारे में आपकी राय जानकर खुशी होगी. और आपके कोई भी अनुरोध हों. आप समस्या के ज़रिए हमें फ़ीडबैक भेज सकते हैं ट्रैकर देखें.