माइक्रोबैंचमार्क की पहचान करें

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

प्रोफ़ाइलर कॉन्फ़िगरेशन चुनने के लिए, इंस्ट्रुमेंटेशन रनर आर्ग्युमेंट 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 में प्रोफ़ाइलिंग के नतीजे देखने के लिए, माइक्रोबेंचमार्क के नतीजों में मौजूद Method Trace या Stack Sampling Trace लिंक को चुनें.

MethodTracing

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

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

मेथड ट्रेसिंग की सुविधा डिफ़ॉल्ट रूप से चालू रहती है.

ध्यान दें: Android OS और ART के कुछ वर्शन पर, मेथड ट्रेसिंग डिफ़ॉल्ट रूप से बंद होती है. ऐसे मामलों में, Android Studio एक चेतावनी दिखाता है.

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 पर सेट होता है

कोई नहीं

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