मैक्रोबेंचमार्क मेट्रिक कैप्चर करें

मेट्रिक मुख्य रूप से आपके मानदंडों से ली गई जानकारी होती है. इन्हें List के तौर पर measureRepeated फ़ंक्शन में पास किया जाता है. इससे, एक साथ कई मेज़र की गई मेट्रिक तय की जा सकती हैं. कम से कम एक टाइप की मेट्रिक ज़रूरी है चलाने के लिए बेंचमार्क को तय करती है.

नीचे दिया गया कोड स्निपेट, फ़्रेम की टाइमिंग और कस्टम ट्रेस सेक्शन की मेट्रिक कैप्चर करता है:

Kotlin

benchmarkRule.measureRepeated(
    packageName = TARGET_PACKAGE,
    metrics = listOf(
        FrameTimingMetric(),
        TraceSectionMetric("RV CreateView"),
        TraceSectionMetric("RV OnBindView"),
    ),
    iterations = 5,
    // ...
)

Java

benchmarkRule.measureRepeated(
    TARGET_PACKAGE,     // packageName
    Arrays.asList(      // metrics
        new StartupTimingMetric(),
        new TraceSectionMetric("RV CreateView"),
        new TraceSectionMetric("RV OnBindView"),
    ),
    5,                  // Iterations
    // ...
);

इस उदाहरण में, RV CreateView और RV OnBindView, ट्रैक किए जा सकने वाले ब्लॉक के आईडी हैं. इन ब्लॉक के बारे में RecyclerView में बताया गया है. createViewHolder() के लिए सोर्स कोड, एक उदाहरण है. इससे पता चलता है कि अपने कोड में, ट्रैक किए जा सकने वाले ब्लॉक कैसे तय किए जा सकते हैं.

StartupTimingMetric, TraceSectionMetric, FrameTimingMetric, और PowerMetric के बारे में इस दस्तावेज़ में आगे बताया गया है.

मानदंड के नतीजे, Android Studio के आउटपुट के तौर पर होते हैं, जैसा कि पहली इमेज में दिखाया गया है. अगर एक से ज़्यादा मेट्रिक तय की जाती हैं, तो उन सभी को आउटपुट में जोड़ दिया जाता है.

TraceSectionMetric और FrameTimingMetric के नतीजे.
पहली इमेज. TraceSectionMetric और के नतीजे FrameTimingMetric.

StartupTimingMetric

StartupTimingMetric इन वैल्यू की मदद से, ऐप्लिकेशन के स्टार्टअप में लगने वाले समय की मेट्रिक कैप्चर की जाती हैं:

  • timeToInitialDisplayMs: सिस्टम को लॉन्च इंटेंट मिलने से लेकर, डेस्टिनेशन का पहला फ़्रेम रेंडर होने में लगने वाला समयActivity.
  • timeToFullDisplayMs: सिस्टम को इस लक्ष्य का इस्तेमाल करके ऐप्लिकेशन की रिपोर्ट पूरी तरह तैयार होने पर, reportFullyDrawn() तरीका. पहले फ़्रेम को रेंडर होने के बाद, मेज़रमेंट बंद हो जाएगा reportFullyDrawn() कॉल के बाद या शामिल करने के बाद. यह ऐसा हो सकता है कि मेज़रमेंट की सुविधा, Android 10 (एपीआई लेवल 29) और इससे पहले के वर्शन पर उपलब्ध न हो.

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

StartupTimingMetric के नतीजे
दूसरी इमेज. StartupTimingMetric नतीजे.

FrameTimingMetric

FrameTimingMetric स्क्रोलिंग या ऐनिमेशन जैसे बेंचमार्क से जनरेट हुए फ़्रेम से, समय की जानकारी कैप्चर करता है. साथ ही, ये वैल्यू दिखाता है:

  • frameOverrunMs: तय समयसीमा के बाद, किसी फ़्रेम में कितनी देर हो सकती है. पॉज़िटिव संख्याएं, फ़्रेम छोड़ने और वीडियो में रुकावट या झटके आने की जानकारी देती हैं. नेगेटिव नंबर से यह पता चलता है कि फ़्रेम, समयसीमा खत्म होने से कितना तेज़ है. ध्यान दें: यह सुविधा सिर्फ़ Android 12 (एपीआई लेवल 31) और उसके बाद वाले वर्शन पर उपलब्ध है.
  • frameDurationCpuMs: फ़्रेम को बनने में लगने वाला समय सीपीयू (CPU) को यूज़र इंटरफ़ेस (यूआई) थ्रेड और RenderThread, दोनों पर सेव करता है.

