मेट्रिक, आपके मानदंडों से निकाली गई मुख्य जानकारी होती है. इन्हें 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 में आउटपुट के तौर पर दिखते हैं, जैसा कि पहली इमेज में दिखाया गया है. अगर एक से ज़्यादा मेट्रिक तय की जाती हैं, तो उन सभी को आउटपुट में जोड़ दिया जाता है.
StartupTimingMetric
StartupTimingMetric
यह ऐप्लिकेशन के स्टार्टअप में लगने वाले समय की मेट्रिक को इन वैल्यू के साथ कैप्चर करता है:
timeToInitialDisplayMs
: सिस्टम को लॉन्च इंटेंट मिलने से लेकर, डेस्टिनेशन का पहला फ़्रेम रेंडर होने में लगने वाला समयActivity
.timeToFullDisplayMs
: सिस्टम को लॉन्च इंटेंट मिलने से लेकर,reportFullyDrawn()
के तरीके का इस्तेमाल करके ऐप्लिकेशन के पूरी तरह से ड्रॉ होने तक का समय.reportFullyDrawn()
कॉल के बाद या उसमें शामिल पहले फ़्रेम को रेंडर करने के बाद, मेज़रमेंट बंद हो जाता है. ऐसा हो सकता है कि यह मेज़रमेंट, Android 10 (एपीआई लेवल 29) और उससे पहले के वर्शन पर उपलब्ध न हो.
StartupTimingMetric
, स्टार्टअप के दौरान किए गए कई प्रयासों से मिली कम से कम, मीडियन, और ज़्यादा से ज़्यादा वैल्यू दिखाता है. स्टार्टअप में हुई सुधार का आकलन करने के लिए, आपको मीडियन वैल्यू पर फ़ोकस करना चाहिए. ऐसा इसलिए, क्योंकि ये स्टार्टअप में लगने वाले सामान्य समय का सबसे अच्छा अनुमान देती हैं. ऐप्लिकेशन के स्टार्टअप समय पर किस चीज़ का असर पड़ता है, इस बारे में ज़्यादा जानने के लिए ऐप्लिकेशन के स्टार्टअप समय लेख पढ़ें.
FrameTimingMetric
FrameTimingMetric
स्क्रोलिंग या ऐनिमेशन जैसे बेंचमार्क से जनरेट हुए फ़्रेम से, समय की जानकारी कैप्चर करता है. साथ ही, ये वैल्यू दिखाता है:
frameOverrunMs
: किसी फ़्रेम को रेंडर होने में लगने वाला समय, उसकी समयसीमा से ज़्यादा होने पर. पॉज़िटिव संख्याएं, फ़्रेम छोड़ने और वीडियो में रुकावट या झटके आने की जानकारी देती हैं. नेगेटिव संख्याओं से पता चलता है कि कोई फ़्रेम, समयसीमा से कितना तेज़ है. ध्यान दें: यह सुविधा सिर्फ़ Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर उपलब्ध है.frameDurationCpuMs
: यूज़र इंटरफ़ेस (यूआई) थ्रेड औरRenderThread
, दोनों पर सीपीयू पर फ़्रेम जनरेट होने में लगने वाला समय.
ये मेज़रमेंट, 50वें, 90वें, 95वें, और 99वें पर्सेंटाइल के डिस्ट्रिब्यूशन में इकट्ठा किए जाते हैं.
धीमे फ़्रेम की पहचान करने और उन्हें बेहतर बनाने के तरीके के बारे में ज़्यादा जानने के लिए, धीमी रेंडरिंग लेख पढ़ें.
TraceSectionMetric
TraceSectionMetric
इससे पता चलता है कि दिए गए sectionName
के साथ मैच करने वाला ट्रैस सेक्शन कितनी बार हुआ और इसमें कितना समय लगा. समय के लिए, यह मिलीसेकंड में कम से कम, मध्य, और ज़्यादा से ज़्यादा समय दिखाता है. ट्रैक सेक्शन को फ़ंक्शन कॉल trace(sectionName)
या Trace.beginSection(sectionName)
और Trace.endSection()
या उनके असाइन्क्रोनस वैरिएंट के बीच के कोड से तय किया जाता है. यह हमेशा किसी मेज़रमेंट के दौरान कैप्चर किए गए ट्रैक सेक्शन के पहले इंस्टेंस को चुनता है. यह डिफ़ॉल्ट रूप से, सिर्फ़ आपके पैकेज के ट्रैक सेक्शन को आउटपुट करता है. अपने पैकेज से बाहर की प्रोसेस शामिल करने के लिए, targetPackageOnly = false
सेट करें.
ट्रैकिंग के बारे में ज़्यादा जानकारी के लिए, सिस्टम ट्रैकिंग की खास जानकारी और कस्टम इवेंट तय करना लेख पढ़ें.
PowerMetric
PowerMetric
, आपके टेस्ट की अवधि के दौरान, दी गई पावर कैटगरी के लिए, पावर या ऊर्जा में हुए बदलाव को कैप्चर करता है.
चुनी गई हर कैटगरी को मेज़र किए जा सकने वाले सब-कॉम्पोनेंट में बांटा जाता है. साथ ही, चुने नहीं गए कैटगरी को "चुने नहीं गए" मेट्रिक में जोड़ा जाता है.
ये मेट्रिक, पूरे सिस्टम में होने वाले डेटा खर्च को मेज़र करती हैं, न कि हर ऐप्लिकेशन के हिसाब से. ये मेट्रिक, Pixel 6, Pixel 6 Pro, और उसके बाद के वर्शन वाले डिवाइसों पर ही काम करती हैं:
power<category>Uw
: इस कैटगरी में, जांच के दौरान खर्च की गई बिजली की मात्रा.energy<category>Uws
: इस कैटगरी में, जांच के दौरान हर समय इकाई के हिसाब से ट्रांसफ़र की गई ऊर्जा की मात्रा.
कैटगरी में ये शामिल हैं:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
CPU
जैसी कुछ कैटगरी में, अन्य प्रोसेस से किए गए काम को अपने ऐप्लिकेशन से किए गए काम से अलग करना मुश्किल हो सकता है. रुकावट को कम करने के लिए, ज़रूरत के मुताबिक ऐप्लिकेशन और खातों को हटाएं या उन पर पाबंदी लगाएं.
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- बेसलाइन प्रोफ़ाइलें बनाना {:#creating-profile-rules}
- मैक्रो बेंचमार्क लिखना
- ऐप्लिकेशन के स्टार्टअप का विश्लेषण और ऑप्टिमाइज़ेशन {:#app-startup-analysis-optimization}