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

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

प्रोफ़ाइलर कॉन्फ़िगरेशन चुनने के लिए, इंस्ट्रुमेंटेशन रनर आर्ग्युमेंट 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

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

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

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

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

StackSampling

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

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

Android 10 (एपीआई 29) और इसके बाद के वर्शन पर, स्टैक सैंपलिंग के लिए Simpleperf का इस्तेमाल किया जाता है. इससे ऐप्लिकेशन के कॉलस्टैक का सैंपल लिया जाता है. इसमें C++ कोड भी शामिल होता है. Android 9 (एपीआई 28) और इससे पहले के वर्शन पर, स्टैक सैंपल कैप्चर करने के लिए Debug.startMethodTracingSampling का इस्तेमाल किया जाता है.

इस प्रोफ़ाइलिंग मोड को कॉन्फ़िगर करने के लिए, एक और इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ें:

  • androidx.benchmark.profiling.sampleFrequency

    • हर सेकंड कैप्चर किए जाने वाले स्टैक सैंपल की संख्या.
    • आर्ग्युमेंट का टाइप: पूर्णांक
    • डिफ़ॉल्ट रूप से, हर सेकंड 1,000 सैंपल लिए जाते हैं.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • बेंचमार्क टेस्ट की अवधि.
    • आर्ग्युमेंट का टाइप: पूर्णांक
    • डिफ़ॉल्ट रूप से, यह पांच सेकंड पर सेट होता है.
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • जब एएनआर की गड़बड़ी होने की संभावना होती है, तब यह तरीकों की सूची को स्किप कर देता है. आपको सीआई रन के लिए इसे चालू रखना चाहिए, क्योंकि लंबे सीआई रन के दौरान ANR से जुड़ी गड़बड़ियां आ सकती हैं.
    • आर्ग्युमेंट का टाइप: बूलियन
    • डिफ़ॉल्ट रूप से true पर सेट होता है

कोई नहीं

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