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

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

प्रोफ़ाइलर कॉन्फ़िगरेशन चुनने के लिए, इंस्ट्रुमेंटेशन रनर आर्ग्युमेंट 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 (API 29) और उसके बाद के वर्शन पर, स्टैक सैंपलिंग में Simpleperf का इस्तेमाल करके, ऐप्लिकेशन कॉलस्टैक का सैंपल लिया जाता है. इसमें C++ कोड भी शामिल है. Android 9 (एपीआई 28) और उससे पहले के वर्शन पर, यह स्टैक सैंपल कैप्चर करने के लिए Debug.startMethodTracingSampling का इस्तेमाल करता है.

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

  • androidx.benchmark.profiling.sampleFrequency

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

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

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

कोई नहीं

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