डिफ़ॉल्ट रूप से, माइक्रोबेंचमार्क से आपको कोड के एक्ज़ीक्यूट होने के समय और उसके लिए मेमोरी के बंटवारे के बारे में जानकारी मिलती है. अगर आपको यह पता लगाना है कि मेज़र किया गया कोड धीरे-धीरे क्यों चल रहा है, तो मेथड ट्रेस की जांच करें. यह ओएस के साथ काम करने वाले वर्शन पर डिफ़ॉल्ट रूप से कैप्चर होता है. इसके अलावा, अन्य प्रोफ़ाइलिंग कॉन्फ़िगरेशन भी चुने जा सकते हैं.
प्रोफ़ाइलर कॉन्फ़िगरेशन चुनने के लिए, इंस्ट्रुमेंटेशन रनर आर्ग्युमेंट androidx.benchmark.profiling.mode
को MethodTracing
(डिफ़ॉल्ट), StackSampling
या None
आर्ग्युमेंट के साथ जोड़ें. इसे यहां दिए गए स्निपेट में दिखाया गया है.
विकल्पों के बारे में ज़्यादा जानने के लिए, Java/Kotlin के तरीके रिकॉर्ड करना लेख पढ़ें.
MethodTracing
, ट्रेसिंग के बराबर है. साथ ही, StackSampling
उस दस्तावेज़ में बताई गई सैंपलिंग के बराबर है.
Groovy
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Kotlin
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
किसी बेंचमार्क की प्रोफ़ाइल बनाते समय, आउटपुट .trace
फ़ाइल को होस्ट में कॉपी किया जाता है. यह फ़ाइल, डायरेक्ट्री में JSON फ़ाइल के साथ मौजूद होती है. Android Studio में प्रोफ़ाइलिंग के नतीजे देखने के लिए, माइक्रोबेंचमार्क के नतीजों में मौजूद मेथड ट्रेस या स्टैक सैंपलिंग ट्रेस लिंक चुनें.
MethodTracing
मेथड ट्रेसिंग तब काम आती है, जब आपको अपने कोड को ऑप्टिमाइज़ करना हो. ऐसा इसलिए, क्योंकि इससे आपको उन तरीकों की पहचान करने में मदद मिल सकती है जिन्हें पूरा होने में दूसरों की तुलना में ज़्यादा समय लगता है. इसके बाद, उन तरीकों को ऑप्टिमाइज़ करने पर फ़ोकस किया जा सकता है जिनका परफ़ॉर्मेंस पर सबसे ज़्यादा असर पड़ता है.
कोड मेज़रमेंट के बाद, प्रोफ़ाइलिंग क्रम से होती है. इसलिए, आपके टेस्ट से समय और प्रोफ़ाइलिंग, दोनों के सटीक नतीजे मिलते हैं.
मेथड ट्रेसिंग की सुविधा डिफ़ॉल्ट रूप से चालू रहती है.
StackSampling
सैंपल ट्रेसिंग से, परफ़ॉर्मेंस पर असर डाले बिना ज़्यादा समय लेने वाले तरीकों की पहचान करने में भी मदद मिल सकती है. हालांकि, अगर आपका ऐप्लिकेशन कॉल स्टैक कैप्चर होने के बाद किसी तरीके में शामिल होता है और अगले कैप्चर से पहले ही उस तरीके से बाहर निकल जाता है, तो उस तरीके के कॉल को लॉग नहीं किया जाता. कम समय तक चलने वाले तरीकों को सही तरीके से ट्रैक करने के लिए, सैंपल ट्रेसिंग के बजाय मेथड ट्रेसिंग का इस्तेमाल करें.
स्टैक सैंपलिंग की मदद से, वार्मअप की प्रोसेस पूरी होने के बाद, बेंचमार्क सैंपल कॉल स्टैक किए जाते हैं. इंस्ट्रुमेंटेशन आर्ग्युमेंट का इस्तेमाल करके, सैंपलिंग के व्यवहार को कंट्रोल किया जा सकता है. जैसे, सैंपल फ़्रीक्वेंसी और सैंपलिंग की अवधि.
Android 10 (API 29) और इसके बाद के वर्शन में, स्टैक सैंपलिंग के लिए Simpleperf का इस्तेमाल किया जाता है. इससे C++ कोड के साथ-साथ ऐप्लिकेशन के कॉलस्टैक को भी सैंपल किया जाता है. Android 9 (एपीआई 28) और इससे पहले के वर्शन पर, यह स्टैक सैंपल कैप्चर करने के लिए Debug.startMethodTracingSampling
का इस्तेमाल करता है.
इस प्रोफ़ाइलिंग मोड को कॉन्फ़िगर करने के लिए, इंस्ट्रुमेंटेशन के अन्य आर्ग्युमेंट जोड़े जा सकते हैं:
androidx.benchmark.profiling.sampleFrequency
- हर सेकंड कैप्चर किए जाने वाले स्टैक सैंपल की संख्या.
- आर्ग्युमेंट का टाइप: पूर्णांक
- डिफ़ॉल्ट रूप से, हर सेकंड 1,000 सैंपल लिए जाते हैं.
androidx.benchmark.profiling.sampleDurationSeconds
- बेंचमार्क के चलने की अवधि.
- आर्ग्युमेंट का टाइप: पूर्णांक
- डिफ़ॉल्ट रूप से, यह पांच सेकंड पर सेट होता है.
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- जब एएनआर की समस्या होने की संभावना होती है, तब यह मेथड ट्रेसिंग को स्किप कर देता है. आपको सीआई रन के लिए इसे चालू रखना चाहिए, क्योंकि लंबे सीआई रन के दौरान एएनआर की वजह से समस्याएं आ सकती हैं.
- आर्ग्युमेंट का टाइप: बूलियन
- डिफ़ॉल्ट रूप से
true
पर सेट होता है
कोई नहीं
इस आर्ग्युमेंट में, प्रोफ़ाइलिंग फ़ाइल कैप्चर नहीं की जाती. समय और बंटवारे के बारे में जानकारी अब भी मेज़र की जाती है.
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- माइक्रोबेंचमार्क इंस्ट्रूमेंटेशन आर्ग्युमेंट
- लगातार इंटिग्रेशन में बेंचमार्क चलाना