परफ़ॉर्मेंस से जुड़ी किसी समस्या की जांच करते समय, ट्रेस अक्सर जानकारी का सबसे अच्छा सोर्स होते हैं. इनसे आपको यह अनुमान लगाने में मदद मिलती है कि समस्या क्या है और इसकी जांच कहां से शुरू करनी है.
Android पर दो लेवल की ट्रेसिंग की जा सकती है: सिस्टम ट्रेसिंग और मेथड ट्रेसिंग.
सिस्टम ट्रेसिंग सिर्फ़ उन जगहों को ट्रैक करती है जिन्हें खास तौर पर ट्रेसिंग के लिए मार्क किया गया है. इसलिए, इसमें कम ओवरहेड होता है और इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर ज़्यादा असर नहीं पड़ता. सिस्टम ट्रेसिंग की मदद से यह देखा जा सकता है कि आपके कोड के कुछ सेक्शन को चलने में कितना समय लग रहा है.
मेथड ट्रेसिंग, आपके ऐप्लिकेशन में हर फ़ंक्शन कॉल को ट्रैक करती है. यह बहुत महंगा है. इसलिए, इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर काफ़ी असर पड़ता है. हालांकि, इससे आपको यह पूरी जानकारी मिलती है कि क्या हो रहा है, कौनसे फ़ंक्शन कॉल किए जा रहे हैं, और उन्हें कितनी बार कॉल किया जा रहा है.
डिफ़ॉल्ट रूप से, सिस्टम ट्रेस में अलग-अलग कंपोज़ेबल फ़ंक्शन शामिल नहीं होते. ये तरीके के ट्रेस में उपलब्ध होते हैं.
कंपोज़िशन ट्रेसिंग से, सिस्टम ट्रेस के अंदर कंपोज़ेबल फ़ंक्शन दिखते हैं. इस सुविधा से, आपको सिस्टम ट्रेसिंग से कम रुकावट मिलती है. साथ ही, कंपोज़िशन में मेथड ट्रेसिंग के लेवल की जानकारी मिलती है.
कंपोज़िशन ट्रेसिंग सेटअप करना
अपने प्रोजेक्ट में रीकंपोज़िशन ट्रेसिंग की सुविधा आज़माने के लिए, आपको कम से कम इन वर्शन पर अपडेट करना होगा:
- Android Studio फ़्लमिंगो
- Compose UI: 1.3.0
- Compose कंपाइलर: 1.3.0
जिस डिवाइस या एम्युलेटर पर आपको ट्रेस चलाना है उसमें कम से कम एपीआई लेवल 30 होना चाहिए.
इसके अलावा, आपको Compose Runtime Tracing पर एक नई डिपेंडेंसी जोड़नी होगी:
implementation("androidx.compose.runtime:runtime-tracing:1.9.0")
अगर Compose BOM का इस्तेमाल किया जा रहा है, तो आपको वर्शन की जानकारी देने की ज़रूरत नहीं है:
val composeBom = platform("androidx.compose:compose-bom:2025.08.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
इस डिपेंडेंसी की मदद से, रीकंपोज़िशन को शामिल करने वाला सिस्टम ट्रेस लेने पर, कंपोज़ेबल फ़ंक्शन अपने-आप दिखते हैं.
सिस्टम ट्रेस करना
सिस्टम ट्रेस लेने और रीकंपोज़िशन ट्रेसिंग की सुविधा को काम करते हुए देखने के लिए, यह तरीका अपनाएं:
प्रोफ़ाइलर खोलें:
दूसरी इमेज. Android Studio - Start Profiling सीपीयू टाइमलाइन पर क्लिक करें
तीसरी इमेज. Android Studio का प्रोफ़ाइलर - सीपीयू टाइमलाइन अपने ऐप्लिकेशन में उस यूज़र इंटरफ़ेस (यूआई) पर जाएं जिसे आपको ट्रेस करना है. इसके बाद, सिस्टम ट्रेस और रिकॉर्ड करें को चुनें
चौथी इमेज. ट्रेस करने के विकल्प - सिस्टम ट्रेस करने वाला टूल अपने ऐप्लिकेशन का इस्तेमाल करके, फिर से कंपोज़ करें और रिकॉर्डिंग बंद करें. ट्रेस प्रोसेस होने और दिखने के बाद, अब आपको रीकंपोज़िशन ट्रेस में कंपोज़ेबल दिखने चाहिए. कीबोर्ड और माउस का इस्तेमाल करके, ट्रेस को ज़ूम और पैन किया जा सकता है. अगर आपको ट्रेस पर नेविगेट करने के बारे में जानकारी नहीं है, तो ट्रेस रिकॉर्ड करना लेख पढ़ें.
पांचवीं इमेज. सिस्टम ट्रेस चार्ट में मौजूद किसी कंपोज़ेबल पर दो बार क्लिक करने से, आपको उसके सोर्स कोड पर ले जाया जाता है.
फ़ाइल और लाइन नंबर के साथ-साथ, फ़्लेम चार्ट में कंपोज़ेबल भी देखे जा सकते हैं:
छठी इमेज. फ़्लेम चार्ट
सीमाएं
APK के साइज़ में बढ़ोतरी
हमारा मकसद इस सुविधा के ओवरहेड को कम से कम करना है. हालांकि, Compose कंपाइलर की मदद से APK में एम्बेड की गई ट्रेसिंग स्ट्रिंग की वजह से, Compose ऐप्लिकेशन के APK का साइज़ बढ़ जाता है. अगर आपका ऐप्लिकेशन 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();
}
ये फ़ंक्शन आने वाले समय में बदल सकते हैं. हालांकि, किसी भी बदलाव के बारे में Compose के रिलीज़ नोट में बताया जाएगा.
ध्यान दें कि कुछ एपीके साइज़ की लागत के साथ फ़ंक्शन को चालू रखने से, यह पक्का होता है कि प्रोफ़ाइल किया जा रहा एपीके वही है जिसे ऐप्लिकेशन के उपयोगकर्ता चलाते हैं.
सटीक टाइमिंग
परफ़ॉर्मेंस टेस्टिंग की तरह ही, सटीक प्रोफ़ाइलिंग के लिए आपको ऐप्लिकेशन को 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>
डिवाइस से ट्रेस किया गया डेटा (रिकॉर्ड कमांड में बताई गई जगह की जानकारी).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
इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ें. Macrobenchmark इंस्ट्रुमेंटेशन आर्ग्युमेंट के बारे में ज़्यादा जानकारी के लिए, Macrobenchmark इंस्ट्रुमेंटेशन आर्ग्युमेंट देखें.
सुझाव/राय दें या शिकायत करें
हमें इस सुविधा के बारे में आपके सुझाव, शिकायत या राय जानकर खुशी होगी. साथ ही, अगर आपको इसमें कोई गड़बड़ी मिलती है या आपको कोई अनुरोध करना है, तो हमें बताएं. समस्या ट्रैकर का इस्तेमाल करके, हमें सुझाव, शिकायत या राय भेजी जा सकती है.