ये मेज़रमेंट, 50वें, 90वें, 95वें, और 99वें पर्सेंटाइल के डिस्ट्रिब्यूशन में इकट्ठा किए जाते हैं.

रेंडर होने में ज़्यादा समय लेने वाले फ़्रेम की पहचान करने और उन्हें बेहतर बनाने के बारे में ज़्यादा जानने के लिए, यहां देखें धीमी रेंडरिंग.

फ़्रेम टाइमिंग मेट्रिक के नतीजे
तीसरी इमेज. FrameTimingMetric नतीजे.

TraceSectionMetric

TraceSectionMetric इससे पता चलता है कि दिए गए sectionName के साथ मैच करने वाला ट्रैस सेक्शन कितनी बार हुआ और इसमें कितना समय लगा. कुछ समय के लिए, यह सबसे कम मीडियन और ज़्यादा से ज़्यादा बार मिलीसेकंड में. ट्रेस सेक्शन में फ़ंक्शन कॉल के हिसाब से trace(sectionName) या कोड के बीच में Trace.beginSection(sectionName) और Trace.endSection() या एक साथ काम नहीं करने वाले वैरिएंट हैं. यह हमेशा, ट्रेस सेक्शन का पहला इंस्टेंस चुनता है माप के दौरान कैप्चर किया गया. यह आपके पैकेज से सिर्फ़ ट्रेस सेक्शन का आउटपुट देता है डिफ़ॉल्ट रूप से; अपने पैकेज से बाहर की प्रक्रियाओं को शामिल करने के लिए, सेट करें targetPackageOnly = false.

ट्रेस करने के बारे में ज़्यादा जानकारी के लिए, सिस्टम की खास जानकारी देखें ट्रेसिंग और कस्टमर को परिभाषित करें इवेंट के बारे में ज़्यादा जानें.

ट्रेस सेक्शन मेट्रिक
चौथी इमेज. TraceSectionMetric नतीजे.

पावरमेट्रिक

PowerMetric मीडिया आइटम दिए गए डेटा के लिए, आपके टेस्ट के दौरान पावर या ऊर्जा में बदलाव पावर की कैटगरी. चुनी गई हर कैटगरी को मेज़र किए जा सकने वाले सब-कॉम्पोनेंट में बांटा जाता है. साथ ही, चुने नहीं गए कैटगरी को "चुने नहीं गए" मेट्रिक में जोड़ा जाता है.

ये मेट्रिक पूरे सिस्टम में खपत, न कि हर ऐप्लिकेशन के हिसाब से खपत, और ये सीमित होते हैं Pixel 6, Pixel 6 Pro, और उसके बाद के वर्शन वाले डिवाइसों के लिए:

  • power<category>Uw: इस अवधि के दौरान बिजली की खपत इस कैटगरी में टेस्ट करें.
  • energy<category>Uws: इस कैटगरी में, जांच के दौरान हर समय इकाई के हिसाब से ट्रांसफ़र की गई ऊर्जा की मात्रा.

कैटगरी में ये शामिल हैं:

  • CPU
  • DISPLAY
  • GPU
  • GPS
  • MEMORY
  • MACHINE_LEARNING
  • NETWORK
  • UNCATEGORIZED

CPU जैसी कुछ कैटगरी में, इनके काम को अलग-अलग करना मुश्किल हो सकता है आपके ऐप्लिकेशन की ओर से की गई काम की अन्य प्रक्रियाओं को शामिल करता है. रुकावट को कम करने के लिए, ग़ैर-ज़रूरी ऐप्लिकेशन और खातों को हटाना या उन पर पाबंदी लगाना.

PowerMetric के नतीजे
पांचवीं इमेज. PowerMetric नतीजे.