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

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

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

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 के नतीजे.

Startup समय मेट्रिक

StartupTimingMetric ऐप्लिकेशन के शुरू होने के समय की मेट्रिक को, इन वैल्यू के साथ कैप्चर करता है:

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

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

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

फ़्रेम टाइमिंग मेट्रिक

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 नतीजे.
{% endverba नया %} {% verbatim %}