बेंचमार्क
नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
---|---|---|---|---|
10 सितंबर, 2025 | 1.4.1 | - | - | - |
डिपेंडेंसी का एलान करना
Benchmark पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
मैक्रोबेंचमार्क
अपने प्रोजेक्ट में Macrobenchmark का इस्तेमाल करने के लिए, अपने macrobenchmark मॉड्यूल के लिए, अपनी build.gradle
फ़ाइल में ये डिपेंडेंसी जोड़ें:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.1" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.1") }
माइक्रोबेंचमार्क
अपने प्रोजेक्ट में Microbenchmark का इस्तेमाल करने के लिए, अपने microbenchmark मॉड्यूल के लिए, अपनी build.gradle
फ़ाइल में ये डिपेंडेंसी जोड़ें:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.1" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.1") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Microbenchmark लाइब्रेरी, आपके माइक्रोबंचमार्क मॉड्यूल के साथ इस्तेमाल करने के लिए, Gradle प्लग इन भी उपलब्ध कराती है.
यह प्लग इन, मॉड्यूल के लिए डिफ़ॉल्ट रूप से कॉन्फ़िगरेशन सेट करता है. साथ ही, होस्ट में बेंचमार्क आउटपुट कॉपी सेट अप करता है और
./gradlew lockClocks
टास्क उपलब्ध कराता है.
प्लग इन का इस्तेमाल करने के लिए, अपनी टॉप-लेवल build.gradle
फ़ाइल के `plugins` ब्लॉक में यह लाइन शामिल करें:
Groovy
plugins { id 'androidx.benchmark' version '1.4.1' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.4.1" apply false }
इसके बाद, अपने बेंचमार्क मॉड्यूल की build.gradle
फ़ाइल में प्लग इन लागू करें
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या आपके पास इस लाइब्रेरी को बेहतर बनाने के लिए सुझाव हैं, तो हमें बताएं. कृपया नई समस्या सबमिट करने से पहले, इस लाइब्रेरी में शामिल मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
वर्शन 1.4
वर्शन 1.4.1
10 सितंबर, 2025
androidx.benchmark:benchmark-*:1.4.1
रिलीज़ हो गया है. वर्शन 1.4.1 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- अगर टारगेट प्रोसेस पहले से चल रही है और StartupMode तय नहीं किया गया है, तो फ़िक्स्ड
perfettoSdkTracing=true
(जैसे, माइक्रोबेंचमार्क में Compose को ट्रेस करते समय) टारगेट प्रोसेस को बंद कर देगा. (Ib2c1f)
वर्शन 1.4.0
30 जुलाई, 2025
androidx.benchmark:benchmark-*:1.4.0
रिलीज़ हो गया है. वर्शन 1.4.0 में ये बदलाव शामिल हैं.
1.3.0 के बाद हुए अहम बदलाव
माइक्रोबेंचमार्क
- Gradle प्रोजेक्ट आइसोलेशन का पालन करने के लिए, Gradle टास्क
lockClocks
औरunlockClocks
को टॉप लेवल के बजाय, बेंचमार्क प्रोजेक्ट पर ले जाया गया. BenchmarkRule
को फिर से फ़ैक्टर किया गया है, ताकि इसे कोरोटीन के ऊपर बनाया जा सके. साथ ही,yield()
के बेहतर व्यवहार के लिए सहायता मिल सके. इससे बेंचमार्क रन के दौरान, एएनआर के जोखिम को काफ़ी हद तक कम किया जा सकेगा. खास तौर पर, लंबे समय तक चलने वाले सीआई रन के दौरान. ध्यान दें: यूज़र इंटरफ़ेस (यूआई) के मानदंड,measureRepeatedOnMainThread
के साथ चलने चाहिए
Macrobenchmark
- API 34 और इसके बाद के वर्शन के लिए,
CompilationMode.None()
पर काम करने का तरीका जोड़ा गया है. ऐसा इसलिए किया गया है, क्योंकि ART के पहले लॉन्च के बाद, ऐप्लिकेशन को आंशिक रूप से कंपाइल करने की वजह से,CompilationMode.None()
की परफ़ॉर्मेंस में उतार-चढ़ाव आ सकता है. - एक्सपेरिमेंट के तौर पर उपलब्ध सुविधा - स्टार्टअप इनसाइट,
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))
पास करके स्टार्टअप मैक्रोबेंचमार्क में कुछ सामान्य समस्याओं को हाइलाइट कर सकती है. - ArtMetric जोड़ा गया है. इसका इस्तेमाल, JIT कंपाइलेशन और क्लास लोडिंग का पता लगाने के लिए किया जा सकता है. ये दोनों, बेसलाइन प्रोफ़ाइल ऑप्टिमाइज़ेशन की पुष्टि करने के लिए फ़ायदेमंद हैं.
बेसलाइन प्रोफ़ाइलें
BaselineProfileRule
अब एक से ज़्यादा प्रोसेस वाले ऐप्लिकेशन के लिए प्रोफ़ाइलें इकट्ठा करता है.
अन्य बदलाव
- TraceProcessor को उसकी अपनी लाइब्रेरी (
androidx.benchmark:benchmark-traceprocessor
) में ले जाया गया है, ताकि इसका इस्तेमालMacrobenchmark
मेट्रिक के अलावा, अन्य मामलों में भी किया जा सके. इसे डेस्कटॉप JVM पर भी चलाया जा सकता है. इसके लिए, आपको अपना ServerLifecycleManager तय करना होगा.
वर्शन 1.4.0-rc01
18 जून, 2025
androidx.benchmark:benchmark-*:1.4.0-rc01
रिलीज़ हो गया है. वर्शन 1.4.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- रनटाइम इमेज की वजह से, पहले इटरेशन के बाद
CompilationMode.None()
सबसे खराब परफ़ॉर्मेंस का आकलन नहीं कर पाता. इस समस्या को हल करने का तरीका जोड़ा गया. माफ़ करें, इस समाधान के लिए हर मैक्रोबेंचमार्क सुइट की शुरुआत में, रनटाइम इमेज को जान-बूझकर खराब करने के लिए पांच सेकंड का इंतज़ार करना पड़ता है (I4a4f1).
वर्शन 1.4.0-beta02
4 जून, 2025
androidx.benchmark:benchmark-*:1.4.0-beta02
रिलीज़ हो गया है. वर्शन 1.4.0-beta02 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Java डेवलपर के लिए,
BaselineProfileRule.collectWithResults()
को कॉल करना आसान बनाने के लिए,BaselineProfileConfig.Builder
जोड़ा गया. (I94905)
वर्शन 1.4.0-beta01
7 मई, 2025
androidx.benchmark:benchmark-*:1.4.0-beta01
रिलीज़ हो गया है. वर्शन 1.4.0-beta01 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
PerfettoTraceRule
कंस्ट्रक्टर का वैरिएंट जोड़ा गया. यहPerfettoConfig
(Ie53ba) स्वीकार करता है
गड़बड़ियां ठीक की गईं
- सही प्लगिन का इस्तेमाल करने के लिए,
TraceProcessor
स्टार्टअप इनसाइट लिंक फ़ॉर्मैट अपडेट किया गया है. साथ ही, डेलिमीटर को ज़्यादा साफ़ तौर पर दिखाया गया है (:
,%3A
से छोटा है और दोनों काम करते हैं) (Ie18ef) - प्रोसेस बंद करने के लिए, हमेशा 'बंद करें' विकल्प का इस्तेमाल करें. भले ही, डिवाइस रूट किया गया हो और सिस्टम ऐप्लिकेशन बंद किए जा रहे हों. यह फ़ॉर्म के अपवादों को ठीक करता है:
Expected no stdout/stderr from killall ... No such process
. (Idca2c)
बाहरी योगदान
TraceProcessorHttpServer
के लिए प्रॉक्सी अपवाद हैंडलर जोड़ा गया (I480f5)
वर्शन 1.4.0-alpha11
9 अप्रैल, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha11
रिलीज़ हो गया है. वर्शन 1.4.0-alpha11 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TraceProcessor
के आर्ग्युमेंट टाइमआउट में बदलाव किया गया: Java कॉलर के इस्तेमाल के लिए, timeoutMs की अवधि लंबी की गई. (I9fbb5)TraceProcessor
कंस्ट्रक्टर को इंटरनल के तौर पर मार्क करें. कॉल करने वाले लोगों कोTraceProcessor.startServer
याTraceProcessor.runServer
का इस्तेमाल करना चाहिए. (Ia8c5b)
गड़बड़ियां ठीक की गईं
MacrobenchmarkScope.killProcess
का इस्तेमाल करके ऐप्लिकेशन को बंद करते समय, बंद करने के निर्देश के नतीजों की पुष्टि करें. इससे, साइलेंट फ़ेलियर और टाइमआउट की गड़बड़ी को रोका जा सकता है. (I84555)
डिपेंडेंसी से जुड़े अपडेट
- यह लाइब्रेरी अब Kotlin 2.0 के भाषा लेवल को टारगेट करती है. इसके लिए, KGP 2.0.0 या इसके बाद का वर्शन ज़रूरी है. (Idb6b5)
वर्शन 1.4.0-alpha10
26 मार्च, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha10
रिलीज़ हो गया है. वर्शन 1.4.0-alpha10 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TraceProcessor
सर्वर लोड और क्वेरी करने के लिए, डिफ़ॉल्ट टाइमआउट को 60/30 सेकंड से बढ़ाकर 120 सेकंड कर दिया गया है. साथ ही, दोनों को एक टाइमआउट पैरामीटर के साथ कॉन्फ़िगर किया जा सकता है. (Ifec87)
गड़बड़ियां ठीक की गईं
- कुछ ऐसी समस्याओं को ठीक किया गया है जो
profileinstaller
के बिना किसी ऐप्लिकेशन की परफ़ॉर्मेंस की तुलना करने या उसकी प्रोफ़ाइल कैप्चर करने पर होती थीं. साथ ही, इसमेंBroadcastReciever
शामिल है. इसका असर सिर्फ़ रूट किए गए डिवाइसों पर होता है. (Ied308)
वर्शन 1.4.0-alpha09
12 मार्च, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha09
रिलीज़ हो गया है. वर्शन 1.4.0-alpha09 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- कस्टम लाइफ़साइकल के साथ आसानी से इस्तेमाल करने के लिए, बंद किए जा सकने वाले हैंडल के साथ
TraceProcessor
और सेशन एपीआई जोड़े गए. यह कोरूटीन और Java API का इस्तेमाल आसान बनाने की दिशा में भी एक कदम है.TraceProcessor.runServer {}
के लिए काम करने वाले एक्सटेंशन को अब एक्सपेरिमेंटल के तौर पर मार्क किया गया है. ऐसा इसलिए, क्योंकि आने वाले समय में इन्हें एक्सपेरिमेंटल से हटाकर सामान्य एक्सटेंशन के तौर पर उपलब्ध कराया जा सकता है. (I358b4)
गड़बड़ियां ठीक की गईं
pgrep
toybox में हुए बदलाव की वजह से, एपीआई 36 के साथ फ़िक्स्ड बेंचमार्क और बेसलाइन प्रोफ़ाइल कैप्चर काम नहीं कर रहा है. अब पूरी कमांड लाइन प्रिंट करने के लिए,-a
की ज़रूरत होती है. (Idc991)- डिफ़ॉल्ट ट्रेसिंग कॉन्फ़िगरेशन को फ़िल्टर करें, ताकि नए एपीआई लेवल पर ट्रेस में डेटा के नुकसान का जोखिम कम हो सके. (I54e8a)
androidx.benchmark.killExistingPerfettoRecordings
इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ा गया है. इसेfalse
पर सेट किया जा सकता है, ताकि पहले से मौजूद परफ़ेक्टो ट्रेस कैप्चर को जारी रखा जा सके. डिफ़ॉल्ट रूप से, डिवाइस पर पहले से मौजूद Perfect Trace कैप्चर बंद कर दिए जाते हैं, ताकि कोई रुकावट न आए. (I02a3c)- एपीआई 35 और इससे ऊपर के रिलीज़ किए गए ओएस वर्शन के लिए, JSON फ़ील्ड
context.osCodenameAbbreviated
अबREL
होगा. ऐसा इसलिए है, क्योंकि प्लैटफ़ॉर्म अब नॉन-न्यूमेरिक कोड नेम के साथ काम नहीं करता. (Ib17fd) - फ़्रेम फिर से सिंक होने पर,
FrameTimingMetric
में क्रैश होने की समस्या ठीक की गई. (I7c6f4, b/394610806) - अब यह नहीं माना जाएगा कि
Choreographer#doFrame
,FrameTimingQuery
के लिए मुख्य थ्रेड पर स्टैक फ़्रेम के सबसे ऊपर है. (Iee0e0, b/340206285)
वर्शन 1.4.0-alpha08
12 फ़रवरी, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha08
रिलीज़ हो गया है. वर्शन 1.4.0-alpha08 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TraceProcessor.runSession()
एक्सटेंशन एपीआई को एक्सपेरिमेंटल के तौर पर मार्क किया गया है, क्योंकि ये Android पर कंस्ट्रक्टर के तौर पर काम कर सकते हैं. (Ib0528, b/393640753)- स्टार्टअप की अहम जानकारी देने वाली सुविधा को अब सार्वजनिक तौर पर/आज़माने के तौर पर लागू किया गया है. साथ ही, इसे
TraceProcessor
आर्टफ़ैक्ट देखेंStartupInsights
पर ले जाया गया है. (I0aa00) BenchmarkRule.runWithTimingDisabled {}
को बंद करें औरBenchmarkRule.runWithMeasurementDisabled {}
का इस्तेमाल करें. इससे यह पता चलता है कि सभी मेट्रिक को रोक दिया गया है. इसके अलावा,MicrobenchmarkScope
सुपरक्लास को दिखाएं, क्योंकिrunWithMeasurementDisabled
फ़ंक्शन को फिर से एलान करके ऐक्सेस नहीं किया जा सकता. ऐसा इसलिए है, क्योंकि यह इनलाइन है. (I9e23b, b/389149423, b/149979716)- बेंचमार्क लाइब्रेरी को Kotlin 2.0 में ले जाया गया है. (I9d1e0)
androidx.benchmark.startupProfiles.enable
इंस्ट्रुमेंटेशन आर्ग्युमेंट हटाया गया. यह अब काम का नहीं है, क्योंकि इसेBaselineProfileRule.collect()
मेंincludeInStartupProfile
आर्ग्युमेंट से कंट्रोल किया जा सकता है. (I39eb4)
गड़बड़ियां ठीक की गईं
- प्रोफ़ाइलिंग के दौरान कॉल किए गए Microbenchmark के इंटरनल फ़ंक्शन की संख्या कम की गई है, ताकि उदाहरण के लिए, मेथड ट्रेस ज़्यादा साफ़ दिखें (Ifaed8)
- क्रैश होने की समस्या को ठीक करने के लिए अनुमानित फ़िक्स: '[
ProcessPid(processName=perfetto, pid=...)
] को रोका नहीं जा सका'. अब बेंचमार्क, क्रैश होने के बजाय एक मैसेज लॉग करेगा. ऐसा तब होगा, जब बैकग्राउंड में चल रही Perfetto प्रोसेस को बेंचमार्क चलाने से पहले रोका नहीं जा सकेगा. (I37d3e, b/323601788) - 'Expected
pm dump-profiles
stdout' लेबल वालेIllegalStateExceptions
को ठीक किया गया है. ये लेबल, आउटपुट फ़ॉर्मैट की बहुत ज़्यादा जांच करने की वजह से मिले थे. (I358dc)
वर्शन 1.4.0-alpha07
29 जनवरी, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha07
रिलीज़ हो गया है. वर्शन 1.4.0-alpha07 में ये बदलाव शामिल हैं.
नई सुविधाएं
BaselineProfileRule
ने अबcollectWithResults(...)
एपीआई लॉन्च किया है. इसमें कंप्यूट की गई प्रोफ़ाइलों के पाथ की सूची शामिल है. (I056f8)androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline
इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ा गया है. इसे फ़ॉल्स पर सेट किया जा सकता है, ताकि लोकल टेस्टिंग के लिएmeasureRepeatedOnMainThread
के थ्रो ऑन डेडलाइन व्यवहार को बंद किया जा सके. आम तौर पर, इसका सुझाव नहीं दिया जाता, क्योंकि इससे टेस्ट के दौरान एएनआर की संभावना बढ़ जाती है. (Idbeec, b/353226476)
एपीआई में हुए बदलाव
@JvmOverloads
कोMicrobenchmarkConfig
कंस्ट्रक्टर में जोड़ा गया. (I13fd3)BenchmarkRule
को फिर से फ़ैक्टर किया गया है, ताकि इसे कोरोटीन के ऊपर बनाया जा सके. साथ ही,yield()
के बेहतर व्यवहार के लिए सहायता मिल सके. इस रीफ़ैक्टरिंग से, एक्सपेरिमेंट के तौर पर उपलब्ध कईBenchmarkState
एपीआई हटा दिए गए हैं. हालांकि, ज़रूरत के हिसाब से इन्हें बदला जाएगा. इसके अलावा,runWithMeasurementDisabled
जोड़ा गया है, ताकि यह साफ़ तौर पर बताया जा सके कि मेज़रमेंट की सुविधा काम नहीं कर रही है. आने वाले समय में,runWithTimingDisabled
का इस्तेमाल बंद कर दिया जाएगा. (I19837, b/389149423, b/311242861)PerfettoTraceProcessor
को नएandroidx.benchmark:benchmark-traceprocessor
आर्टफ़ैक्ट मेंTraceProcessor
पर ले जाएं. साथ ही, इसके ज़्यादातर एपीआई को एक्सपेरिमेंटल से हटा दें. ट्रेस से डेटा पढ़ने वाले किसी भी कस्टमTraceMetric
को नएTraceProcessor
इंपोर्ट पर अपडेट करना होगा. नयाTraceProcessor
एपीआई, पुराने एपीआई की तरह ही काम करता है. हालांकि, यह एक स्टैंडअलोन इंटरफ़ेस लाइब्रेरी है. यह कुछ हद तक Room कीandroidx.sqlite
लेयर के जैसा है. इसे Android के लिए खास तौर पर लागू किया गया है और यह मैक्रोबेंचमार्क में पहले से मौजूद है. नए आर्टफ़ैक्ट का इस्तेमाल JVM पर भी किया जा सकता है. हालांकि, फ़िलहाल आपकोTraceProcessor
बाइनरी की अपनी कॉपी शुरू करनी होगी और उससे कनेक्ट करने के लिए पोर्ट देना होगा. (I3a767, I62563, b/381134564)
गड़बड़ियां ठीक की गईं
MacrobenchmarkScope.startActivityAndWait
के टारगेट प्रोसेस को लॉन्च न कर पाने पर, ज़्यादा जानकारी देने वाला गड़बड़ी का मैसेज दिखाएं. ऐसा टारगेट प्रोसेस के क्रैश होने की वजह से हो सकता है. इसके बजाय, 'गतिविधि लॉन्च होने की पुष्टि नहीं की जा सकी' मैसेज (I3539b) दिखाएं, जिसमें ज़्यादा जानकारी नहीं होती- Kotlin के सैंपल में मौजूद कई सिंटैक्स गड़बड़ियों को ठीक किया गया है. साथ ही, Java / build.gradle के कई सैंपल में सिंटैक्स हाइलाइटिंग की सुविधा को ठीक किया गया है. (Ib3808)
ArtMetric
औरCaptureInfo
पैरामीटर के दस्तावेज़ों के बारे में ज़्यादा जानकारी दी गई. (I96e60)
वर्शन 1.4.0-alpha06
11 दिसंबर, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha06
रिलीज़ हो गया है. वर्शन 1.4.0-alpha06 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
PerfettoTraceProcessor.Session.query()
में@Language("sql")
के इस्तेमाल को हटा दिया गया है, क्योंकि Studio में हाइलाइट करने/पार्स करने की सुविधा काम नहीं कर रही है. (Idc2fa, b/377733398)
गड़बड़ियां ठीक की गईं
- यह लाइब्रेरी अब JSpecify nullness annotations का इस्तेमाल करती है. ये टाइप-यूज़ होते हैं. Kotlin डेवलपर को सही इस्तेमाल के लिए, कंपाइलर के इस तर्क का इस्तेमाल करना चाहिए:
-Xjspecify-annotations=strict
(यह Kotlin कंपाइलर के 2.1.0 वर्शन से डिफ़ॉल्ट रूप से शुरू होता है). (I46810, b/326456246) - क्लास लोड (न कि init) की रिपोर्ट करने के लिए,
ArtMetric
को ठीक किया गया. साथ ही, रनटाइम के व्यवहार के बारे में बताने के लिए, दस्तावेज़ों को बेहतर बनाया गया. (I9915c) - Android के मल्टीयूज़र मोड में, सिर्फ़ रूट किए गए डिवाइसों पर रूट के तौर पर निर्देश लागू करें. (I88b44)
वर्शन 1.4.0-alpha05
13 नवंबर, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05
रिलीज़ हो गया है. वर्शन 1.4.0-alpha05 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- एपीआई 34 और इसके बाद के वर्शन में, उस समस्या को ठीक किया गया है जिसकी वजह से
CompilationMode.None()
की परफ़ॉर्मेंस में उतार-चढ़ाव होता था. यह परफ़ॉर्मेंस, शुरुआती और सबसे खराब परफ़ॉर्मेंस को नहीं दिखाती थी. यह प्लैटफ़ॉर्म में हुए बदलाव के हिसाब से काम करता है. इससे ART की कंपाइलेशन स्थितिverify
, ऐप्लिकेशन के पहली बार लॉन्च होने के कुछ समय बाद, ऐप्लिकेशन को आंशिक रूप से कंपाइल कर पाती है. इससे सिर्फ़ क्लास लोडिंग पर असर पड़ता है. (Ie48d0) - उस समस्या को ठीक किया गया है जिसमें (खास तौर पर छोटे) ऐसे ट्रेस कैप्चर किए जा सकते थे जो बिल्ट-इन Macrobenchmark मेट्रिक से मेज़रमेंट की रिपोर्ट नहीं करते थे. ऐसा Perfetto ट्रेस में प्रोसेस के नाम को छोटा किए जाने की वजह से होता था. अब मैक्रोबेंचमार्क, इस समस्या को हल करने के लिए, सभी बिल्ट-इन क्वेरी में काटे गए पैकेज के नाम को खोजता है. इसके अलावा, यह उम्मीद के मुताबिक पैकेज के नाम को भी खोजता है. ध्यान दें कि कस्टम
TraceMetric
लागू करने वाले याPerfettoSession.query
को सीधे तौर पर कॉल करने वाले अन्य लोग, इस व्यवहार को लागू कर सकते हैं. इसके लिए, उन्हें Perfetto क्वेरी मेंprocess.name LIKE "$packageName"
को बदलकर(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
करना होगा. (I5bf01, b/377565760)
वर्शन 1.4.0-alpha04
30 अक्टूबर, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04
रिलीज़ हो गया है. वर्शन 1.4.0-alpha04 में ये बदलाव शामिल हैं.
नई सुविधाएं
- (एक्सपेरिमेंट के तौर पर उपलब्ध) सेकंडरी उपयोगकर्ता के लिए इंस्टॉल किए गए ऐप्लिकेशन पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू करें. उदाहरण के लिए, हेडलेस Android Auto डिवाइसों पर मौजूद कोई भी ऐप्लिकेशन. इस सुविधा को कुछ स्थितियों में टेस्ट किया गया है. अगर यह आपके लिए काम नहीं करती है, तो हमें गड़बड़ी के बारे में बताएं. (I9fcbe, b/356684617, b/373641155)
गड़बड़ियां ठीक की गईं
isProfileable
अब हमेशा बेंचमार्क बिल्ड में बदल जाता है. साथ ही,isDebuggable
भी अब हमेशा बेंचमार्क औरnonMinified
(बेसलाइन प्रोफ़ाइल कैप्चर) बिल्ड, दोनों में बदल जाता है. (I487fa, b/369213505)- एपीआई 28 से पहले के कुछ फ़िज़िकल डिवाइसों पर, कंपाइलेशन का पता लगाने की सुविधा से जुड़ी समस्याओं को ठीक किया गया है. इससे json
context.compilationMode
के साथ-साथandroidx.benchmark.requireAot=true
के व्यवहार पर भी असर पड़ता है. अब यह सुविधा, गलत तरीके से काम नहीं करती (Ic3e08, b/374362482) - अगर
CpuEventCounter
मेट्रिक में अमान्य मेज़रमेंट दिखते हैं, तो थ्रो करें. उदाहरण के लिए, instructions/cpucycles==0 (I8c503)
वर्शन 1.4.0-alpha03
16 अक्टूबर, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha03
रिलीज़ हो गया है. वर्शन 1.4.0-alpha03 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Macrobenchmark:
ArtMetric
जोड़ता है. इसका इस्तेमाल, प्रोफ़ाइल कवरेज या Android RunTime के सामान्य परफ़ॉर्मेंस की जांच करने के लिए किया जा सकता है. यह कुकी, JIT, क्लास शुरू होने (जहां उपलब्ध हो) और क्लास की पुष्टि करने की संख्या और कुल अवधि को कैप्चर करती है. इसके अलावा,CaptureInfo
में बदलाव किए गए हैं, ताकि डिफ़ॉल्ट रूप से वैकल्पिक एआरटी मेनलाइन वर्शन शामिल किया जा सके. (I930f7) - मानदंड के JSON आउटपुट में
coefficientOfVariation
जोड़ें, ताकि मानदंड के किसी रन में स्थिरता दिखाई जा सके. (Ib14ea)
गड़बड़ियां ठीक की गईं
- AVD डिवाइस में स्पेस होने पर,
CollectBaselineProfileTask
से जुड़ी समस्या ठीक की गई. (Ia0225, b/371642809) StartupMode.COLD
अपवादों से जुड़ी गड़बड़ियों को ठीक करने के लिए अनुमानित तरीका:Package <packagename> must not be running prior to cold start!
. अब,MacrobenchmarkScope.killProcess()
(इसमें हर इटरेशन से पहले चलने वाला वह फ़ंक्शन भी शामिल है जिसका इस्तेमालStartupMode.COLD
के व्यवहार को लागू करने के लिए किया जाता है) यह पुष्टि करने के लिए इंतज़ार करेगा कि ऐप्लिकेशन की सभी प्रोसेस बंद हो गई हैं. (I60aa6, b/351582215)- उस समस्या को ठीक किया गया है जिसकी वजह से, रूट किए गए कुछ एम्युलेटर पर UNLOCKED_ गड़बड़ी दिखती थी. (Ic5117)
- यह लाइब्रेरी अब JSpecify nullness annotations का इस्तेमाल करती है. ये टाइप-यूज़ होते हैं. Kotlin डेवलपर को सही इस्तेमाल के लिए, कंपाइलर के इस तर्क का इस्तेमाल करना चाहिए:
-Xjspecify-annotations=strict
(यह Kotlin कंपाइलर के 2.1.0 वर्शन से डिफ़ॉल्ट रूप से शुरू होता है). (I7104f, b/326456246)
वर्शन 1.4.0-alpha02
2 अक्टूबर, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha02
रिलीज़ हो गया है. वर्शन 1.4.0-alpha02 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Gradle टास्क
lockClocks
औरunlockClocks
को टॉप लेवल पर उपलब्ध कराने के बजाय, बेंचमार्क प्रोजेक्ट पर ले जाया गया. यह बदलाव करना ज़रूरी था, क्योंकि प्रोजेक्ट आइसोलेशन को तोड़े बिना, इन्हें टॉप लेवल की कार्रवाइयों के तौर पर रजिस्टर करने का कोई तरीका नहीं है. (I02b8f, b/363325823)
गड़बड़ियां ठीक की गईं
BaselineProfileRule
अब मल्टी-प्रोसेस ऐप्लिकेशन के लिए प्रोफ़ाइलें इकट्ठा करता है. इसके लिए, यह ब्लॉक के आखिर में चल रही हर प्रोसेस को सिग्नल भेजता है, ताकि प्रोफ़ाइलें डंप की जा सकें. अगर प्रोफ़ाइल के आधार पर कंपाइल किए गए डेटा को ब्रॉडकास्ट करने के लिए कोई प्रोसेस नहीं मिलती है, तो कंपाइलेशन पूरा नहीं होगा. ऐसा इसलिए, क्योंकि इसमें प्रोफ़ाइल का डेटा शामिल नहीं किया गया है. इसके अलावा, डंप के इंतज़ार की अवधि को कंट्रोल करने के लिए, इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ा गया:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469)- Benchmark
1.3.2
से: Firebase Test Lab (FTL) की इस समस्या को ठीक किया गया है. इसमें FTL, Baseline Profile Gradle Plugin से Baseline Profile या Macrobenchmark के नतीजे वाली फ़ाइलें नहीं खींच पाता था. (I2f678, b/285187547)
FTL का इस्तेमाल करने के लिए, प्लगिन को प्लगिन ब्लॉक में मौजूद बेसलाइन प्रोफ़ाइल मॉड्यूल पर लागू करें. इसके लिए:
plugins {
...
id("com.google.firebase.testlab")
}
इसके बाद, Firebase टेस्ट लैब को इनके साथ कॉन्फ़िगर करें:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
इसके अलावा, बनाए गए FTL डिवाइस को बेसलाइन प्रोफ़ाइल एक्सटेंशन में जोड़ना होगा:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
वर्शन 1.4.0-alpha01
18 सितंबर, 2024
androidx.benchmark:benchmark-*:1.4.0-alpha01
रिलीज़ हो गया है. वर्शन 1.4.0-alpha01 में ये बदलाव शामिल हैं.
नई सुविधा - ऐप्लिकेशन के शुरू होने में लगने वाले समय के बारे में अहम जानकारी
- ऐप्लिकेशन स्टार्टअप की अहम जानकारी के शुरुआती वर्शन को मैक्रोबेंचमार्क में चालू किया जा सकता है. (09fae38)
स्टार्टअप के मानदंड में इसे चालू करने के लिए:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
इसके बाद, स्टार्टअप बेंचमार्क चलाने पर, ट्रेस का विश्लेषण किया जाएगा, ताकि सामान्य समस्याओं का पता लगाया जा सके.साथ ही, उन्हें मेट्रिक के बाद, बेंचमार्क टैब में Studio टेस्ट आउटपुट में प्रिंट किया जाएगा. उदाहरण के लिए:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
इस सुविधा पर अब भी काम चल रहा है. आने वाले समय में, इससे जुड़े दस्तावेज़ों को बेहतर बनाया जाएगा और इसे ज़्यादा से ज़्यादा लोगों के लिए उपलब्ध कराया जाएगा. हालांकि, इस सुविधा के बारे में आपके सुझाव/राय का स्वागत है.
नई सुविधाएं
- सभी बेसलाइन प्रोफ़ाइल चेतावनियों को बंद करने के लिए, gradle प्रॉपर्टी
androidx.baselineprofile.suppressWarnings
जोड़ी गई. (314153a) - माइक्रोबेंच मेट्रिक अब Perfetto ट्रेस में काउंटर के तौर पर दिखती हैं. (3214854)
- jit को बंद करने के लिए एक्सपेरिमेंटल स्क्रिप्ट जोड़ी गई हैं. इसके लिए, रूट / रनटाइम रीस्टार्ट करना ज़रूरी है. साथ ही, डिवाइस की परफ़ॉर्मेंस/टेस्ट की स्थिति को रीसेट करना ज़रूरी है. फ़िलहाल, इन्हें Gradle टास्क के तौर पर पब्लिश नहीं किया गया है. (7c3732b)
- एम्युलेटर पर टेस्ट चलाने के दौरान, टेस्ट स्किप करने के लिए बेंचमार्क आर्ग्युमेंट जोड़ा गया.
automaticGenerationDuring
बिल्ड चालू होने पर, बेंचमार्क भी बेसलाइन प्रोफ़ाइल जनरेट करने की प्रोसेस को ट्रिगर करेंगे. अगर इम्यूलेटर का इस्तेमाल किया जाता है, तो यह काम नहीं करेगा. नए आर्ग्युमेंटskipBenchmarksOnEmulator
की मदद से, हम टेस्ट को स्किप कर सकते हैं. (0c2ddcd) - परफ़ॉर्मेंस इवेंट को चालू करने के लॉजिक में बदलाव किया गया है, ताकि यह एपीआई 23 और उसके बाद के वर्शन पर काम कर सके (2550048)
एपीआई में हुए बदलाव
- मौजूदा एक्सपेरिमेंटल
PerfettoConfig
आर्ग्युमेंट कोMacrobenchmarkRule.measureRepeated()
, नएExperimentalConfig
ऑब्जेक्ट में ले जाया गया.
गड़बड़ियां ठीक की गईं
lockClocks.sh
के लिए फिर से कोशिश करने की संख्या बढ़ाएं (99e9dac)- अगर
nonMinified
और बेंचमार्क बिल्ड टाइप पहले से मौजूद हैं, तो उन्हें न बनाएं. बग की वजह से,nonMinified
और बेंचमार्क बिल्ड टाइप मौजूद होने पर भी, उन्हें फिर से बनाया जा रहा था. (e75f0a5) TraceSectionMetric
नतीजों में से, ऐसे स्लाइस को अनदेखा करें जो खत्म नहीं होते. (a927d20)- एम्युलेटर की बेहतर जांच, ताकि
sdk_
प्रीफ़िक्स को ध्यान में रखा जा सके. (1587de8) FrameTimingGfxInfoMetric
में, ऐसे पैकेज को 'क्लियर किया गया' के तौर पर मार्क करें जो नहीं चल रहे हैं. (35cc79c)androidx.benchmark.cpuEventCounter
से, निर्देश वाले इवेंट के अलावा अन्य इवेंट के लिए गलत वैल्यू जनरेट होने की समस्या ठीक की गई. (06edd59)- मेट्रिक के प्राथमिकता क्रम का पालन करने के लिए,
resumeTiming/runWithTimingDisabled
को ठीक किया गया है. साथ ही, कम प्राथमिकता वाली मेट्रिक को रोकने/फिर से शुरू करने का असर, ज़्यादा प्राथमिकता वाली मेट्रिक के नतीजों पर काफ़ी हद तक कम किया गया है. उदाहरण के लिए, अगरcpuEventCounter.enable
इंस्ट्रुमेंटेशन आर्ग्युमेंट के ज़रिए सीपीयू परफ़ॉर्मेंस काउंटर का इस्तेमाल किया जा रहा है, तो pause/resume होने पर timeNs में अब ज़्यादा कमी नहीं आएगी. (5de0968)
वर्शन 1.3
वर्शन 1.3.4
26 मार्च, 2025
androidx.benchmark:benchmark-*:1.3.4
रिलीज़ हो गया है. वर्शन 1.3.4 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Benchmark Baseline Gradle प्लगिन में, Gradle प्रोजेक्ट आइसोलेशन से जुड़ी समस्याओं को ठीक किया गया है. (b/404523257)
वर्शन 1.3.3
16 अक्टूबर, 2024
androidx.benchmark:benchmark-*:1.3.3
रिलीज़ हो गया है. वर्शन 1.3.3 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- एवीडी डिवाइस के नाम में स्पेस होने पर,
CollectBaselineProfileTask
की समस्या ठीक की गई (Ia0225, b/371642809)
वर्शन 1.3.2
2 अक्टूबर, 2024
androidx.benchmark:benchmark-*:1.3.2
रिलीज़ हो गया है. वर्शन 1.3.2 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Firebase Test Lab (FTL) में, Baseline Profile Gradle Plugin से बेसलाइन प्रोफ़ाइल या मैक्रोबेंचमार्क के नतीजे वाली फ़ाइलें नहीं मिल रही थीं. इस समस्या को ठीक कर दिया गया है. (I2f678, b/285187547)
FTL का इस्तेमाल करने के लिए, प्लगिन को प्लगिन ब्लॉक में मौजूद बेसलाइन प्रोफ़ाइल मॉड्यूल पर लागू करें. इसके लिए:
plugins {
...
id("com.google.firebase.testlab")
}
इसके बाद, Firebase टेस्ट लैब को इनके साथ कॉन्फ़िगर करें:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
इसके अलावा, बनाए गए FTL डिवाइस को बेसलाइन प्रोफ़ाइल एक्सटेंशन में जोड़ना होगा:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
वर्शन 1.3.1
18 सितंबर, 2024
androidx.benchmark:benchmark-*:1.3.1
रिलीज़ हो गया है. वर्शन 1.3.1 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- सभी बेसलाइन प्रोफ़ाइल चेतावनियों (I7c36e, b/349646646) को बंद करने के लिए, gradle प्रॉपर्टी
androidx.baselineprofile.suppressWarnings
जोड़ी गई - Gradle प्लगिन की फ़िक्स्ड बेसलाइन प्रोफ़ाइल, रैपर बनाने के बजाय ऐप्लिकेशन से बनाई गई
nonMinified…
औरbenchmark…
का इस्तेमाल करती है. (Ia8934, b/361370179) - एम्युलेटर पर
automaticGenerationDuringBuild
चालू होने पर,java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
की समस्या ठीक की गई. नए तर्क का इस्तेमाल, टेस्ट को स्किप करने के लिए किया जाता है. (If3f51, b/355515798) - माइक्रोबेंचमार्क को छोटा करना - बेंचमार्क लाइब्रेरी के ProGuard में
org.junit.runner.notification.RunListener
की सबक्लास को बनाए रखें (Ic8ed5, b/354264743) TraceSectionMetric
को ठीक किया गया है, ताकि खत्म न होने वाले स्लाइस को अनदेखा किया जा सके. पहले, इन्हें -1 अवधि का माना जाता था. जैसे, जोड़ते समय या कम से कम अवधि ढूंढते समय. (If74b7)FrameTimingGfxInfoMetric
में उस समस्या को ठीक किया गया है जिसकी वजह से, प्रोसेस पहले से नहीं चल रही होने पर मेट्रिक शुरू करने पर क्रैश हो जाती थी. (I6e412)
वर्शन 1.3.0
21 अगस्त, 2024
androidx.benchmark:benchmark-*:1.3.0
रिलीज़ हो गया है. वर्शन 1.3.0 में ये बदलाव शामिल हैं.
1.2.0 के बाद से माइक्रोबेंचमार्क में हुए बदलाव
- ज़्यादातर डिवाइसों पर माइक्रोबेंचमार्क चलाने पर, मेथड ट्रेसिंग की सुविधा डिफ़ॉल्ट रूप से चालू रहती है
- मेज़रमेंट के बाद, मेथड ट्रेसिंग एक अलग फ़ेज़ के तौर पर चलती है. इससे सटीक मेज़रमेंट और मेथड ट्रेस, दोनों को एक ही बेंचमार्क रन से आउटपुट किया जा सकता है
- Android OS और एआरटी के कुछ वर्शन पर, मेथड ट्रेसिंग की सुविधा उपलब्ध नहीं है. इसलिए, मेज़रमेंट के बाद के चरणों पर इसका असर पड़ेगा. इन वर्शन पर, मेथड ट्रेसिंग की सुविधा डिफ़ॉल्ट रूप से बंद होती है. साथ ही, Studio के आउटपुट में एक चेतावनी दिखती है
- मुख्य थ्रेड के बेंचमार्क और एएनआर
- कई सेकंड तक चलने पर एएनआर से बचने के लिए, यूज़र इंटरफ़ेस (यूआई) थ्रेड के बेंचमार्क (जैसे, Compose/View यूज़र इंटरफ़ेस (यूआई) के साथ इंटरैक्ट करने वाले) के लिए
measureRepeatedOnMainThread
जोड़ा गया. - अगर एएनआर से बचने की समयसीमा खत्म होने वाली है, तो मेथड ट्रेस को छोड़ दिया जाता है. इस व्यवहार को बंद करने के लिए,
androidx.benchmark.profiling.skipWhenDurationRisksAnr
को false पर सेट करें. हालांकि, सीआई रन के लिए ऐसा करने का सुझाव नहीं दिया जाता है, क्योंकि एएनआर की वजह से लंबे सीआई रन में समस्या आ सकती है.
- कई सेकंड तक चलने पर एएनआर से बचने के लिए, यूज़र इंटरफ़ेस (यूआई) थ्रेड के बेंचमार्क (जैसे, Compose/View यूज़र इंटरफ़ेस (यूआई) के साथ इंटरैक्ट करने वाले) के लिए
- काट-छांट करना
- Proguard के नियमों को एम्बेड किया गया है, ताकि कोड छोटा करने की सुविधा चालू होने पर माइक्रोबेंचमार्किंग को बेहतर बनाया जा सके
- किसी लाइब्रेरी मॉड्यूल में कोड छोटा करने/R8 के लिए AGP 8.3 की ज़रूरत होती है. इसे
build.gradle
मेंandroid.buildTypes.release.androidTest.enableMinification
के ज़रिए चालू किया जा सकता है - डेड कोड हटाने से रोकने के लिए, एक्सपेरिमेंटल
BlackHole.consume()
एपीआई जोड़ा गया (If6812, b/286091643)
- मेट्रिक
- सीपीयू इवेंट काउंटर की एक्सपेरिमेंटल सुविधा (
perf_event_open
से मिलने वाली मेट्रिक. इसके लिए, प्लैटफ़ॉर्म के ज़्यादातर वर्शन पर रूट ऐक्सेस की ज़रूरत होती है),InstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
के ज़रिए ऐक्सेस किया जा सकता है (इसेtrue
पर सेट किया जा सकता है). साथ ही,androidx.benchmark.cpuEventCounter.events
को (Instructions,CpuCycles
) पर सेट किया जा सकता है. यह सुविधा, कुछ userdebug एम्युलेटर पर काम करनी चाहिए. हालांकि, उपलब्ध सभी एम्युलेटर पर इसकी जांच नहीं की गई है
- सीपीयू इवेंट काउंटर की एक्सपेरिमेंटल सुविधा (
MACRObenchmark 1.2.0 के बाद किए गए बदलाव
- मैक्रोबेंचमार्क के लिए, मेथड ट्रेसिंग को बेहतर बनाया गया है.
- अब मेथड ट्रेस,
measureBlock
की अवधि के हिसाब से तय किए जाते हैं. साथ ही, अगर प्रोसेस कई बार शुरू होती है, तो ये कई सेशन कैप्चर कर सकते हैं. - इससे पहले, मेथड ट्रेसिंग सिर्फ़
StartupMode.COLD
बेंचमार्क के लिए काम करती थी. साथ ही, यहmeasureBlocks
के लिए कोई डेटा कैप्चर नहीं करती थी, जिसने टारगेट प्रोसेस को रीस्टार्ट नहीं किया था - मैक्रोबेंचमार्क में फ़्लश की गई फ़िक्स्ड मेथड ट्रेस, ताकि मेथड ट्रेस पूरी तरह से कैप्चर की जा सकें और मान्य हों. भले ही, डिवाइस की स्पीड कम हो. (I6349a, b/329904950)
- अब मेथड ट्रेस,
- जब प्रोसेस बंद हो जाती है, तब अलग-अलग
warmUp
इटरेशन के दौरान ART प्रोफ़ाइल को सही तरीके से डंप किया जाता है, ताकिCompilationMode.Partial(warmup=N)
मेज़रमेंट ज़्यादा सटीक हों. (I17923) - ड्रॉप शेडर ब्रॉडकास्ट करने में गड़बड़ी का मैसेज
- शेडर ब्रॉडकास्ट करने में गड़बड़ी होने पर दिखने वाले मैसेज में, डीबग करने से जुड़े सुझाव जोड़े गए
- बिना
ProfileInstaller
1.3 वाले ऐप्लिकेशन की परफ़ॉर्मेंस की जांच करते समय क्रैश होने की समस्या को ठीक करने के लिए, शेडर ड्रॉप करने के व्यवहार को बदलने वाले दो इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ें:androidx.benchmark.dropShaders.enable=true/false
: इसका इस्तेमाल, सभी शेडर ड्रॉपिंग को स्किप करने के लिए किया जा सकता है. इसमेंStartupMode.Cold
लॉन्च में की गई शेडर ड्रॉपिंग भी शामिल है. खास तौर पर, उन ऐप्लिकेशन की परफ़ॉर्मेंस की तुलना करते समय जो अब तक profileinstaller 1.3 का इस्तेमाल नहीं करते हैंandroidx.benchmark.dropShaders.throwOnFailure=true/false
: इसका इस्तेमाल, शेडर हटाने की कोशिश करते समय होने वाली गड़बड़ियों को ठीक करने के लिए किया जा सकता है. उदाहरण के लिए, जब profileinstaller 1.3 (I4f573) के बिना ऐप्लिकेशन की परफ़ॉर्मेंस की जांच की जाती है
- एक्सपेरिमेंट के तौर पर
MacrobenchmarkRule#measureRepeated
वैरिएंट जोड़ा गया है. यह पूरी तरह से पसंद के मुताबिक Perfetto ट्रेस रिकॉर्डिंग के लिए, कस्टमPerfettoConfig
लेता है. ध्यान दें कि गलत तरीके से कॉन्फ़िगर किए गए कॉन्फ़िगरेशन की वजह से, हो सकता है कि मेट्रिक क्लास काम न करें. (Idfd3d, b/309841164, b/304038384) - दखल कम करने के लिए, Macrobenchmark चलाने से पहले बैकग्राउंड में चल रही dexopt नौकरियों को रद्द करें. (I989ed)
- मैक्रोबेंचमार्क अब टारगेट ऐप्लिकेशन के एआरटी प्रोफ़ाइल को फ़्लश करने के लिए एक सेकंड तक इंतज़ार करता है. इससे पहले, यह 500 मि॰से॰ तक इंतज़ार करता था. (I85a50, b/316082056)
- TraceSectionMetric में बदलाव किया गया
- ध्यान दें: नीचे दिए गए
TraceSectionMetric
बदलावों से, सीआई के इस्तेमाल में आउटपुट पर असर पड़ सकता है. साथ ही, इससे गड़बड़ियां हो सकती हैं या पार्सिंग में रुकावट आ सकती है - अब सम को डिफ़ॉल्ट रूप से चुना जाता है, क्योंकि इस मेट्रिक का इस्तेमाल ज़्यादातर बार-बार होने वाले इवेंट के लिए किया जाता है. ऐसे मामलों में, फ़र्स्ट से डेटा खारिज हो जाएगा
- इसे ज़्यादा विकल्पों के साथ, पसंद के मुताबिक बनाने के लिए बदला गया है
- मोड के नाम अब मेट्रिक आउटपुट के नाम में एम्बेड किए गए हैं (Studio और JSON में)
- अब
Trace.{begin|end}AsyncSection
का इस्तेमाल करके बनाए गए स्लाइस काम करते हैं.
- ध्यान दें: नीचे दिए गए
- मेट्रिक
- पावर -
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
, औरPowerMetric.deviceSupportsPowerEnergy()
को जोड़ा गया - रिटर्न टाइप से मेल खाने के लिए,
Metric.getResult
का नाम बदलकरgetMeasurements
कर दिया गया है - स्टार्टअप का पता लगाने में हुई सभी गड़बड़ियों के लिए, log.w / exception लेबल जोड़े गए. इससे मौजूदा व्यवहार में कोई बदलाव नहीं होता. इसलिए, कुछ गड़बड़ियां दिखती हैं और अन्य गड़बड़ियों का पता नहीं चलता. हालांकि, इससे गड़बड़ियों को समझना आसान हो जाता है. आम तौर पर, स्टार्टअप मेट्रिक की रिपोर्ट न करने वाले
Log.w()
वे होते हैं जिनमें नॉन-फ़्रेम इवेंट मौजूद नहीं होते. स्टार्टअप का पता चलने पर अपवाद थ्रो किए जाते हैं. हालांकि, यूआई/आरटी स्लाइस से फ़्रेम टाइमिंग की जानकारी को छोड़कर. (Id240f, b/329145809) FrameTimingMetric
मेंframeCount
मेज़रमेंट जोड़ा गया है. इससे उन स्थितियों का पता लगाने में मदद मिलेगी जहां फ़्रेम की संख्या में बदलाव होने की वजह से मेज़रमेंट में बदलाव होता है. जैसे, नए ऐनिमेशन जोड़े गए हैं या अमान्य होने की समस्याएं ठीक की गई हैं. (I1e5aa)- यह साफ़ तौर पर बताया गया है कि दस्तावेज़ों में उपलब्ध होने पर,
frameOverrunMs
को ट्रैकिंग के लिए पसंदीदा मेट्रिक माना जाता है. साथ ही, यह भी बताया गया है कि ऐसा क्यों है. (I18749, b/329478323) - इस समस्या को ठीक किया गया है. इसमें ट्रेस की शुरुआत और आखिर में मौजूद ऐसे फ़्रेम को एक साथ जोड़ा जा सकता था जो खत्म नहीं हुए हैं. इससे, एक ही फ़्रेम को बहुत लंबा फ़्रेम बताया जाता था. (I39353, b/322232828)
- फ़्रेम नहीं बनने पर,
FrameTimingMetric
गड़बड़ी को बेहतर बनाया गया है. साथ ही, मेट्रिक पार्स करने में गड़बड़ी होने पर, समस्या का पता लगाने में मदद करने के लिए, हमेशा ट्रेस का लिंक आउटपुट किया जाता है. (I956b9) FrameTimingMetric
में क्रैश होने की समस्या को ठीक किया गया है. यह समस्या, फ़्रेम आईडी को पार्स करने के दौरान होती थी. खास तौर पर, यह समस्या कुछ OEM डिवाइसों पर होती थी. (Ia24bc, b/303823815, b/306235276)FrameMetrics
में जांच के नियमों को आसान बनाया गया है. साथ ही, गड़बड़ी के मैसेज में ज़्यादा जानकारी जोड़ी गई है. (Iadede)
- पावर -
बेसलाइन प्रोफ़ाइल कैप्चर / Gradle प्लगिन में 1.2.0 के बाद से हुए बदलाव
- AGP के सुझाए गए ज़्यादा से ज़्यादा वर्शन को बढ़ाकर 9.0.0-alpha01 कर दिया गया है.
- यह पक्का करें कि
mergeArtProfile
औरmergeStartupProfile
टास्क, बेसलाइन प्रोफ़ाइल जनरेट होने का हमेशा इंतज़ार करें. (I623d6, b/343086054) - बेसलाइन प्रोफ़ाइल जनरेट करने पर, आपको इस बात की खास जानकारी मिलेगी कि क्या बदला है (I824c8, b/269484510)
- चेतावनी बंद करने के लिए डीएसएल जोड़ा गया (Ic4deb, b/331237001)
- यह पक्का करने के लिए कि
automaticGenerationDuringBuild
बंद होने पर, बेंचमार्क जनरेट की गई बेसलाइन प्रोफ़ाइलों का इस्तेमाल करें, इस समस्या को ठीक किया गया है (Ic144f, b/333024280) nonMinified
या बेंचमार्क बिल्ड टाइप को पसंद के मुताबिक बनाने पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू करने के लिए,BaselineProfile
gradle प्लगिन प्रॉपर्टी को बदलने की सुविधा से जुड़ी समस्या ठीक की गई. (Ib8f05, b/324837887)- AGP 8.3.0-alpha15 से पहले के वर्शन में, AAR में लाइब्रेरी की बेसलाइन प्रोफ़ाइलें शामिल करने से जुड़ी समस्या को ठीक किया गया है. (I1d2af, b/313992099)
- जनरेशन टास्क के आखिर में, तय की गई बेसलाइन और स्टार्टअप प्रोफ़ाइल का आउटपुट यूआरएल ठीक किया गया. (I802e5, b/313976958)
1.2.0 के बाद हुए अन्य अहम बदलाव
- ट्रेस कैप्चर करना
- गड़बड़ी से लॉग की गई चेतावनी तक, Perfetto को शुरू करते समय EXITCODE 2 की गड़बड़ी कम हुई
- बेंचमार्क में डिफ़ॉल्ट रूप से एआईडीएल ट्रेसिंग चालू करें(इसके लिए एपीआई 28 की ज़रूरत होती है) (Ia0af2, b/341852305)
- मानदंडों में, डिफ़ॉल्ट रूप से पोर्टर टैग ट्रेसिंग चालू करें. यह वेकलॉक ट्रेसपॉइंट कैप्चर करता है. उदाहरण के लिए, वेकलॉक ट्रेसपॉइंट. (Icfe44, b/286551983)
- कमज़ोर परफ़ॉर्मेंस वाले डिवाइसों पर ट्रेसिंग शुरू करते समय क्रैश से बचने के लिए, ट्रेस कैप्चर शुरू होने का टाइम आउट बढ़ाया गया (I98841, b/329145808)
- सार्वजनिक एपीआई
PerfettoTraceProcessor.Session.queryMetrics
को JSON, textproto, और proto बाइनरी (डिकोड नहीं किया गया) वैरिएंट के साथ जोड़ा गया. इनकी मदद से,TraceProcessor
(I54d7f, b/304038382) में शामिल मेट्रिक के बारे में क्वेरी की जा सकती है - Perfetto ट्रेस रिकॉर्ड पर ब्लॉकिंग शुरू करने की सुविधा चालू करें, ताकि ट्रेस की शुरुआत में डेटा छूटने का जोखिम कम हो सके. यह सुविधा सिर्फ़ एपीआई 33 या इसके बाद के वर्शन पर काम करती है. (Ie6e41, b/310760059)
- JSON आउटपुट
- JSON आउटपुट में, बेंचमार्क के कॉन्टेक्स्ट में ज़्यादा जानकारी जोड़ी गई है:
context.artMainlineVersion
- आर्ट मेनलाइन मॉड्यूल का पूर्णांक वर्शन (अगर डिवाइस पर मौजूद है, तो-1
नहीं तो)context.build.id
- Equals android.os.Build.IDcontext.build.version.codename
- Equals android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
- यह प्री-रिलीज़ कोडनेम के पहले अक्षर से मेल खाता है. इसमें रिलीज़ बिल्ड भी शामिल हैं (Ie5020)
- प्रोफ़ाइलिंग ट्रेस (जैसे, Perfetto, मेथड ट्रेस) के लिए टूलिंग को आसान बनाने के लिए, JSON आउटपुट में
profilerOutput
सूची जोड़ी गई (I05ddd, b/332604449) - बेंचमार्क मॉड्यूल में Android Test Orchestrator का इस्तेमाल करने पर चेतावनी जोड़ी गई है. ऐसा इसलिए, क्योंकि इससे हर मॉड्यूल के आउटपुट की JSON फ़ाइलें बार-बार ओवरराइट हो जाएंगी. (Ia1af6, b/286899049)
- फ़ाइलें लिखते समय या पोस्ट-प्रोसेसिंग के दौरान क्रैश होने की समस्या से बचने के लिए, फ़ाइल के नाम 200 वर्णों से ज़्यादा होने पर गड़बड़ी का मैसेज दिखाएं. (I4a5ab)
- JSON आउटपुट में, बेंचमार्क के कॉन्टेक्स्ट में ज़्यादा जानकारी जोड़ी गई है:
वर्शन 1.3.0-rc01
7 अगस्त, 2024
androidx.benchmark:benchmark-*:1.3.0-rc01
रिलीज़ हो गया है. वर्शन 1.3.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
androidx.benchmark.cpuEventCounter
से, निर्देश वाले इवेंट के अलावा अन्य इवेंट के लिए गलत वैल्यू जनरेट होने की समस्या ठीक की गई (I7386a, b/286306579)- मेट्रिक के प्राथमिकता क्रम का पालन करने के लिए,
resumeTiming
/runWithTimingDisabled
को ठीक किया गया है. साथ ही, कम प्राथमिकता वाली मेट्रिक को रोकने/फिर से शुरू करने का असर, ज़्यादा प्राथमिकता वाली मेट्रिक के नतीजों पर काफ़ी कम हो गया है. उदाहरण के लिए, अगरcpuEventCounter.enable
इंस्ट्रुमेंटेशन आर्ग्युमेंट के ज़रिए सीपीयू परफ़ॉर्मेंस काउंटर का इस्तेमाल किया जा रहा है, तो pause/resume होने पर timeNs में अब ज़्यादा कमी नहीं आएगी. (I39c2e, b/286306579, b/307445225) - स्टैक सैंपलिंग को मुख्य थ्रेड से हटाने पर, स्टैक सैंपलिंग की वजह से मुख्य थ्रेड के हार्ड टाइमआउट होने की संभावना कम हो जाती है.
measureRepeatedOnMainThread
(I487a8, b/342237318) - नए प्लैटफ़ॉर्म एपीआई को ऐक्सेस करने के लिए, मैन्युअल तरीके से आउटलाइन बनाने की सुविधा हटा दी गई है. ऐसा इसलिए, क्योंकि AGP 7.3 या इसके बाद के वर्शन (जैसे, R8 वर्शन 3.3) के साथ R8 का इस्तेमाल करने पर, एपीआई मॉडलिंग के ज़रिए यह काम अपने-आप हो जाता है. साथ ही, AGP 8.1 या इसके बाद के वर्शन (जैसे, D8 वर्शन 8.1) का इस्तेमाल करने पर, सभी बिल्ड के लिए यह काम अपने-आप हो जाता है. AGP का इस्तेमाल न करने वाले क्लाइंट को, D8 के 8.1 या उसके बाद के वर्शन पर अपडेट करने का सुझाव दिया जाता है. ज़्यादा जानकारी के लिए यह लेख देखें. (I9496c, b/345472586)
- पैकेज का नाम इंस्ट्रूमेंटेशन आर्ग्युमेंट के तौर पर भेजने के लिए, agp वर्शन की जांच करने की सुविधा जोड़ी गई. AGP 8.4.0 से पहले, टारगेट ऐप्लिकेशन के पैकेज का नाम, इंस्ट्रुमेंटेशन ऐप्लिकेशन को इंस्ट्रुमेंटेशन आर्ग्युमेंट के ज़रिए नहीं भेजा जा सकता. (0c72a3f)
वर्शन 1.3.0-beta02
10 जुलाई, 2024
androidx.benchmark:benchmark-*:1.3.0-beta02
रिलीज़ हो गया है. वर्शन 1.3.0-beta02 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- चेतावनी को लॉग करने के लिए, Perfetto शुरू करते समय EXITCODE
2
को आसानी से हैंडल करें. हालांकि, आगे बढ़ें.
वर्शन 1.3.0-beta01
12 जून, 2024
androidx.benchmark:benchmark-*:1.3.0-beta01
रिलीज़ हो गया है. वर्शन 1.3.0-beta01 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- एक जैसा नाम रखने के लिए,
MethodTracing.affectsMeasurementOnThisDevice
का नाम बदलकरAFFECTS_MEASUREMENT_ON_THIS_DEVICE
कर दिया गया है. (I1bdfa) - माइक्रोबेंचमार्क में डेड कोड हटाने से रोकने के लिए, एक्सपेरिमेंट के तौर पर उपलब्ध
BlackHole.consume()
एपीआई जोड़ा गया. (If6812, b/286091643) - अब माइक्रोबेंचमार्क, सही तरीके से थ्रो करेगा, ताकि मेथड ट्रेसिंग, मेज़रमेंट में रुकावट न डाले. यह समस्या कुछ डिवाइसों पर तब होती है, जब इंस्ट्रुमेंटेशन आर्ग्युमेंट या
MicrobenchmarkConfig
के ज़रिए, मेथड ट्रेसिंग को चालू किया जाता है. साथ ही, अगर मेथड ट्रेस के बाद मेज़रमेंट करने की कोशिश की जाती है, तो भी यह समस्या होती है. जिन डिवाइसों पर इस गड़बड़ी का असर पड़ा है उनमें API 26 से 30 या एआरटी के कुछ ऐसे मेनलाइन मॉड्यूल वर्शन चल रहे हैं जिन पर इस गड़बड़ी का असर पड़ा है. इन डिवाइसों का पता रनटाइम के दौरानProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
की मदद से लगाया जा सकता है. (Iafb92, b/303660864)
गड़बड़ियां ठीक की गईं
- AGP के ज़्यादा से ज़्यादा वर्शन को 9.0.0-alpha01 पर ले जाने का सुझाव दिया गया है. (I5bbb0)
- बेंचमार्क कॉन्टेक्स्ट में कंपाइलेशन मोड जोड़ा गया (If5612, b/325512900)
- एआईडीएल ट्रेसिंग को डिफ़ॉल्ट रूप से चालू करें. इसके लिए, एपीआई 28 की ज़रूरत होती है (Ia0af2, b/341852305)
- JSON आउटपुट में, बेंचमार्क के कॉन्टेक्स्ट में ज़्यादा जानकारी जोड़ी गई है:
context.artMainlineVersion
- Art मेनलाइन मॉड्यूल का पूर्णांक वर्शन (अगर डिवाइस पर मौजूद है, तो -1)context.build.id
- बराबर हैandroid.os.Build.ID
context.build.version.codename
- बराबर हैandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
- यह प्री-रिलीज़ कोडनेम के पहले अक्षर से मेल खाता है. यह रिलीज़ बिल्ड पर भी लागू होता है (Ie5020)
StackSampling
कोandroidx.benchmark.profiling.sampleDurationSeconds
का पालन करने के लिए ठीक करता है (Ib1d53)- मैक्रो->कॉमन डिपेंडेंसी को
api()
में बदलें, ताकि इसे आसानी से इस्तेमाल किया जा सके. उदाहरण के लिए,PerfettoTrace
औरPerfettoConfig
. (Icdae3, b/341851833) - यह पक्का करें कि
mergeArtProfile
औरmergeStartupProfile
टास्क, बेसलाइन प्रोफ़ाइल जनरेट होने का हमेशा इंतज़ार करें. (I623d6, b/343086054) - यह तय करते समय कि वैरिएंट को चालू किया जाना चाहिए या नहीं, वैरिएंट की चालू होने की स्थिति को ध्यान में रखें. (I5d19e, b/343249144)
- परफ़ेक्टो ट्रेस प्रोसेसर के लिए, डिफ़ॉल्ट स्टार्ट टाइमआउट बढ़ाया गया. (I87e8c, b/329145808)
वर्शन 1.3.0-alpha05
14 मई, 2024
androidx.benchmark:benchmark-*:1.3.0-alpha05
रिलीज़ हो गया है. वर्शन 1.3.0-alpha05 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- जब मैक्रोबेंच मेट्रिक, सभी इटरेशन के लिए शून्य वैल्यू दिखाती है, तब ज़्यादा साफ़ तौर पर अपवाद दिखाएं (Iab58f, b/314931695)
- माइक्रोबेंच की ProGuard फ़ाइलों में, गड़बड़ी ठीक करने के लिए अतिरिक्त नियम जोड़े गए हैं. इनमें लिसनर के नियमों और देखी गई अन्य चेतावनियों / गड़बड़ियों के लिए सहायता शामिल है. (I14d8f, b/329126308, b/339085669)
- मेथड ट्रेसिंग, मैक्रोबेंचमार्क के दौरान एक अलग फ़ेज़ के तौर पर काम करती है. अब इसका असर मेज़रमेंट पर नहीं पड़ता. (If9a50, b/285912360, b/336588271)
- शेडर ब्रॉडकास्ट करने में गड़बड़ी होने पर दिखने वाले मैसेज में, डीबग करने के बारे में ज़्यादा सुझाव जोड़े गए. (I5efa6, b/325502725)
वर्शन 1.3.0-alpha04
1 मई, 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04
रिलीज़ हो गया है. वर्शन 1.3.0-alpha04 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- एक्सपेरिमेंट के तौर पर
MacrobenchmarkRule#measureRepeated
वैरिएंट जोड़ा गया है. यह पूरी तरह से पसंद के मुताबिक Perfetto ट्रेस रिकॉर्डिंग के लिए, कस्टमPerfettoConfig
लेता है. ध्यान दें कि गलत तरीके से कॉन्फ़िगर किए गए कॉन्फ़िगरेशन की वजह से, हो सकता है कि मेट्रिक क्लास काम न करें. (Idfd3d, b/309841164, b/304038384) PowerMetric.deviceSupportsPowerEnergy
का नाम बदलकरPowerMetric.deviceSupportsHighPrecisionTracking
कर दिया गया, ताकि यह साफ़ तौर पर समझ में आ सके (I5b82f)- डिवाइस की बैटरी की खपत को मेज़र करने की क्षमता के आधार पर, बेंचमार्क को बदलने या स्किप करने की सुविधा चालू करने के लिए,
PowerMetric.deviceBatteryHasMinimumCharge()
औरPowerMetric.deviceSupportsPowerEnergy()
को जोड़ा गया. (I6a591, b/322121218)
गड़बड़ियां ठीक की गईं
- पिछली बेसलाइन प्रोफ़ाइल (I824c8, b/269484510) के साथ तुलना करने की सुविधा जोड़ी गई
- चेतावनी बंद करने के लिए डीएसएल जोड़ा गया (Ic4deb, b/331237001)
- बेंचमार्क वैरिएंट बंद होने पर, अपवाद को सूचना लॉग में बदल दिया गया है (I8a517, b/332772491)
- इससे, किसी मैक्रोबेंचमार्क के लिए, तरीके के ट्रेस को कैप्चर करना आसान हो जाता है. मैक्रोबेंचमार्क को
measureBlock()
की अवधि के हिसाब से स्कोप किया जाता है. इससे पहले, यह टारगेट प्रोसेस लॉन्च होने पर शुरू होता था. साथ ही, यह सिर्फ़ कोल्ड स्टार्ट (Iee85a, b/300651094) के साथ काम करता था - परफ़ेक्टो ट्रेस प्रोसेसर के धीरे-धीरे शुरू होने पर क्रैश होने की समस्या ठीक की गई (I98841, b/329145808)
वर्शन 1.3.0-alpha03
17 अप्रैल, 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03
रिलीज़ हो गया है. वर्शन 1.3.0-alpha03 में ये बदलाव शामिल हैं.
नई सुविधाएं
- इसमें JSON, textproto, और proto बाइनरी (डिकोड नहीं किया गया) वैरिएंट वाले सार्वजनिक एपीआई
PerfettoTraceProcessor.Session.queryMetrics
एपीआई जोड़े गए हैं. इनकी मदद से, TraceProcessor में शामिल मेट्रिक (I54d7f, b/304038382) के बारे में क्वेरी की जा सकती है - प्रोफ़ाइलिंग ट्रेस (जैसे, perfetto, मेथड ट्रेस) को आसानी से टूल करने के लिए, JSON आउटपुट में
profilerOutput
जोड़ा गया. (I05ddd, b/332604449) - Perfetto कॉन्फ़िगरेशन की परफ़ॉर्मेंस की तुलना करने के लिए, पावर टैग जोड़ा गया. यह वेकलॉक ट्रेसपॉइंट कैप्चर करता है. उदाहरण के लिए, वेकलॉक ट्रेसपॉइंट. (Icfe44, b/286551983)
- inst आर्ग्युमेंट जोड़ा गया
androidx.benchmark.profiling.skipWhenDurationRisksAnr
. इसे फ़ॉल्स पर सेट किया जा सकता है, ताकि अनुमानित अवधि की वजह से एएनआर होने पर, तरीके के ट्रेस न छोड़े जाएं. सीआई रन में इससे बचने का सुझाव दिया जाता है. - एक्सपेरिमेंट के लिए inst आर्ग्युमेंट
androidx.benchmark.profiling.perfCompare.enable
जोड़ा गया. मेज़रमेंट और प्रोफ़ाइलिंग फ़ेज़ के बीच तुलना करने के लिए, इसे सही पर सेट करें. यह उदाहरण के लिए, मेथड ट्रेसिंग के ओवरहेड का आकलन करने में मददगार है. (I61fb4, b/329146942)
एपीआई में हुए बदलाव
TraceSectionMetric.Mode
को सील की गई क्लास में बदल दिया गया है, ताकि आने वाले समय में इसे बढ़ाया जा सके. साथ ही, जब स्टेटमेंट (I71f7b) का इस्तेमाल किया जाता है, तब कोई गड़बड़ी न होTraceSectionMetric.Mode.Average
और.Count
को जोड़ा गया. साथ ही, आर्ग्युमेंट को फिर से क्रम में लगाया गया, ताकि ज़्यादा इस्तेमाल होने वाला आर्ग्युमेंट (मोड) आर्ग्युमेंट की सूची में पहले हो. इससे पैरामीटर के नाम तय करने की ज़रूरत कम हो गई. (Ibf0b0, b/315830077, b/322167531)Metric.getResult
का नाम बदलकरgetMeasurements
कर दिया गया, ताकि यह रिटर्न टाइप (I42595) से मैच हो सके
गड़बड़ियां ठीक की गईं
- यह पक्का करने के लिए कि
automaticGenerationDuringBuild
बंद होने पर, बेंचमार्क जनरेट की गई बेसलाइन प्रोफ़ाइलों का इस्तेमाल करें, इस समस्या को ठीक किया गया है (Ic144f, b/333024280) nonMinified
या बेंचमार्क बिल्ड टाइप को पसंद के मुताबिक बनाने पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू करने के लिए,BaselineProfile
gradle प्लगिन प्रॉपर्टी को बदलने की सुविधा से जुड़ी समस्या ठीक की गई. (Ib8f05, b/324837887)- मैक्रोबेंचमार्क में फ़्लश की गई फ़िक्स्ड मेथड ट्रेस, ताकि मेथड ट्रेस पूरी तरह से कैप्चर की जा सकें और मान्य हों. भले ही, डिवाइस की स्पीड कम हो. (I6349a, b/329904950)
- Perfetto ट्रेस रिकॉर्ड पर ब्लॉकिंग शुरू करने की सुविधा चालू करें, ताकि ट्रेस की शुरुआत में डेटा छूटने का जोखिम कम हो सके. यह सुविधा सिर्फ़ एपीआई 33 या इसके बाद के वर्शन पर काम करती है. (Ie6e41, b/310760059)
- बेंचमार्क मॉड्यूल में Android Test Orchestrator का इस्तेमाल करने पर चेतावनी जोड़ी गई है. ऐसा इसलिए, क्योंकि इससे हर मॉड्यूल के आउटपुट की JSON फ़ाइलें बार-बार ओवरराइट हो जाएंगी. (Ia1af6, b/286899049)
- Studio के आउटपुट में एक जैसा फ़ॉर्मैट रखने के लिए, हज़ार के सेपरेटर के तौर पर ',' (कॉमा) का इस्तेमाल करें. साथ ही, डिवाइस की स्थान-भाषा को अनदेखा करें (I3e921, b/313496656)
TraceSectionMetric
अबTrace.{begin|end}AsyncSection
का इस्तेमाल करके बनाए गए स्लाइस के साथ काम करता है. (I91b32, b/300434906)- स्टार्टअप का पता लगाने में हुई सभी गड़बड़ियों के लिए, log.w / exception लेबल जोड़े गए. इससे मौजूदा व्यवहार में कोई बदलाव नहीं होता. इसलिए, कुछ गड़बड़ियां दिखती हैं और अन्य गड़बड़ियों का पता नहीं चलता. हालांकि, इससे गड़बड़ियों को समझना आसान हो जाता है. आम तौर पर, स्टार्टअप मेट्रिक की रिपोर्ट न करने वाले
Log.w()
वे होते हैं जिनमें नॉन-फ़्रेम इवेंट मौजूद नहीं होते. स्टार्टअप का पता चलने पर अपवाद थ्रो किए जाते हैं. हालांकि, यूआई/आरटी स्लाइस से फ़्रेम टाइमिंग की जानकारी को छोड़कर. (Id240f, b/329145809) - दखल कम करने के लिए, Macrobenchmark चलाने से पहले बैकग्राउंड में चल रही dexopt नौकरियों को रद्द करें. (I989ed)
FrameTimingMetric
मेंframeCount
मेज़रमेंट जोड़ा गया है. इससे उन स्थितियों का पता लगाने में मदद मिलेगी जहां फ़्रेम की संख्या में बदलाव होने की वजह से मेज़रमेंट में बदलाव होता है. जैसे, नए ऐनिमेशन जोड़े गए हैं या अमान्य होने की समस्याएं ठीक की गई हैं. (I1e5aa)- यह साफ़ तौर पर बताया गया है कि दस्तावेज़ों में उपलब्ध होने पर,
frameOverrunMs
को ट्रैकिंग के लिए पसंदीदा मेट्रिक माना जाता है. साथ ही, यह भी बताया गया है कि ऐसा क्यों है. (I18749, b/329478323)
वर्शन 1.3.0-alpha02
20 मार्च, 2024
androidx.benchmark:benchmark-*:1.3.0-alpha02
रिलीज़ हो गया है. वर्शन 1.3.0-alpha02 में ये बदलाव शामिल हैं.
नई सुविधाएं
एम्बेड किए गए ProGuard नियमों के ज़रिए, माइक्रोबेंच में R8 के एक्सपेरिमेंटल वर्शन के लिए सहायता. ध्यान दें कि यह सुविधा एक्सपेरिमेंट के तौर पर उपलब्ध है. साथ ही, लाइब्रेरी मॉड्यूल टेस्ट को छोटा करने के लिए, AGP 8.3 की ज़रूरत होती है. अपने बेंचमार्क मॉड्यूल के
build.gradle
में R8 को छोटा करने/ऑप्टिमाइज़ करने की सुविधा चालू करने के लिए, यहां दिए गए निर्देशों का पालन करें. इससे परफ़ॉर्मेंस में काफ़ी सुधार होगा. हालांकि, यह वर्कलोड पर निर्भर करता है. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
गड़बड़ियां ठीक की गईं
- इस अपडेट में, मेथड ट्रेसिंग की चेतावनी को ठीक किया गया है. अब यह चेतावनी, माइक्रोबेंच के आउटपुट से अलग लाइन में दिखेगी. (I0455c, b/328308833)
वर्शन 1.3.0-alpha01
21 फ़रवरी, 2024
androidx.benchmark:benchmark-*:1.3.0-alpha01
रिलीज़ हो गया है. वर्शन 1.3.0-alpha01 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
MicrobenchmarkConfig
बूलियन पैरामीटर के नाम बदले गए, ताकि 'should' शब्द का इस्तेमाल न करना पड़े (Ia8f00, b/303387299)BenchmarkRule.measureRepeatedOnMainThread
जोड़ा गया है, ताकि मुख्य थ्रेड के बेंचमार्क (जैसे कि व्यू या कंपोज़ यूज़र इंटरफ़ेस (यूआई) को छूने वाले) एएनआर को ट्रिगर करने से बच सकें. ऐसा खास तौर पर सीआई में बड़ी सुइट के दौरान किया जाता है. (I5c86d)FrameTimingGfxInfoMetric
को जोड़ा गया. यहFrameTimingMetric
का एक एक्सपेरिमेंटल विकल्प है. इसमें मेज़रमेंट, Perfetto ट्रेस से निकालने के बजाय सीधे प्लैटफ़ॉर्म से मिलते हैं. (I457cb, b/322232828)- अलग-अलग
warmUp
इटरेशन के दौरान, एआरटी प्रोफ़ाइल को डंप करने की सुविधा जोड़ी गई. (I17923) TraceSectionMetric
API में कई बदलाव किए गए हैं:Mode.Min
जोड़ेंMode.Max
- सेक्शन के नाम को मेट्रिक लेबल के तौर पर बदलने के लिए, लेबल आर्ग्युमेंट जोड़ें
- मेट्रिक का मतलब साफ़ तौर पर बताने के लिए, आउटपुट में मोड का नाम जोड़ा गया
- डिफ़ॉल्ट वैल्यू को बदलकर सम कर दिया गया है, क्योंकि इस मेट्रिक का इस्तेमाल ज़्यादातर बार-बार होने वाले इवेंट के लिए किया जाता है सीआई के इस्तेमाल में होने वाले इन बदलावों के बारे में जानें, क्योंकि इससे डेटा में रुकावट आ सकती है या पार्सिंग में गड़बड़ी हो सकती है. (Ic1e82, b/301892382, b/301955938)
गड़बड़ियां ठीक की गईं
- मैनेज किए जा रहे डिवाइस के मौजूद न होने पर, बेसलाइन प्रोफ़ाइल Gradle प्लगिन में गड़बड़ी के मैसेज को बेहतर बनाया गया (Idea2b, b/313803289)
- AGP 8.3.0-alpha15 (I1d2af, b/313992099) से पहले के वर्शन में, एएआर में लाइब्रेरी की बेसलाइन प्रोफ़ाइलें शामिल करने से जुड़ी समस्या को ठीक किया गया है
- जनरेशन टास्क के आखिर में, बेसलाइन और स्टार्टअप प्रोफ़ाइल के आउटपुट यूआरएल को ठीक किया गया (I802e5, b/313976958)
- डेटा सोर्स के टाइमआउट को अडजस्ट किया गया है, ताकि
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) को ठीक किया जा सके - बिना
ProfileInstaller
1.3 वाले ऐप्लिकेशन की परफ़ॉर्मेंस की जांच करते समय क्रैश होने की समस्या को ठीक करने के लिए, शेडर ड्रॉप करने के व्यवहार को बदलने वाले दो इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ें:androidx.benchmark.dropShaders.enable=true/false
: इसका इस्तेमाल, सभी शेडर ड्रॉपिंग को स्किप करने के लिए किया जा सकता है. इसमेंStartupMode.Cold
लॉन्च में की गई शेडर ड्रॉपिंग भी शामिल है. खास तौर पर, उन ऐप्लिकेशन की परफ़ॉर्मेंस की तुलना करते समय जो अब तक profileinstaller 1.3 का इस्तेमाल नहीं करते हैंandroidx.benchmark.dropShaders.throwOnFailure=true/false
: इसका इस्तेमाल, शेडर हटाने की कोशिश करते समय होने वाली गड़बड़ियों को ठीक करने के लिए किया जा सकता है. उदाहरण के लिए, जब profileinstaller 1.3 (I4f573) के बिना ऐप्लिकेशन की परफ़ॉर्मेंस की जांच की जाती है
- जब यूज़र इंटरफ़ेस (यूआई) थ्रेड पर कुछ सेकंड से ज़्यादा समय लगने की उम्मीद हो, तो उस पर तरीके का पता लगाने की प्रोसेस को छोड़ दें. साथ ही, गड़बड़ी होने पर तरीके का पता लगाने की प्रोसेस को बंद कर दें. (I6e768)
- फ़ाइलें लिखते समय या पोस्ट-प्रोसेसिंग के दौरान क्रैश होने की समस्या से बचने के लिए, फ़ाइल के नाम 200 वर्णों से ज़्यादा होने पर गड़बड़ी का मैसेज दिखाएं. (I4a5ab)
- इस समस्या को ठीक किया गया है. इसमें ट्रेस की शुरुआत और आखिर में मौजूद ऐसे फ़्रेम को एक साथ जोड़ा जा सकता था जो खत्म नहीं हुए हैं. इससे, एक ही फ़्रेम को बहुत लंबा फ़्रेम बताया जाता था. (I39353, b/322232828)
- एपीआई लेवल 30 से 33 वाले डिवाइस पर पैकेज फिर से इंस्टॉल करते समय, एपीआई लेवल 30 या इससे ऊपर वाले डिवाइस पर
--skip verification
का इस्तेमाल करें. इससे उपयोगकर्ता के बिल्ड पर एआरटी प्रोफ़ाइलें मिट जाएंगी. इससे Play Protect की उन चेतावनियों को अनदेखा करने में मदद मिलती है जिनकी वजह से कुछ डिवाइसों पर ऐप्लिकेशन इंस्टॉल नहीं हो पाते. (Ic9e36) - सिस्टम यूआई या लॉन्चर जैसे सिस्टम ऐप्लिकेशन न होने पर, ऐप्लिकेशन बंद करने के लिए
am force-stop
का इस्तेमाल करें. (I5e028) - मैक्रोबेंचमार्क अब टारगेट ऐप्लिकेशन के लिए, एआरटी प्रोफ़ाइल को फ़्लश करने के लिए
1 second
तक इंतज़ार करता है. इससे पहले, यह500 ms
तक इंतज़ार करता था. (I85a50, b/316082056) - फ़्रेम नहीं बनने पर,
FrameTimingMetric
गड़बड़ी को बेहतर बनाया गया है. साथ ही, मेट्रिक पार्स करने में गड़बड़ी होने पर, समस्या का पता लगाने में मदद करने के लिए, हमेशा ट्रेस का लिंक आउटपुट किया जाता है. (I956b9) FrameTimingMetric
में क्रैश होने की समस्या को ठीक किया गया है. यह समस्या, फ़्रेम आईडी को पार्स करने के दौरान होती थी. खास तौर पर, यह समस्या कुछ OEM डिवाइसों पर होती थी. (Ia24bc, b/303823815, b/306235276)FrameMetrics
में जांच के नियमों को आसान बनाया गया है. साथ ही, गड़बड़ी के मैसेज में ज़्यादा जानकारी जोड़ी गई है. (Iadede)
वर्शन 1.2
वर्शन 1.2.4
17 अप्रैल, 2024
androidx.benchmark:benchmark-*:1.2.4
रिलीज़ हो गया है. वर्शन 1.2.4 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- इस कुकी से, बेंचमार्क वैरिएंट में आधारलाइन प्रोफ़ाइल srcset के सेट अप न होने की समस्या ठीक होती है. यह लाइब्रेरी में मौजूद
automaticGenerationDuringBuild
को भी ठीक करता है. इससे सर्कुलर डिपेंडेंसी की समस्या होती है. (I28ab7, b/333024280) - सिस्टम यूआई या लॉन्चर जैसे सिस्टम ऐप्लिकेशन न होने पर, ऐप्लिकेशन बंद करने के लिए
am force-stop
का इस्तेमाल करें. इस अपडेट में, "Package $package must not be running prior to cold start!" की वजह सेStartupMode.COLD
बेंचमार्क क्रैश होने की समस्या को ठीक किया गया है. ऐसा इसलिए होता है, क्योंकि प्रोसेस पूरी तरह से बंद नहीं होती है. (I5e028)
वर्शन 1.2.3
24 जनवरी, 2024
androidx.benchmark:benchmark-*:1.2.3
रिलीज़ हो गया है. वर्शन 1.2.3 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- AGP का वर्शन 8.3.0 या इसके बाद का होने पर, Baseline Profile Gradle Plugin से अपवाद हटाया गया.
- AGP 8.3.0-alpha15 से पहले के वर्शन में, AAR में लाइब्रेरी की बेसलाइन प्रोफ़ाइलें शामिल करने से जुड़ी समस्या को ठीक किया गया है.
वर्शन 1.2.2
1 दिसंबर, 2023
androidx.benchmark:benchmark-*:1.2.2
रिलीज़ हो गया है. वर्शन 1.2.2 में ये बदलाव शामिल हैं.
बेसलाइन प्रोफ़ाइलें
- एक्ज़ीक्यूशन लॉग में, बेसलाइन प्रोफ़ाइल के आउटपुट फ़ाइल पाथ को लोकल फ़ाइल यूआरआई (aosp/2843918, aosp/2853665, b/313976958) के तौर पर दिखाया जाएगा
वर्शन 1.2.1
15 नवंबर, 2023
androidx.benchmark:benchmark-*:1.2.1
रिलीज़ हो गया है. वर्शन 1.2.1 में ये बदलाव शामिल हैं.
नई सुविधाएं
- जब उपयोगकर्ता, टेस्ट वैरिएंट बंद करता है, तब गड़बड़ी का मैसेज बेहतर तरीके से दिखाया जाता है (b/307478189)
- एएस टेस्ट रन इंटिग्रेशन (b/309805233), (b/309116324) के लिए प्रॉपर्टी जोड़ी गईं
वर्शन 1.2.0
18 अक्टूबर, 2023
androidx.benchmark:benchmark-*:1.2.0
रिलीज़ हो गया है. वर्शन 1.2.0 में ये बदलाव शामिल हैं.
1.1.0 के बाद हुए अहम बदलाव
बेसलाइन प्रोफ़ाइलें
- नई बेसलाइन प्रोफ़ाइल Gradle प्लगिन की मदद से, टेस्ट और बिल्ड वर्कफ़्लो में बेसलाइन प्रोफ़ाइल को कैप्चर और शामिल करने की प्रोसेस को अपने-आप पूरा किया जा सकता है.
BaselineProfileRule.collect
अब स्टेबल हो गया है. यह पिछले एक्सपेरिमेंटलBaselineProfileRule.collectBaselineProfile
एपीआई का बेहतर और आसान वर्शन है- सिर्फ़
packageName
तय करें और अपने ऐप्लिकेशन को आगे बढ़ाएं
- सिर्फ़
- बेसलाइन प्रोफ़ाइल जनरेट करने वाली लाइब्रेरी के लिए, अब जनरेट किए गए नियमों को फ़िल्टर किया जा सकता है. इसके लिए, कोड (
BaselineProfileRule.collect
आर्ग्युमेंट) का इस्तेमाल किया जा सकता है. इसके अलावा, gradle प्लगिन का इस्तेमाल करके भी ऐसा किया जा सकता है - ऐसी गड़बड़ियां जो ठीक की जा सकती हैं
- Android U+ पर, बेसलाइन प्रोफ़ाइल के कलेक्शन से जुड़ी समस्या ठीक की गई (Id1392, b/277645214)
Macrobenchmark
- कंपाइलेशन
- Macrobenchmark अब हर कंपाइल के लिए, कंपाइलेशन की स्थिति को पूरी तरह से रीसेट करता है. इसके लिए, Android 14 से पहले APK को फिर से इंस्टॉल करना ज़रूरी है. इसलिए, अगर आपको मेज़र की जा रही चीज़ में स्थिति (जैसे कि उपयोगकर्ता का लॉगिन) बनाए रखनी है, तो Android 14 या इसके बाद के वर्शन पर बेंचमार्किंग करने का सुझाव दिया जाता है.
- ऐप्लिकेशन को अलग से कंपाइल करके और
CompilationMode.Ignore()
या इंस्ट्रूमेंटेशन आर्ग्युमेंट के साथ कंपाइल करने की प्रोसेस को स्किप करके भी इस समस्या को हल किया जा सकता है
इंस्ट्रूमेंटेशन आर्ग्युमेंट
androidx.benchmark.dryRunMode.enable
इंस्ट्रुमेंटेशन आर्ग्युमेंट के लिए सहायता.यह सुविधा, पुष्टि करने के लिए तेज़ी से टेस्ट चलाने के लिए माइक्रोबेंचमार्क में पहले से उपलब्ध है. उदाहरण के लिए, बेंचमार्क बनाते समय या प्रीसबमिट मेंandroidx.benchmark.profiling.mode=StackSampling
औरMethodTracing
के लिए सहायता.- रनटाइम फ़िल्टरिंग की बेसलाइन प्रोफ़ाइल बनाम मैक्रोबेंचमार्क के नियम की जांच करने की अनुमति देने के लिए,
androidx.benchmark.enabledRules
जोड़ा गया - tracing-perfetto की मदद से ट्रेसिंग चालू करने के लिए,
androidx.benchmark.perfettoSdkTracing.enable
आर्ग्युमेंट जोड़ा गया है. जैसे, Compose recomposition tracing. ध्यान दें किStartupMode.COLD
के साथ इस्तेमाल करने पर, टाइमिंग पर काफ़ी असर पड़ेगा. ऐसा इसलिए, क्योंकि ऐप्लिकेशन के शुरू होने के दौरान ट्रेसिंग लाइब्रेरी लोड और चालू होती है.
ज़रूरी शर्तें
- प्रोफ़ाइल कैप्चर / रीसेट करने और शेडर कैश मेमोरी को मिटाने के लिए, अब टारगेट ऐप्लिकेशन में
ProfileInstaller
1.3.0 या इससे ऊपर का वर्शन होना ज़रूरी है.
- प्रोफ़ाइल कैप्चर / रीसेट करने और शेडर कैश मेमोरी को मिटाने के लिए, अब टारगेट ऐप्लिकेशन में
नए एक्सपेरिमेंटल मीट्रिक एपीआई
- एक्सपेरिमेंट के तौर पर
TraceSectionMetric
जोड़ा गया है. इससे आपके ऐप्लिकेशन में मौजूदtrace("") {}
ब्लॉक या TraceMetric से, टाइमिंग की सामान्य जानकारी निकाली जा सकती है. साथ ही, PerfettoTraceProcessor
की पूरी क्वेरी क्षमता का फ़ायदा उठाया जा सकता है. - पावर के इस्तेमाल की जानकारी कैप्चर करने के लिए, एक्सपेरिमेंटल
PowerMetric
जोड़ा गया - पेज में गड़बड़ियों की संख्या गिनने के लिए, एक्सपेरिमेंटल
MemoryCountersMetric
जोड़ा गया - एक्सपेरिमेंट के लिए
PerfettoTraceProcessor
एपीआई जोड़ा गया है. इसका इस्तेमाल, सिस्टम ट्रेस (जिसे Perfetto ट्रेस भी कहा जाता है) से मेट्रिक निकालने के लिए किया जाता है
- एक्सपेरिमेंट के तौर पर
समाधान
- एक से ज़्यादा APK से इंस्टॉल किए गए ऐप्लिकेशन से प्रोफ़ाइलें इंस्टॉल या एक्सट्रैक्ट करते समय होने वाले क्रैश की समस्या ठीक की गई. जैसे, ऐप्लिकेशन बंडल से.
FrameTimingMetric
में, ऐसे फ़्रेम को अनदेखा करने की समस्या ठीक की गई है जिनके फ़्रेम आईडी अलग-अलग होते हैं. आम तौर पर, यह समस्या API 31+ पर रिपल के दौरान फ़्रेम में होती है (I747d2, b/279088460)- 64 एमबी से ज़्यादा के ट्रेस पर पार्सिंग से जुड़ी गड़बड़ियों को ठीक किया गया (Ief831, b/269949822)
- डिवाइस (खास तौर पर एम्युलेटर) के ओएस इमेज को ट्रेसिंग या कंपाइलेशन के लिए सही तरीके से कॉन्फ़िगर न किए जाने पर होने वाली गड़बड़ियों के बारे में ज़्यादा जानकारी दी गई है
- बैटरी के बिना काम करने वाले डिवाइसों (माइक्रो और मैक्रो) के लिए, बैटरी लेवल की जाँच करने की सुविधा बंद करें
- फ़ाइल आउटपुट को बेहतर बनाया गया है. साथ ही, अमान्य आउटपुट डायरेक्ट्री के लिए ज़्यादा साफ़ तौर पर गड़बड़ियों की जानकारी दी गई है और डिफ़ॉल्ट सेटिंग को ज़्यादा सुरक्षित बनाया गया है
StartupMode.COLD
की स्थिरता को बेहतर बनाया गया है. इसके लिए, शेडर कैश को लगातार ड्रॉप किया जाता है. इसेMacrobenchmarkScope.dropShaderCache
के ज़रिए भी दिखाया जाता हैstartActivityAndWait
के लिए, लीनबैक फ़ॉलबैक की समस्या ठीक की गई.
माइक्रोबेंचमार्क
- सुविधाएं
- प्रोफ़ाइलिंग को अन्य मेट्रिक के बाद, एक अलग चरण में ले जाया गया है. इससे एक टेस्ट रन में, सटीक समय और प्रोफ़ाइलिंग के नतीजे, दोनों दिखाए जा सकते हैं.
- एक्सपेरिमेंट के लिए एपीआई
- कस्टम मेट्रिक तय करने के लिए, एक्सपेरिमेंटल
MicrobenchmarkConfig
एपीआई जोड़ा गया है. साथ ही, ट्रेसिंग और प्रोफ़ाइलिंग को कॉन्फ़िगर करने की सुविधा भी जोड़ी गई है. इसका इस्तेमाल, तरीके के ट्रेस कैप्चर करने या ट्रेसपॉइंट कैप्चर करने के लिए किया जा सकता है. हालांकि, ट्रेसिंग ओवरहेड के बारे में पता होना चाहिए. - JUnit के बिना,
BenchmarkRule
से अलगBenchmarkState
को कंट्रोल करने के लिए, एक्सपेरिमेंटल एपीआई जोड़े गए - एक्सपेरिमेंट के तौर पर
PerfettoTrace
रिकॉर्ड जोड़ा गया है. इससे, कस्टम कॉन्फ़िगरेशन के साथ Perfetto ट्रेस कैप्चर किए जा सकेंगे. यह बेंचमार्क एपीआई से अलग होगा.
- कस्टम मेट्रिक तय करने के लिए, एक्सपेरिमेंटल
- ऐसी गड़बड़ियां जो ठीक की जा सकती हैं
- Android Studio के बेंचमार्क आउटपुट में, लीडिंग व्हाइटस्पेस मौजूद न होने की समस्या को ठीक किया गया है.
- उस समस्या को ठीक किया गया है जिसकी वजह से, Android Studio के बेंचमार्क आउटपुट में चेतावनियां प्रिंट नहीं हो पाती थीं.
- Android 13 (एपीआई 33) और उसके बाद के वर्शन पर,
SampledProfiling
क्रैश होने की समस्या ठीक की गई. IsolationActivity
और Perfetto ट्रेसिंग को स्किप करके,dryRunMode
की परफ़ॉर्मेंस को काफ़ी हद तक बेहतर बनाया गया है. पुराने ओएस वर्शन पर, ड्राई रन मोड 10 गुना ज़्यादा तेज़ी से काम करता है.
वर्शन 1.2.0-rc02
6 अक्टूबर, 2023
androidx.benchmark:benchmark-*:1.2.0-rc02
रिलीज़ हो गया है. वर्शन 1.2.0-rc02 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- बेंचमार्क फ़ाइल के आउटपुट से जुड़ी समस्या ठीक की गई है. इससे
BaselineProfile
प्लगिन फ़ाइल कॉपी करने में अब कोई समस्या नहीं आएगी. फ़ाइलें जनरेट की गई थीं और उन्हें डिवाइस से कॉपी किया गया था. हालांकि, उनका नाम इस तरह से बदला गया था कि Gradle प्लगिन उन्हें नहीं देख सका. (I8dbcc, b/303034735, b/296453339) - मैक्रोबेंचमार्क मॉड्यूल से टारगेट ऐप्लिकेशन में इंजेक्ट करते समय,
tracing-perfetto
को लोड करने से जुड़ी गड़बड़ी के मैसेज के बारे में ज़्यादा जानकारी दी गई है.
वर्शन 1.2.0-rc01
20 सितंबर, 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
रिलीज़ हो गया है. वर्शन 1.2.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- अब बेंचमार्क में Perfetto SDK ट्रेसिंग शुरू न होने पर, एक अपवाद (समस्या हल करने के निर्देशों के साथ) दिखता है. (I6c878, b/286228781)
- ART के तरीके से ट्रेस किए गए डेटा को perfetto फ़ॉर्मैट में बदलते समय, OOM क्रैश की समस्या ठीक की गई. (I106bd, b/296905344)
- (मैक्रोबेंचमार्क) Studio के टेस्ट आउटपुट में लिंक किए जाने पर, मेथड ट्रेसिंग लेबल के बारे में साफ़ तौर पर बताया गया है. साथ ही, डिवाइस/होस्ट पर मेथड ट्रेसिंग के फ़ाइल नामों को यूनीक बनाया गया है, ताकि एक से ज़्यादा बेंचमार्क चलाने पर उन्हें बदला न जा सके. (I08e65, b/285912360)
- इस कुकी का इस्तेमाल यह पक्का करने के लिए किया जाता है कि बेसलाइन प्रोफ़ाइल कैप्चर करते समय डिवाइस चालू हो. (I503fc)
वर्शन 1.2.0-beta05
30 अगस्त, 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
रिलीज़ हो गया है. वर्शन 1.2.0-beta05 में ये बदलाव शामिल हैं.
नई सुविधाएं
- अब Baseline Profile Gradle Plugin, Android Gradle Plugin 8.3 के साथ काम करता है. (aosp/2715214)
वर्शन 1.2.0-beta04
23 अगस्त, 2023
androidx.benchmark:benchmark-*:1.2.0-beta04
रिलीज़ हो गया है. वर्शन 1.2.0-beta04 में ये बदलाव शामिल हैं.
नई सुविधाएं
- बेसलायन प्रोफ़ाइलें Gradle प्लगइन अब Android Gradle प्लगइन 8.3 के साथ काम करता है. (aosp/2715214)
गड़बड़ियां ठीक की गईं
- आउटपुट फ़ाइल के नामों को और बेहतर तरीके से सैनिटाइज़ करके, फ़ाइलों को लिखने / ले जाने और खींचने (खास तौर पर पैरामीटर वाले टेस्ट से) में होने वाली गड़बड़ियों को ठीक करें. साथ ही, आउटपुट फ़ाइल के नामों में '=' और ':' का इस्तेमाल न करें. (I759d8)
वर्शन 1.2.0-beta03
9 अगस्त, 2023
androidx.benchmark:benchmark-*:1.2.0-beta03
रिलीज़ हो गया है. वर्शन 1.2.0-beta03 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TraceSectionMetric
को सिर्फ़ टारगेट पैकेज के हिसाब से फ़िल्टर करने के लिए, डिफ़ॉल्ट रूप से चालू रहने वाला आर्ग्युमेंट जोड़ा गया (Ia219b, b/292208786)
गड़बड़ियां ठीक की गईं
- आर्टफ़ैक्ट के नाम और अन्य रेफ़रंस के साथ एक जैसा नाम रखने के लिए,
fullTracing.enable
इंस्ट्रूमेंटेशन आर्ग्युमेंट का नाम बदलकरperfettoSdkTracing.enable
कर दिया गया है.fullTracing.enable
फ़ॉलबैक के तौर पर काम करता रहेगा. (I7cc00) - अब Studio के सिस्टम ट्रेस व्यूअर में, लाइब्रेरी के इंटरनल ट्रेसपॉइंट (इसमें माइक्रोबेंचमार्क लूप/फ़ेज़ ट्रेसिंग शामिल है) दिखेंगे. साथ ही, ये Perfetto में सही प्रोसेस के तहत नेस्ट किए जाएंगे. (I6b2e7, b/293510459)
- API 31 और इसके बाद के वर्शन पर, मैक्रोबेंचमार्क की NOT-PROFILEABLE गड़बड़ी को ठीक किया गया. साथ ही, eng/userdebug रूट किए गए डिवाइसों पर, profileable की जांच को स्किप किया गया. (I2abac, b/291722507)
- Dex Layout Optimizations का इस्तेमाल करते समय, स्टार्टअप प्रोफ़ाइल के नियमों को अब बेसलाइन प्रोफ़ाइल के नियमों के तौर पर भी माना जाता है. (aosp/2684246, b/293889189)
वर्शन 1.2.0-beta02
26 जुलाई, 2023
androidx.benchmark:benchmark-*:1.2.0-beta02
रिलीज़ हो गया है. वर्शन 1.2.0-beta02 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- माइक्रोबेंच कस्टम मेट्रिक और कॉन्फ़िगरेशन (जैसे, प्रोफ़ाइलर और ट्रेसिंग) के लिए एक्सपेरिमेंटल एपीआई जोड़े गए. (I86101, b/291820856)
गड़बड़ियां ठीक की गईं
- ट्रेसिंग के लिए ओएस का कॉन्फ़िगरेशन गलत होने पर, मैक्रोबेंच में गड़बड़ी की रिपोर्ट करें. इसे हाल ही में API 26/28 ARM64 इम्यूलेटर में ठीक किया गया था. (I0a328, b/282191686)
- संकलन रीसेट करने में हुई गड़बड़ी के बारे में ज़्यादा जानकारी जोड़ी गई है, ताकि एम्युलेटर को अपडेट करने का सुझाव दिया जा सके. ऐसा इसलिए, क्योंकि हाल ही में कुछ एम्युलेटर में इस समस्या को ठीक किया गया है. (I8c815, b/282191686)
implementation
डिपेंडेंसी के बजाय,androidx.test.uiautomator:uiautomator:2.2.0
कोapi
डिपेंडेंसी के तौर पर सेट करें. (I1981e)
वर्शन 1.2.0-beta01
18 जुलाई, 2023
androidx.benchmark:benchmark-*:1.2.0-beta01
रिलीज़ हो गया है. वर्शन 1.2.0-beta01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Studio में बेंचमार्क के आउटपुट में कभी-कभी चेतावनियां न दिखने की समस्या ठीक की गई. साथ ही, Studio में बेंचमार्क के आउटपुट में शुरुआती खाली जगहें न दिखने की समस्या को ठीक किया गया (Ia61d0, b/227205461, b/286306579, b/285912360)
FrameTimingMetric
के लिए टिप्पणी को पिन किया गया. सबमेट्रिक का नामframeDurationCpuMs
है. (Ib097f, b/288830934).
वर्शन 1.2.0-alpha16
21 जून, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16
रिलीज़ हो गया है. वर्शन 1.2.0-alpha16 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
BaselineProfileRule.collectBaselineProfile()
API का नाम बदलकरBaselineProfileRule.collect()
कर दिया गया है. (I4b665)
गड़बड़ियां ठीक की गईं
androidx.benchmark.profiling.mode = MethodTracing
के लिए, मैक्रोबेंचमार्क की सुविधा उपलब्ध है. (I7ad37, b/285912360)- माइक्रोबेंचमार्क प्रोफ़ाइलिंग को एक अलग फ़ेज़ में ले जाया गया है. इसलिए, यह मेज़रमेंट की जगह लेने के बजाय, मेज़रमेंट के बाद क्रम से होती है. अगर मौजूद हैं, तो
MethodTracing
ट्रेस सेक्शन भी अब कैप्चर किए गए Perfetto ट्रेस में शामिल किए जाते हैं. (I9f657, b/285014599) Mode.Sum
की मदद से,TraceSectionMetric
में गिनती की मेज़रमेंट जोड़ें. (Ic121a, b/264398606)
वर्शन 1.2.0-alpha15
7 जून, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha15
रिलीज़ हो गया है. वर्शन 1.2.0-alpha15 में ये बदलाव शामिल हैं.
नई सुविधाएं
- टारगेट ऐप्लिकेशन की मेमोरी के इस्तेमाल को ट्रैक करने के लिए, एक्सपेरिमेंटल
MemoryUsageMetric
जोड़ा गया. (I56453, b/133147125, b/281749311) PerfettoTrace.record
(If9d75, b/280460183) की मदद से, पूरी तरह से कस्टम Perfetto कॉन्फ़िगरेशन के लिए सहायता जोड़ी गई- बेसलाइन प्रोफ़ाइल जनरेट करने की प्रोसेस को स्किप करने के लिए प्रॉपर्टी जोड़ी गई. इस्तेमाल:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
एपीआई में हुए बदलाव
collectBaselineProfile
एपीआई हमेशा स्टेबल बेसलाइन प्रोफ़ाइलें जनरेट करता है.collectStableBaselineProfile
API को हटा दिया गया है. इसके बजाय,collectBaselineProfile
का इस्तेमाल किया जाना चाहिए. (I17262, b/281078707)BaselineProfileRule
केfilterPredicate
आर्ग्युमेंट को गैर-शून्य में बदल दिया गया है. साथ ही, डिफ़ॉल्ट वैल्यू को भी बदल दिया गया है, ताकि दस्तावेज़ों में डिफ़ॉल्ट फ़िल्टर के व्यवहार के बारे में ज़्यादा जानकारी दी जा सके. (I3816e)
गड़बड़ियां ठीक की गईं
- परफ़ॉर्मेंस को बेहतर बनाने के लिए,
dryRunMode
मेंIsolationActivity
और Perfetto ट्रेसिंग को बंद करें. ऐसा इसलिए, क्योंकि ये रनटाइम के दौरान ज़्यादातर समय तक चालू रहते हैं. (Ie4f7d) - इंस्ट्रुमेंटेशन टेस्ट के आर्ग्युमेंट
androidx.benchmark.profiling.mode=StackSampling
औरandroidx.benchmark.profiling.sampleFrequency
का इस्तेमाल करके, Macrobenchmarks में कॉल स्टैक सैंपलिंग की सुविधा जोड़ी गई है. (I1d13b, b/282188489) - Android U (एपीआई 34) और एम्युलेटर पर शेडर छोड़ने पर क्रैश होने की समस्या ठीक की गई. (I031ca, b/274314544)
वर्शन 1.2.0-alpha14
3 मई, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14
रिलीज़ हो गया है. वर्शन 1.2.0-alpha14 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
FrameTimingMetric
में, फ़्रेम आईडी के अलग-अलग होने की वजह से फ़्रेम को अनदेखा करने की समस्या ठीक की गई है. इस वजह से, प्लैटफ़ॉर्म के हाल ही के वर्शन (API 31+) पर कुछ ऐनिमेशन,RenderThread
के ऐनिमेट होने के दौरान कई फ़्रेम को अनदेखा कर देते थे. उदाहरण के लिए, रिपल के दौरान. (I747d2, b/279088460)- 64 एमबी से बड़े ट्रेस के लिए, ट्रेस प्रोसेसर पार्सिंग की समस्या ठीक की गई. (Ief831, b/269949822)
- Android U पर, बेसलाइन प्रोफ़ाइल जनरेट करने की समस्या ठीक की गई है. यह समस्या,
pm dump-profiles
कमांड के अलग-अलग आउटपुट की वजह से आ रही थी. (Id1392, b/277645214) - स्ट्रिंग की तुलना सही तरीके से करने के लिए, जीपीयू क्लॉक लॉक करने वाली स्क्रिप्ट को ठीक किया गया (I53e54, b/213935715)
वर्शन 1.2.0-alpha13
5 अप्रैल, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha13
रिलीज़ हो गया है. वर्शन 1.2.0-alpha13 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- आने वाले समय में स्टार्टअप प्रोफ़ाइल की सुविधा के लिए, बेसलाइन प्रोफ़ाइल जनरेट करते समय प्रोफ़ाइल टाइप पैरामीटर जोड़ा गया (Ie20d7, b/275093123)
- एक्सपेरिमेंट के तौर पर उपलब्ध नया
TraceMetric
एपीआई जोड़ा गया है. इसकी मदद से, Perfetto ट्रेस के कॉन्टेंट के आधार पर पूरी तरह से कस्टम मेट्रिक तय की जा सकती हैं. (I4ce31, b/219851406) - बेंचमार्क के दौरान पेज फ़ॉल्ट की संख्या का पता लगाने के लिए, एक्सपेरिमेंटल मेट्रिक जोड़ें. (I48db0)
वर्शन 1.2.0-alpha12
22 मार्च, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha12
रिलीज़ हो गया है. वर्शन 1.2.0-alpha12 में ये बदलाव शामिल हैं.
नई सुविधाएं
- नए बेसलाइन प्रोफ़ाइल Gradle प्लगिन को ऐल्फ़ा वर्शन में रिलीज़ किया गया है. इससे बेसलाइन प्रोफ़ाइल जनरेट करना आसान हो जाता है और डेवलपर का वर्कफ़्लो आसान हो जाता है.
एपीआई में हुए बदलाव
- API 21 और 22 पर, Perfetto ट्रेसिंग की सुविधा हटा दी गई है. इसमें माइक्रोबेंचमार्क और एक्सपेरिमेंट के तौर पर उपलब्ध
PerfettoTrace
एपीआई, दोनों शामिल हैं. इस वर्शन से पहले, कुछ डिवाइसों परUiAutomation
कनेक्शन ठीक से काम नहीं करते थे. (I78e8c) PerfettoTraceProcessor
के लिए, सार्वजनिक तौर पर उपलब्ध एक्सपेरिमेंटल एपीआई जोड़ा गया है, ताकि ट्रेस कॉन्टेंट को पार्स किया जा सके. यह Perfetto ट्रेस डेटा के आधार पर, पूरी तरह से कस्टम मेट्रिक बनाने की दिशा में एक कदम है. (I2659e, b/219851406)
वर्शन 1.2.0-alpha11
8 मार्च, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11
रिलीज़ हो गया है. वर्शन 1.2.0-alpha11 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक से ज़्यादा APK वाले ऐप्लिकेशन बंडल से प्रोफ़ाइलें फिर से इंस्टॉल करने या निकालने के दौरान,
MacrobenchmarkRule
औरBaselineProfileRule
में क्रैश होने की समस्या ठीक की गई. (I0d8c8, b/270587281)
वर्शन 1.2.0-alpha10
22 फ़रवरी, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10
रिलीज़ हो गया है. वर्शन 1.2.0-alpha10 में ये बदलाव शामिल हैं.
नई सुविधाएं
- Android 14 और इसके बाद के वर्शन पर, Macrobenchmark अब टारगेट ऐप्लिकेशन को फिर से इंस्टॉल नहीं करता, ताकि कंपाइलेशन की स्थिति को रीसेट किया जा सके. ऐसा प्लैटफ़ॉर्म की नई सुविधा की वजह से होता है. पहले, रूट किए गए डिवाइस का होना ज़रूरी था. इसके अलावा, हर बेंचमार्क के चलने से पहले, ऐप्लिकेशन की सभी स्थितियों (जैसे, उपयोगकर्ता का लॉगिन) को हटाना पड़ता था. (I9b08c, b/249143766)
गड़बड़ियां ठीक की गईं
- कंपाइलेशन को स्किप करने की वजह से, खाली प्रोफ़ाइल के साथ क्रैश होने वाली
DryRunMode
की समस्या ठीक की गई. इसके बजाय, यह एक ही बार चलता है और प्रोफ़ाइल को एक्सट्रैक्ट करता है, ताकि यह पक्का किया जा सके कि कुछ डेटा कैप्चर किया गया है. (I2f05d, b/266403227) - पुराने एपीआई लेवल पर powerstats की मौजूदगी की जांच करते समय,
PowerMetric
क्रैश होने की समस्या ठीक की गई. (5faaf9, b/268253898)
वर्शन 1.2.0-alpha09
11 जनवरी, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09
रिलीज़ हो गया है. वर्शन 1.2.0-alpha09 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- सभी बेंचमार्क / बेसलाइन प्रोफ़ाइल जनरेशन को बंद करने के लिए,
androidx.benchmark.enabledRules
इंस्ट्रुमेंटेशन आर्ग्युमेंट मेंNone
को पास करने की सुविधा चालू की गई. (I3d7fd, b/258671856) - ऐप्लिकेशन मॉड्यूल में
PerfettoTrace
कैप्चर करने की सुविधा से जुड़ी समस्या ठीक की गई. जैसे, टेस्ट APKs के लिए अपने-आप इंस्ट्रुमेंटेशन की सुविधा उपलब्ध नहीं है (I12cfc) - Studio के आउटपुट में, adb pull के तर्क के क्रम से जुड़ी समस्या ठीक की गई (I958d1, b/261781624)
- अब मैक्रोबेंचमार्क चलाने की कोशिश करते समय, Arm Emulator API 33 की सही पहचान की जाती है. साथ ही, चेतावनी को सही तरीके से प्रिंट किया जाता है. (69133b,b/262209591)
- Macrobenchmark में, बैटरी के बिना काम करने वाले डिवाइसों पर बैटरी लेवल की जांच करने की सुविधा बंद की गई (fe4114, b/232448937)
वर्शन 1.2.0-alpha08
7 दिसंबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha08
रिलीज़ हो गया है. वर्शन 1.2.0-alpha08 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- टेस्ट के हिस्से के तौर पर, Perfetto ट्रेस (इन्हें सिस्टम ट्रेस भी कहा जाता है) कैप्चर करने के लिए, एक्सपेरिमेंट के तौर पर नए एपीआई
PerfettoTrace.record {}
औरPerfettoTraceRule
जोड़े गए हैं. इससे टेस्ट के काम करने के तरीके और परफ़ॉर्मेंस की जांच की जा सकेगी. (I3ba16) BaselineProfileRule
अब पैकेज के प्रीफ़िक्स की सूची के बजाय, फ़िल्टर प्रेडिकेट स्वीकार करता है. इससे टेस्ट को फ़िल्टर करने का पूरा कंट्रोल मिलता है. (I93240)- एक्सपेरिमेंट के तौर पर उपलब्ध एपीआई
BaselineProfileRule.collectStableBaselineProfile
जोड़ें. यह एपीआई, एन इटरेशन के लिए तब तक इंतज़ार करता है, जब तक कि बेसलाइन प्रोफ़ाइल स्थिर न हो जाए. (I923f3) BaselineProfileRule
का इस्तेमाल करके बेसलाइन प्रोफ़ाइल जनरेट करते समय, आउटपुट फ़ाइल के नाम का प्रीफ़िक्स तय करने की सुविधा जोड़ी गई है. (I7b59f, b/260318655)
गड़बड़ियां ठीक की गईं
- फ़ाइल आउटपुट लिखने की सुरक्षा को बेहतर बनाया गया है. इससे, आउटपुट फ़ाइलों को चुपचाप न लिखे जाने / जोड़े जाने से रोका जा सकेगा. ऐसा खास तौर पर API 21/22 पर होगा. (If8c44, b/227510293)
- फ़ाइल को सही तरीके से बनाने और रखने के लिए,
simpleperf
ट्रेस आउटपुट को ठीक करें. इससे उन समस्याओं को भी ठीक किया जा सकेगा जिनमें Gradle, फ़ाइल को डाउनलोड नहीं कर पाता है. (I12a1c, b/259424099) - profileinstaller बहुत पुराना होने पर, profileinstaller से जुड़ी गड़बड़ी के मैसेज को बेहतर बनाया गया है. अब यह आपको एपीआई 31 से 33 पर बेसलाइन प्रोफ़ाइल मेज़र करने के लिए, profileinstaller के वर्शन (1.2.1) को अपडेट करने के लिए कहता है. इसके बजाय, यह नहीं कहता कि यह सुविधा काम नहीं करती. (Ia517f, b/253519888)
- शेल कमांड के कई फ़ेल होने की समस्याओं को ठीक किया गया. ये समस्याएं, onerror मैसेज Print needed API <=23 की वजह से हो रही थीं. इनमें, perfetto capture binary setup और trace capture से जुड़ी समस्याएं शामिल हैं (Ib6b87, b/258863685)
- जनरेट किए गए प्रोफ़ाइल नियमों को अपने-आप क्रम से लगाएं, ताकि समय के साथ उनमें होने वाले बदलावों की संख्या को कम किया जा सके. ऐसा तब होता है, जब प्रोफ़ाइल नियमों को सोर्स कंट्रोल में चेक-इन किया जाता है. (Ie2509)
- Android 13 (एपीआई 33) से पहले के वर्शन पर, बिना रूट किए गए बिल्ड में क्रैश होने की समस्या ठीक की गई. इस समस्या में यह मैसेज दिखता था:
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183)
ऐसी समस्याएं जिनकी जानकारी पहले से है
- profileinstaller मेनिफ़ेस्ट में ब्रॉडकास्ट रजिस्ट्री मौजूद न होने की वजह से, MacrobenchmarkScope.dropShaderCache()
क्रैश हो सकता है. यह समस्या अब तक ठीक नहीं की गई है. (I5c728, b/258619948) profileinstaller:1.3.0-alpha02
में इस समस्या को हल करने के लिए, अपने ऐप्लिकेशन के AndroidManifest.xml में यह कोड जोड़ें. यह कोड, आपके बेंचमार्क के AndroidManifest.xml में नहीं जोड़ा जाना चाहिए:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
वर्शन 1.2.0-alpha07
9 नवंबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07
रिलीज़ हो गया है. वर्शन 1.2.0-alpha07 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- यह Macrobenchmarks में ऊर्जा और पावर को मेज़र करने के लिए
PowerMetric
एपीआई जोड़ता है. (Ife601, b/220183779) - शेडर कैश को हटाने के लिए,
MacrobenchmarkScope.dropShaderCache()
को ठीक किया गया. इससेStartupMode.COLD
बेंचमार्क से करीब 20 मिलीसेकंड का नॉइज़ हट जाता है, क्योंकि अब हर बार के दोहराव में शेडर को लगातार साफ़ किया जाता है. पहले, वार्मअप इटरेशन का इस्तेमाल करकेPartial
कंपाइल करने पर, गलत तरीके से कम समय दिखता था. ऐसा इसलिए होता था, क्योंकि वार्मअप के दौरान शेडर कैशिंग होने की संभावना ज़्यादा होती थी. इस समस्या को ठीक करने के लिए, रूट किए गए डिवाइस की ज़रूरत होती है. इसके अलावा, टारगेट ऐप्लिकेशन मेंprofileinstaller:1.3.0-alpha02
का इस्तेमाल किया जा सकता है.ProfileInstaller
लाइब्रेरी के एपीआई में हुए बदलावों के बारे में जानने के लिए, कृपया ProfileInstaller 1.30-alpha02 पेज देखें. (Ia5171, b/231455742) TraceSectionMode("label", Mode.Sum)
जोड़ा गया है. इससे एक ही लेबल वाले कई ट्रेस सेक्शन पर बिताए गए कुल समय को मेज़र किया जा सकता है. उदाहरण के लिए,TraceSectionMetric("inflate", Mode.Sum)
, मुद्रास्फीति पर खर्च किए गए कुल समय के लिएinflateMs
मेट्रिक की रिपोर्ट देगा. साथ ही, एपीआई लेवल 29 की ज़रूरी शर्त को भी हटा दिया गया है, क्योंकिTraceSectionMetric
,androidx.tracing.Trace
के साथ मिलकर काम करता है. यह सुविधा, टारगेट ऐप्लिकेशन मेंforceEnableAppTracing
का इस्तेमाल करके, एपीआई लेवल को कम करने के लिए भी काम करती है. (Id7b68, b/231455742)
गड़बड़ियां ठीक की गईं
- सभी इंटरनल शेल कमांड की सुरक्षा को बेहतर बनाया गया है. इसके लिए, सभी आउटपुट/गड़बड़ियों की पुष्टि की गई है. (I5984d, b/255402908, b/253094958)
- बेसलाइन प्रोफ़ाइल
adb pull
कमांड में डिवाइस तय करें, ताकि एक से ज़्यादा डिवाइस कनेक्ट होने पर पुल कमांड को आसानी से कॉपी किया जा सके (एक एम्युलेटर तक) (I6ac6c, b/223359380) - अगर मैक्रोबेंचमार्क टेस्ट एपीके को खुद इंस्ट्रुमेंट करने के तौर पर सेट अप नहीं किया गया है, तो गड़बड़ी जोड़ें. इस गड़बड़ी की वजह से, टारगेट ऐप्लिकेशन की प्रोसेस में मैक्रोबेंचमार्किंग नहीं हो पाती. इस प्रोसेस में, मैक्रोबेंच ऐप्लिकेशन को कंपाइल/बंद/कोल्ड स्टार्ट नहीं कर पाएगा. साथ ही, अपनी अनुमतियों को कंट्रोल नहीं कर पाएगा (I4279b)
measureRepeated()
में एक समस्या ठीक की गई है. इस समस्या की वजह से,setupBlock
के बादStartupMode.COLD
टारगेट प्रोसेस को बंद नहीं करता था. अबsetupBlock
ऐप्लिकेशन के साथ इंटरैक्ट करने से, ऐप्लिकेशन की प्रोसेस चालू नहीं रहेगी. साथ ही, कोल्ड स्टार्ट मेज़रमेंट अमान्य हो जाएगा. (I8ebb7)
वर्शन 1.2.0-alpha06
24 अक्टूबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06
रिलीज़ हो गया है. वर्शन 1.2.0-alpha06 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
BaselineProfileRule
को अब Android 13 (एपीआई 33) पर रूट करने की ज़रूरत नहीं है. साथ ही, यह अब एक्सपेरिमेंट के तौर पर उपलब्ध नहीं है. (Ie0a7d, b/250083467, b/253094958)- इस बदलाव से, बिना रूट किए गए डिवाइसों पर किसी ऐप्लिकेशन की प्रोफ़ाइलों को डिस्क में फ़्लश करने की समस्या भी ठीक हो जाती है. हालांकि, इसके लिए टारगेट ऐप्लिकेशन की profileinstaller डिपेंडेंसी को अपडेट करना ज़रूरी है.
- रूट नहीं किए गए डिवाइस पर
BaselineProfileRule
याCompilationMode.Partial(warmupIterations)
का इस्तेमाल करने के लिए, आपको टारगेट ऐप्लिकेशन को भी अपडेट करना होगा, ताकिandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
का इस्तेमाल किया जा सके. इससे प्रोफ़ाइल को डिस्क में सही तरीके से फ़्लश किया जा सकता है, ताकि उसे कंपाइल/एक्सट्रैक्ट किया जा सके.
गड़बड़ियां ठीक की गईं
- एपीआई 33 और इसके बाद के वर्शन पर
SampledProfiling
क्रैश होने की समस्या ठीक की गई. (I40743, b/236109374)
वर्शन 1.2.0-alpha05
5 अक्टूबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05
रिलीज़ हो गया है. वर्शन 1.2.0-alpha05 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Studio system trace viewer में, कैप्चर किए गए बेंचमार्क ट्रेस के लिए फ़्रेम ब्रेकडाउन की समस्या ठीक की गई (I3f3ae, b/239677443)
FrameTimingMetric
को ठीक किया गया है, ताकिFrameOverrun
को एपीआई 29 के बजाय 31 की ज़रूरत हो (I716dd, b/220702554)BaselineProfileRule
में इटरेशन सेट करें. साथ ही, अगर टारगेट पैकेज इंस्टॉल नहीं है, तो साफ़ तौर पर इसकी जानकारी दें. यह काम MacrobenchmarkRule के लिए पहले ही किया जा चुका है. (Ic09a3, b/227991471)
वर्शन 1.2.0-alpha04
21 सितंबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04
रिलीज़ हो गया है. वर्शन 1.2.0-alpha04 में ये बदलाव शामिल हैं.
नई सुविधाएं
स्थानीय डेवलपमेंट को तेज़ी से पूरा करने और ऐप्लिकेशन ऑटोमेशन की पुष्टि करने के लिए, मैक्रोबेंचमार्क में
dryRunMode.enable
इंस्ट्रुमेंटेशन आर्ग्युमेंट के लिए सहायता जोड़ें.यह सुविधा, माइक्रोबेंचमार्क में पहले से उपलब्ध है. जैसे, प्रीसबमिट में. इससे, इटरेशन की संख्या 1 पर सेट हो जाती है. साथ ही, कंपाइलेशन को स्किप कर दिया जाता है, सभी कॉन्फ़िगरेशन से जुड़ी गड़बड़ियों को छिपा दिया जाता है, और मेज़रमेंट .json फ़ाइल का आउटपुट बंद कर दिया जाता है. (Ib51b4, b/175149857)Gradle कमांड लाइन पर:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
build.gradle में:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
गड़बड़ियां ठीक की गईं
StartupTimingMetric
को ठीक किया गया है, ताकि मेज़र की गई गतिविधियों को अबMacrobenchmarkScope.startActivityAndWait()
के ज़रिए लॉन्च करने की ज़रूरत न पड़े. इसका मतलब है कि मेट्रिक, लॉन्च को पिक अप कर सकती है. जैसे, सूचनाएं,Context.startActivity()
, ऐप्लिकेशन में गतिविधि के आधार पर नेविगेशन या शेल कमांड. (Ia2de6, b/245414235)- उस बग को ठीक किया गया है जिसमें फ़्रेम का पता लगाने की प्रोसेस को कम करके, एम्युलेटर पर लॉन्च पूरा होने का इंतज़ार करने के दौरान
startActivityAndWait
का टाइम आउट हो जाता था. (Ibe2c6, b/244594339, b/228946895)
वर्शन 1.2.0-alpha03
7 सितंबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03
रिलीज़ हो गया है. वर्शन 1.2.0-alpha03 में ये बदलाव शामिल हैं.
नई सुविधाएं
BenchmarkRule
/JUnit4
से अलग,BenchmarkState
का इस्तेमाल करने के लिए एक्सपेरिमेंटल एपीआई जोड़े गए. (Id478f, b/228489614)
गड़बड़ियां ठीक की गईं
startActivityAndWait
के लिए Leanback फ़ॉलबैक जोड़ा गया. (01ed77, b/242899915)
वर्शन 1.2.0-alpha02
24 अगस्त, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02
रिलीज़ हो गया है. वर्शन 1.2.0-alpha02 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- रूट किए गए डिवाइसों पर भी,
MacrobenchmarkScope.killProcess()
के लिए डिफ़ॉल्ट रूप सेam force stop
पर सेट होता है. हालांकि, बेसलाइन प्रोफ़ाइल जनरेट करने के दौरान ऐसा नहीं होता. इसे बूलियन आर्ग्युमेंट के साथ बदला जा सकता है. (02cce9, b/241214097)
गड़बड़ियां ठीक की गईं
- सिस्टम ऐप्लिकेशन के लिए, बेसलाइन प्रोफ़ाइल जनरेट करने की सुविधा. (I900b8, b/241214097)
- अनरूट किए गए डिवाइसों पर, ओडीपीएम की पावर मेट्रिक की जांच करने की सुविधा. (a38c78, b/229623230)
वर्शन 1.2.0-alpha01
27 जुलाई, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01
रिलीज़ हो गया है. वर्शन 1.2.0-alpha01 में ये बदलाव शामिल हैं.
नई सुविधाएं
- नया tracing-perfetto-common कॉम्पोनेंट. इसकी मदद से, टूलिंग, ऐसे ऐप्लिकेशन में Perfetto SDK टूल की ट्रेसिंग चालू कर सकती है जो इसे दिखाता है (I2cc7f)
सिर्फ़ मानदंड या सिर्फ़ बेसलाइन प्रोफ़ाइल जनरेशन के लिए, फ़िल्टर किए गए मैक्रोबेंचमार्क रन को चालू करने के लिए,
androidx.benchmark.enabledRules
इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ा गया. सिर्फ़ एक तरह का टेस्ट चलाने के लिए, 'Macrobenchmark' या 'BaselineProfile' पास करें. उदाहरण के लिए, जब सिर्फ़ एम्युलेटर परBaselineProfiles
जनरेट किया जा रहा हो. कॉमा लगाकर अलग की गई सूची भी इस्तेमाल की जा सकती है. (I756b7, b/230371561)उदाहरण के लिए, आपके मैक्रोबेंचमार्क के build.gradle में:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
इसके अलावा, Gradle कमांड लाइन से भी ऐसा किया जा सकता है:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
एपीआई में हुए बदलाव
- मानदंडों में ऊर्जा और बिजली से जुड़े टास्क को मेज़र करने के लिए, नया
PowerMetric
जोड़ा गया है. (I9f39b, b/220183779) - प्रोफ़ाइल रीसेट और कंपाइल करने की प्रोसेस को स्किप करने के लिए, नया कंपाइलेशन मोड
CompilationMode.Ignore
जोड़ा गया. (Ibbcf8, b/230453509) - पैकेज के नामों के हिसाब से आउटपुट फ़ाइल को फ़िल्टर करने के लिए,
BaselineProfileRule#collectBaselineProfile
में एक नया पैरामीटर जोड़ा गया (If7338, b/220146561) - इससे डेवलपर, डिवाइस की बैटरी को पूरी तरह डिस्चार्ज कर सकता है, ताकि बैटरी की खपत का पता लगाया जा सके. (I6a6cb)
MacrobenchmarkScope
में शेडर कैश मिटाने की सुविधा जोड़ी गई. (I32122)- इस कुकी की मदद से डेवलपर, मेट्रिक टाइप और सबसिस्टम की ज़रूरी कैटगरी को दिखाने की सुविधा कॉन्फ़िगर कर सकता है. (I810c9)
- पहले, अगर बेंचमार्क को किसी ऐसे डिवाइस पर चलाया जाता था जिस पर वह काम नहीं करता था, तो
UnsupportedOperationException
थ्रो किया जाता था. अब यूओई सिर्फ़ तब होता है, जब मेट्रिक का इस्तेमाल ऐसे डिवाइस पर किया जाता है जिस पर यह काम नहीं करती (जैसे:PowerMetric.configure
). (I5cf20, b/227229375) - मैक्रोबेंचमार्क में, हर सिस्टम कैटगरी में कुल पावर और एनर्जी को मेज़र करने के लिए,
TotalPowerMetric
औरTotalEnergyMetric
को जोड़ा गया है. (I3b26b, b/224557371)
गड़बड़ियां ठीक की गईं
- अनरूट किए गए बिल्ड पर, हर मैक्रोबेंचमार्क के बीच कंपाइल किए गए तरीकों को सही तरीके से रीसेट न किए जाने की समस्या को ठीक किया गया है. माफ़ करें, लेकिन इसके लिए हर बार APK को फिर से इंस्टॉल करना होगा. इससे हर मैक्रोबेंचमार्क के लिए ऐप्लिकेशन का डेटा मिट जाएगा. (I31c74, b/230665435)
- API 21/22 पर ट्रेस रिकॉर्डिंग क्रैश होने की समस्या ठीक की गई (If7fd6, b/227509388, b/227510293, b/227512788)
- गतिविधि लॉन्च होने की प्रोसेस पूरी होने का पता लगाने की सुविधा को बेहतर बनाया गया है. इससे स्टार्टअप मैक्रोबेंचमार्क में, 'किसी भी मेट्रिक को नहीं पढ़ा जा सका' अपवाद को ठीक किया जा सकेगा. (Ia517c)
वर्शन 1.1.1
वर्शन 1.1.1
9 नवंबर, 2022
androidx.benchmark:benchmark-*:1.1.1
रिलीज़ हो गया है. वर्शन 1.1.1 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Android 11 (एपीआई 30) या इसके बाद के वर्शन वाले कुछ डिवाइसों पर होने वाली
android.system.ErrnoException: open failed: EACCES
की समस्या ठीक की गई. यह1.2.0-alpha01
से लिए गए फ़िक्स का चेरी-पिक है. (aosp/2072249)
वर्शन 1.1.0
वर्शन 1.1.0
15 जून, 2022
androidx.benchmark:benchmark-*:1.1.0
रिलीज़ हो गया है. वर्शन 1.1.0 में ये बदलाव शामिल हैं.
- यह वर्शन,
androidx.benchmark:benchmark-*:1.1.0-rc03
के जैसा ही है.
1.0.0 के बाद हुए अहम बदलाव
Jetpack Macrobenchmarks के लिए सहायता उपलब्ध है. इससे, पूरे ऐप्लिकेशन के इंटरैक्शन को मेज़र किया जा सकता है. जैसे, स्टार्टअप और स्क्रोलिंग. इससे ट्रेस कैप्चर करने की सुविधा मिलती है. साथ ही, ट्रेस सेक्शन को मेज़र किया जा सकता है.
बेसलाइन प्रोफ़ाइलों के लिए सहायता
CompilationMode.Partial
का इस्तेमाल करके, बेसलाइन प्रोफ़ाइलों की परफ़ॉर्मेंस का आकलन किया जा सकता है.@BaselineProfileRule
का इस्तेमाल करके, किसी अहम उपयोगकर्ता के सफ़र के लिए बेसलाइन प्रोफ़ाइलें अपने-आप जनरेट करें.
माइक्रोबेंचमार्क रन के दौरान, ऐलोकेशन मेट्रिक और प्रोफ़ाइलिंग की सुविधा.
वर्शन 1.1.0-rc03
1 जून, 2022
androidx.benchmark:benchmark-*:1.1.0-rc03
रिलीज़ हो गया है. वर्शन 1.1.0-rc03 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
हर बेंचमार्क इटरेशन पर टारगेट पैकेज को फिर से इंस्टॉल करने से बचें. ( aosp/2093027, b/231976084)
pressHome()
से300ms
की देरी हटाएं. (aosp/2086030, b/231322975)बैकग्राउंड में इस्तेमाल की जाने वाली शेल कमांड को ऑप्टिमाइज़ करके, मैक्रोबेंचमार्क के दोहराव की स्पीड को बेहतर बनाएं. (aosp/2086023, b/231323582)
मैक्रोबेंचमार्क की मदद से बेसलाइन प्रोफ़ाइलें जनरेट करते समय, मैनेज किए गए Gradle डिवाइसों के लिए सहायता जोड़ी गई. (aosp/2062228, b/228926421)
वर्शन 1.1.0-rc02
11 मई, 2022
androidx.benchmark:benchmark-*:1.1.0-rc02
रिलीज़ हो गया है. वर्शन 1.1.0-rc02 में ये बदलाव शामिल हैं.
- ध्यान दें कि इस रिलीज़ में, ऐप्लिकेशन के काम करने के तरीके में बदलाव किया गया है. अब हर बेंचमार्क के बीच ऐप्लिकेशन को पूरी तरह से फिर से इंस्टॉल किया जाता है, ताकि सटीक मेज़रमेंट किया जा सके.
गड़बड़ियां ठीक की गईं/व्यवहार में बदलाव
उस समस्या को ठीक किया गया है जिसकी वजह से मैक्रोबेंचमार्क के बीच ऐप्लिकेशन कंपाइलेशन को सही तरीके से रीसेट नहीं किया गया था. साथ ही, बिना रूट किए गए बिल्ड पर इसे रीसेट नहीं किया गया था. इससे उन कई मामलों को ठीक किया जा सकता है जहां एक से ज़्यादा टेस्ट चलाने पर, मेज़रमेंट पर
CompilationMode
का कोई असर नहीं पड़ता था. इस समस्या को हल करने के लिए, टारगेट ऐप्लिकेशन अब हर टेस्ट के तरीके को पूरी तरह से फिर से इंस्टॉल कर रहा है. इससे हर मैक्रोबेंचमार्क के बीच ऐप्लिकेशन का डेटा मिट जाएगा. (I31c74, b/230665435)इससे ऐप्लिकेशन, टेस्ट से पहले स्टेट सेट अप नहीं कर पाते. इसलिए, अब इस समस्या को हल करने के लिए, कंपाइलेशन / फिर से इंस्टॉल करने की प्रोसेस को स्किप किया जा सकता है. उदाहरण के लिए, शेल कमांड
cmd package compile -f -m speed <package>
का इस्तेमाल करके, टारगेट को पूरी तरह से कंपाइल किया जा सकता है. इसके बाद, मैक्रोबेंचमार्क के कंपाइलेशन चरण को बायपास किया जा सकता है.उदाहरण के लिए, आपके मैक्रोबेंचमार्क के build.gradle में:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
इसके अलावा, Gradle कमांड लाइन से भी ऐसा किया जा सकता है:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
androidx.benchmark.enabledRules
इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़कर, मैक्रोबेंचमार्क और बेसलाइन प्रोफ़ाइल जनरेट करने वाले टेस्ट के बीच मॉड्यूल शेयर करने की सुविधा जोड़ी गई. सिर्फ़ एक तरह का टेस्ट चलाने के लिए, 'Macrobenchmark' या 'BaselineProfile' पास करें. उदाहरण के लिए, एम्युलेटर परBaselineProfiles
जनरेट करते समय. (I756b7, b/230371561)उदाहरण के लिए, आपके मैक्रोबेंचमार्क के build.gradle में:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
इसके अलावा, Gradle कमांड लाइन से भी ऐसा किया जा सकता है:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
वर्शन 1.1.0-rc01
20 अप्रैल, 2022
androidx.benchmark:benchmark-*:1.1.0-rc01
रिलीज़ हो गया है. वर्शन 1.1.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Android Studio में, बेसलाइन प्रोफ़ाइल के आउटपुट लिंक अब यूनीक फ़ाइल नाम का इस्तेमाल करते हैं. इस तरह, आउटपुट में हमेशा
BaselineProfileRule
के इस्तेमाल के सबसे नए नतीजे दिखते हैं. ( aosp/2057008, b/228203086 )
वर्शन 1.1.0-beta06
6 अप्रैल, 2022
androidx.benchmark:benchmark-*:1.1.0-beta06
रिलीज़ हो गया है. वर्शन 1.1.0-beta06 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- API 21/22 पर ट्रेस रिकॉर्डिंग क्रैश होने की समस्या ठीक की गई (If7fd6, b/227509388)
- गतिविधि लॉन्च होने की प्रोसेस पूरी होने का पता लगाने की सुविधा को बेहतर बनाया गया है. इससे स्टार्टअप मैक्रोबेंचमार्क में, 'किसी भी मेट्रिक को नहीं पढ़ा जा सका' अपवाद को ठीक किया जा सकेगा. (Ia517c)
CompilationMode.None()
का इस्तेमाल करते समय, मैक्रोबेंचमार्क के लिए स्टार्टअप मेट्रिक ठीक की गई हैं. इस बदलाव से पहले,CompilationMode.Partial()
की तुलना मेंCompilation.None()
की स्पीड कम दिखती थी. (611ac9).
वर्शन 1.1.0-beta05
23 मार्च, 2022
androidx.benchmark:benchmark-*:1.1.0-beta05
रिलीज़ हो गया है. वर्शन 1.1.0-beta05 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
CompilationMode.None
का इस्तेमाल करते समय, प्रोफ़ाइल इंस्टॉल करने की प्रोसेस को स्किप करने के बाद पैकेज बंद करें. (aosp/1991373)- उस समस्या को ठीक किया गया है जिसकी वजह से
StartupMode.COLD
का इस्तेमाल करते समय, Macrobenchmarks स्टार्टअप मेट्रिक इकट्ठा नहीं कर पाता था. (aosp/2012227 b/218668335)
वर्शन 1.1.0-beta04
23 फ़रवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta04
रिलीज़ हो गया है. वर्शन 1.1.0-beta04 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
Android 10 पर मेट्रिक के मौजूद न होने की समस्या को ठीक किया गया. साथ ही,
NoSuchElementException
की वजह से होने वाली समस्या को ठीक किया गया. इसकी वजह यह थी कि प्रोसेस के नाम, ट्रेस में सही तरीके से कैप्चर नहीं किए जा रहे थे. (Ib4c17, b/218668335)Q (API 29) और इसके बाद के वर्शन पर, थर्मल थ्रॉटलिंग का पता लगाने के लिए
PowerManager
का इस्तेमाल करें. इससे थर्मल थ्रॉटलिंग का पता लगाने के दौरान, गलत पॉज़िटिव की फ़्रीक्वेंसी में काफ़ी कमी आती है. साथ ही, उपयोगकर्ता के बिल्ड पर बेंचमार्क की स्पीड काफ़ी बढ़ जाती है. यह थ्रॉटलिंग का पता भी लगाता है. ऐसा तब भी होता है, जब क्लॉक लॉक हों. हालांकि, ऐसा तब होता है, जब डिवाइस के फ़िज़िकल एनवायरमेंट के हिसाब से क्लॉक बहुत ज़्यादा लॉक हों. (I9c027, b/217497678, b/131755853)जांच को आसान बनाने के लिए, simpleperf की सैंपलिंग प्रोफ़ाइलिंग को सिर्फ़
measureRepeated
थ्रेड पर फ़िल्टर किया गया (Ic3e12, b/217501939)एक से ज़्यादा प्रोसेस वाले ऐप्लिकेशन में, नाम वाली यूज़र इंटरफ़ेस (यूआई) सबप्रोसेस से मेट्रिक पाने की सुविधा (Ice6c0, b/215988434)
Android 9 (SDK 28) को टारगेट करने के लिए, बेसलाइन प्रोफ़ाइल के नियमों को फ़िल्टर करें. aosp/1980331 b/216508418
Compilation.None()
का इस्तेमाल करते समय, प्रोफ़ाइल इंस्टॉल करने की प्रोसेस को स्किप करें. इसके अलावा, अगर ऐप्लिकेशनandroidx.profileinstaller
और Android Gradle प्लगिन के पुराने वर्शन का इस्तेमाल कर रहा है, तो चेतावनियों की रिपोर्ट करें. aosp/1977029
वर्शन 1.1.0-beta03
9 फ़रवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta03
रिलीज़ हो गया है. वर्शन 1.1.0-beta03 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- ऑडियो अंडररन का पता लगाने की सुविधा देने के लिए, एक्सपेरिमेंटल फ़्लैग के तहत मैक्रोबेंचमार्क लाइब्रेरी में
AudioUnderrunMetric
जोड़ा गया (Ib5972) BaselineProfileRule
अबsetup
ब्लॉक को स्वीकार नहीं करता है, क्योंकि यहprofileBlock
की तरह ही काम करता है. (Ic7dfe, b/215536447)उदाहरण के लिए,
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें Studio आउटपुट से लिंक किए जाने पर, बाद के रन में माइक्रोबेंच प्रोफ़ाइलर ट्रेस अपडेट नहीं होते थे (I5ae4d, b/214917025)
- एपीआई 23 (Ice380) पर, कंपाइलेशन शेल कमांड को रोकने की सुविधा
- इनके नाम बदले गए हैं:
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
. ऐसा इसलिए किया गया है, ताकि यह साफ़ तौर पर पता चल सके कि ये अवधि हैं, टाइमस्टैंप नहीं. साथ ही, प्रीफ़िक्स को मैच करने के लिए भी ऐसा किया गया है. (I0eba3, b/216337830)
वर्शन 1.1.0-beta02
26 जनवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta02
रिलीज़ हो गया है. वर्शन 1.1.0-beta02 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- माइक्रोबेंचमार्क स्टैक सैंपलिंग / मेथड ट्रेसिंग प्रोफ़ाइल के नतीजे अब Studio के आउटपुट में लिंक किए गए हैं. ये नतीजे, अन्य प्रोफ़ाइलिंग आउटपुट की तरह ही होते हैं. साथ ही, ये नतीजे, ऐलोकेशन मेट्रिक को नहीं छिपाते हैं. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule अब जनरेट की गई BaselineProfile टेक्स्ट फ़ाइल को पुल करने के लिए, logcat और Studio आउटपुट में
adb pull
कमांड प्रिंट करता है. (f08811)
वर्शन 1.1.0-beta01
12 जनवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta01
रिलीज़ हो गया है. वर्शन 1.1.0-beta01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- यह समस्या ठीक करता है, जिसमें प्रोफ़ाइलर आर्ग्युमेंट को चालू करने के विकल्प को अनदेखा किया जाता है. (I37373, b/210619998)
- अब काम नहीं करने वाले
CompliationModes
को हटाया गया (I98186, b/213467659) CompilationMode.Partial
के आधारभूत प्रोफ़ाइल आर्ग्युमेंट को साफ़ तौर पर समझने के लिए, enum में स्विच किया गया. (Id67ea)
वर्शन 1.1.0-alpha13
15 दिसंबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13
रिलीज़ हो गया है. वर्शन 1.1.0-alpha13 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Android Q (एपीआई 29+) पर, माइक्रोबेंच के आउटपुट में कम ओवरहेड वाली सिस्टम ट्रेसिंग की सुविधा जोड़ी गई है. ध्यान दें कि फ़िलहाल, यह सुविधा
android.os.Trace
याandroidx.tracing
Jetpack API के ज़रिए कस्टम ट्रेसिंग को कैप्चर नहीं करती है, ताकि नतीजों पर असर न पड़े. इस ट्रेसिंग से, अस्थिरता की समस्या का पता लगाने में मदद मिलनी चाहिए. खास तौर पर, बेंचमार्क से बाहर के सोर्स से होने वाली अस्थिरता की समस्या का पता लगाने में. (I298be, b/205636583, b/145598917) CompilationModes
को तीन क्लास में बांटा गया है - पूरी तरह से, कोई नहीं, कुछ हद तक. पहले, इन्हें कंपाइलेशन के तर्कों (जिन्हें अब हम लागू करने की जानकारी के तौर पर मानते हैं) और सुविधाओं के हिसाब से अलग-अलग नाम दिए जाते थे. इससे, प्लैटफ़ॉर्म के अलग-अलग वर्शन के बीच होने वाले फ़ायदे-नुकसान, संभावित कॉम्बिनेशन, और व्यवहार के बारे में ज़्यादा जानकारी मिलती है. (I3d7bf, b/207132597)- सेटअप और मेज़रमेंट अब हमेशा जोड़े में होते हैं और क्रम में होते हैं. अब पैकेज के नाम और वर्शन के बारे में क्वेरी की जा सकती है. हालांकि, कुछ वार्मअप के मामलों में वर्शन
null
हो सकता है. (Id3b68, b/208357448, b/208369635)
गड़बड़ियां ठीक की गईं
CompilationMode.Speed
को गलती सेNone
के तौर पर माना गया था (I01137)
वर्शन 1.1.0-alpha12
17 नवंबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12
रिलीज़ हो गया है. वर्शन 1.1.0-alpha12 में ये बदलाव शामिल हैं.
नई सुविधाएं
- कस्टम ट्रेस-आधारित टाइमिंग मेज़रमेंट के लिए, एक्सपेरिमेंटल TraceSectionMetric जोड़ें. (I99db1, b/204572664)
गड़बड़ियां ठीक की गईं
- हर बार डिवाइस को चालू करें, ताकि यूज़र इंटरफ़ेस (यूआई) की जांच की जा सके - इसके लिए, लॉकस्क्रीन बंद होनी चाहिए. (Ibfa28, b/180963442)
- एम्युलेटर और नॉन-रूटेड डिवाइसों पर, StackSampling प्रोफ़ाइलिंग मोड में कई क्रैश ठीक किए गए (Icdbda, b/202719335)
- हर इटरेशन के आखिर में 0.5 सेकंड की नींद को हटा दिया गया है - अगर आपको इस बदलाव के साथ मेट्रिक नहीं दिखती हैं, तो कृपया गड़बड़ी की शिकायत करें. (Iff6aa)
- डेटा के ड्रॉप होने की संभावना कम करें. साथ ही, ट्रेसिंग से मेमोरी ओवरहेड कम करें (Id2544, b/199324831, b/204448861)
- कॉम्पैक्ट शेड्यूलर स्टोरेज फ़ॉर्मैट पर स्विच करके, ट्रेस के साइज़ को ~40% तक कम किया गया. (Id5fb6, b/199324831)
- स्टार्टअप मेट्रिक के अपडेट किए गए इंप्लीमेंटेशन, ताकि वे हमेशा रेंडरथ्रेड के आखिर में खत्म हों. यह सभी प्लैटफ़ॉर्म वर्शन पर एक जैसा होगा. साथ ही, यह इन-ऐप्लिकेशन मेज़रमेंट से ज़्यादा मेल खाएगा. (Ic6b55)
वर्शन 1.1.0-alpha11
3 नवंबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
रिलीज़ हो गया है. वर्शन 1.1.0-alpha11 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- मैक्रोबेंचमार्क में अब
minSdkVersion
का23
है. (If2655) - एक नया एक्सपेरिमेंटल
BaselineProfileRule
जोड़ा गया है. यह ऐप्लिकेशन के अहम उपयोगकर्ता अनुभव के लिए, बेसलाइन प्रोफ़ाइलें जनरेट कर सकता है. इस बारे में ज़्यादा जानकारी देने वाला दस्तावेज़ जल्द ही उपलब्ध होगा. (Ibbefa, b/203692160) - measureRepeated इंटरफ़ेस के उस वैरिएंट को हटाता है जिसे Java कॉलर के लिए जोड़ा गया था. इसकी वजह यह है कि इससे, तरीके को पूरा करने/हल करने में अस्पष्टता पैदा होती थी. Java कॉल करने वालों को, measureRepeated से Unit.Instance को फिर से दिखाना होगा. अगर इससे आपको परेशानी हो रही है, तो कृपया गड़बड़ी की शिकायत करें. हम आने वाले समय में इस समस्या को ठीक कर सकते हैं. (Ifb23e, b/204331495)
वर्शन 1.1.0-alpha10
27 अक्टूबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
रिलीज़ हो गया है. वर्शन 1.1.0-alpha10 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- StartupTimingMetric को एपीआई 23 पर वापस ले जाएं. इस नए तरीके से, reportFullyDrawn() को बेहतर तरीके से मैनेज किया जाता है. इससे तब तक इंतज़ार किया जाता है, जब तक कि कॉन्टेंट रेंडर न हो जाए. (If3ac9, b/183129298)
- Java कॉल करने वालों के लिए, कई MacrobenchmarkScope तरीकों में JvmOverloads जोड़ा गया. (I644fe, b/184546459)
- MacrobenchmarkRule.measureRepeated फ़ंक्शन का कोई ऐसा विकल्प उपलब्ध कराएं जो Java भाषा में
Consumer<MacrobenchmarkScope>
का इस्तेमाल करता हो. (If74ab, b/184546459)
गड़बड़ियां ठीक की गईं
- ट्रेसिंग की सुविधा के जल्दी शुरू न होने और मेट्रिक का डेटा मौजूद न होने की समस्या ठीक की गई. इससे "बेंचमार्क के दौरान कोई भी मेट्रिक नहीं पढ़ी जा सकी" अपवादों को ठीक किया जा सकेगा. ये अपवाद, लाइब्रेरी की वजह से हुए थे. (I6dfcb, b/193827052, b/200302931)
- FrameNegativeSlack का नाम बदलकर FrameOverrun कर दिया गया है, ताकि इसके मतलब को साफ़ तौर पर बताया जा सके. इसका मतलब है कि फ़्रेम, अपने टाइम बजट से कितना ज़्यादा हो गया. (I6c2aa, b/203008701)
वर्शन 1.1.0-alpha09
13 अक्टूबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha09
रिलीज़ हो गया है. वर्शन 1.1.0-alpha09 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- API 31/S+ पर बिना रूट के कर्नल पेज कैश को हटाने की सुविधा जोड़ी गई है. इससे StartupMode.COLD लॉन्च की सटीक जानकारी मिलेगी. (Iecfdb, b/200160030)
वर्शन 1.1.0-alpha08
29 सितंबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08
रिलीज़ हो गया है. वर्शन 1.1.0-alpha08 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- स्क्रोलिंग मैक्रोबेंचमार्क को एपीआई 23 (If39c2, b/183129298) पर वापस लाने के लिए, उन्हें चालू करें
- यूज़र इंटरफ़ेस (यूआई) और JSON आउटपुट में, सैंपल की गई नई तरह की मेट्रिक जोड़ें. इसमें हर इटरेशन के हिसाब से, कई सैंपल के पर्सेंटाइल पर फ़ोकस किया गया है. (I56247, b/199940612)
- पूरे बेंचमार्क में फ़्लोटिंग पॉइंट मेट्रिक पर स्विच करें लाइब्रेरी (Studio के यूज़र इंटरफ़ेस (यूआई) में काटी गई). (I69249, b/197008210)
वर्शन 1.1.0-alpha07
1 सितंबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07
रिलीज़ हो गया है. वर्शन 1.1.0-alpha07 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- एपीआई लेवल को बढ़ाकर 21 कर दिया गया है, ताकि आने वाले समय में सबसे कम एपीआई लेवल को सपोर्ट किया जा सके. RequiredApi() के ज़रिए, एपीआई के मौजूदा सबसे कम वर्शन की जानकारी दी जाती है. फ़िलहाल, यह 29 है (I440d6, b/183129298)
गड़बड़ियां ठीक की गईं
ProfileInstaller
को ठीक किया गया है, ताकि बेसलाइन प्रोफ़ाइल का इस्तेमाल करने वाले ऐप्लिकेशन,CompilationMode.BaselineProfile
का इस्तेमाल करके MacroBenchmarks को आसानी से चला सकें. (I42657, b/196074999) ध्यान दें: इसेandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
या इससे ज़्यादा पर भी अपडेट करना ज़रूरी है.StartupMode.COLD
+CompilationMode.None
बेंचमार्क अब ज़्यादा स्थिर हैं. (I770cd, b/196074999)
वर्शन 1.1.0-alpha06
18 अगस्त, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06
रिलीज़ हो गया है. वर्शन 1.1.0-alpha06 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
androidx.benchmark.iterations
इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ा गया है, ताकि स्थानीय तौर पर टेस्टिंग/प्रोफ़ाइलिंग करते समय, मैन्युअल तरीके से इटरेशन की संख्या को बदला जा सके. (6188be, b/194137879)
गड़बड़ियां ठीक की गईं
- API 29 और इसके बाद के वर्शन पर, Simpleperf को डिफ़ॉल्ट सैंपलिंग प्रोफ़ाइलर के तौर पर इस्तेमाल किया गया. (Ic4b34, b/158303822)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
CompilationMode.BaselineProfile
पर अभी काम जारी है. फ़िलहाल, यह तय करने के लिए इसका इस्तेमाल न करें कि कोई प्रोफ़ाइल कितनी अच्छी है.
वर्शन 1.1.0-alpha05
4 अगस्त, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05
रिलीज़ हो गया है. वर्शन 1.1.0-alpha05 में ये बदलाव शामिल हैं.
1.1.0-alpha04
को रिलीज़ होने से पहले रद्द कर दिया गया था, क्योंकि यह कभी-कभी क्रैश हो जाता था. b/193827052
एपीआई में हुए बदलाव
- startActivityAndWait को
am start
के ज़रिए लॉन्च करने के लिए स्विच किया गया है. इससे हर मेज़रमेंट इटरेशन का समय करीब पांच सेकंड कम हो जाता है. हालांकि, अब इंटेंट पार्सलेबल काम नहीं करेंगे. (I5a6f5, b/192009149
गड़बड़ियां ठीक की गईं
- थर्मल थ्रॉटलिंग का पता लगाने की सुविधा को कम बार चालू करना. साथ ही, अगर थ्रॉटलिंग का पता बार-बार चलता है, तो बेसलाइन को फिर से कैलकुलेट करना. (I7327b)
- Android S बीटा (Ib60cc, b/193260119) पर काम करने के लिए, FrameTimingMetric से जुड़ी समस्या ठीक की गई है
CompilationMode.BaselineProfile
को बेहतर तरीके से काम करने में मदद करने के लिए,EmptyActivity
का इस्तेमाल करके टारगेट ऐप्लिकेशन को बंद होने की स्थिति से बाहर लाएं. (Id7cac, b/192084204)- प्लैटफ़ॉर्म के स्टैंडर्ड के मुताबिक, ट्रेस फ़ाइल एक्सटेंशन को
.perfetto-trace
में बदल दिया गया है. (I4c236, b/174663039) - StartupTimingMetric अब "fullyDrawnMs" मेट्रिक आउटपुट करता है. इससे यह मेज़र किया जाता है कि आपका ऐप्लिकेशन पूरी तरह से रेंडर होने में कितना समय लेता है. अपने ऐप्लिकेशन के लिए इस मेट्रिक को तय करने के लिए, जब आपका शुरुआती कॉन्टेंट तैयार हो जाए, तब Activity.reportFullyDrawn को कॉल करें. जैसे, जब आपकी शुरुआती सूची के आइटम, डेटाबेस या नेटवर्क से लोड हो जाएं. (reportFullyDrawn तरीका, ComponentActivity पर बिल्ड वर्शन की जांच किए बिना उपलब्ध है). ध्यान दें कि आपकी जांच को मेट्रिक कैप्चर करने के लिए, लंबे समय तक चलना चाहिए. ऐसा इसलिए, क्योंकि startActivityAndWait, reportFullyDrawn के लिए इंतज़ार नहीं करता है. (If1141, b/179176560)
- ट्रेस में यूज़र इंटरफ़ेस (यूआई) मेटाडेटा जोड़ने की लागत को 50 से ज़्यादा मिलीसेकंड तक कम किया गया (Ic8390, b/193923003)
- ट्रेसिंग बंद करने पर, पोलिंग फ़्रीक्वेंसी में काफ़ी बढ़ोतरी हुई.इससे स्टार्टअप के बेंचमार्क रनटाइम में 30% से ज़्यादा की कमी आ सकती है. उदाहरण के लिए, Idfbc1, b/193723768
वर्शन 1.1.0-alpha03
16 जून, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03
रिलीज़ हो गया है. वर्शन 1.1.0-alpha03 में ये बदलाव शामिल हैं.
नई सुविधाएं
- Jetpack ProfileInstaller लाइब्रेरी का इस्तेमाल करके इंस्टॉल की गई प्रोफ़ाइलों के लिए, एक नया
CompilationMode.BaselineProfile
जोड़ा गया है. (aosp/1720930)
गड़बड़ियां ठीक की गईं
मानदंड से जुड़ी गड़बड़ियों को छिपाने के लिए, Gradle के सैंपल कोड को अपडेट किया गया है. अब इसमें ऐसे एपीआई का इस्तेमाल किया जाता है जो बंद नहीं हुआ है. साथ ही, इसमें ऐसा सिंटैक्स इस्तेमाल किया जाता है जो .gradle.kts का इस्तेमाल करने वाले लोगों के लिए भी काम करता है.
उदाहरण के लिए,
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
वर्शन 1.1.0-alpha02
18 मई, 2021
मानदंड के वर्शन 1.1.0-alpha02 में, बेंचमार्किंग का एक अहम कॉम्पोनेंट शामिल किया गया है. इसका नाम मैक्रोबेंचमार्क है. बेंचमार्क की मदद से सीपीयू लूप को मेज़र किया जा सकता है. इसके अलावा, मैक्रोबेंचमार्क की मदद से, पूरे ऐप्लिकेशन के इंटरैक्शन को मेज़र किया जा सकता है. जैसे, स्टार्टअप और स्क्रोलिंग. साथ ही, ट्रेस कैप्चर किए जा सकते हैं. ज़्यादा जानकारी के लिए, लाइब्रेरी का दस्तावेज़ देखें.
androidx.benchmark:benchmark-*:1.1.0-alpha02
रिलीज़ हो गया है. वर्शन 1.1.0-alpha02 में ये बदलाव शामिल हैं.
नई सुविधाएं
मैक्रोबेंचमार्क के आर्टफ़ैक्ट जोड़े गए (androidx.benchmark:benchmark-macro-junit4
और androidx.benchmark:benchmark-macro
)
- अपने ऐप्लिकेशन से स्टार्टअप, स्क्रोलिंग/ऐनिमेशन की परफ़ॉर्मेंस मेट्रिक कैप्चर करें. इन्हें स्थानीय तौर पर या सीआई में कैप्चर किया जा सकता है
- Android Studio में ट्रेस कैप्चर करना और उनकी जांच करना
गड़बड़ियां ठीक की गईं
- Android 12 पर आउटपुट डायरेक्ट्री के साथ शेल अनुमतियों की समस्या को हल किया गया है (ध्यान दें - जिन डिवाइसों पर यह समस्या हो रही है उन पर आउटपुट फ़ाइलें कैप्चर करना जारी रखने के लिए, Android Gradle Plugin को 7.0.0 canary और Android Studio को Arctic Fox (2020.3.1) पर अपडेट करना पड़ सकता है). (Icb039)
- BenchmarkPlugin में सहायता कॉन्फ़िगरेशन को कैश मेमोरी में सेव करने की सुविधा (6be1c1, b/159804788)
- फ़ाइल आउटपुट को आसान बनाया गया - यह डिफ़ॉल्ट रूप से चालू होता है. यह ऐसी डायरेक्ट्री में होता है जिसके लिए
requestLegacyExternalStorage=true
की ज़रूरत नहीं होती (8b5a4d, b/172376362) - यह लाइब्रेरी, उन प्लैटफ़ॉर्म वर्शन पर JIT थ्रेड नहीं मिलने के बारे में logcat की चेतावनियों को ठीक करती है जहां यह मौजूद नहीं है. (I9cc63, b/161847393)
- पढ़ने वाले डिवाइस की ज़्यादा से ज़्यादा फ़्रीक्वेंसी से जुड़ी समस्या को ठीक किया गया. (I55c7a)
वर्शन 1.1.0-alpha01
10 जून, 2020
androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
, और androidx.benchmark:benchmark-junit4:1.1.0-alpha01
रिलीज़ किए जाते हैं. वर्शन 1.1.0-alpha01 में ये बदलाव शामिल हैं.
1.1 की नई सुविधाएं
- बंटवारे की मेट्रिक - बेंचमार्क अब वार्मअप और टाइमिंग के बाद एक और फ़ेज़ में चलते हैं. इससे, बंटवारे की संख्या कैप्चर की जाती है. एलॉकेशन की वजह से, प्लैटफ़ॉर्म के पुराने वर्शन पर परफ़ॉर्मेंस से जुड़ी समस्याएं हो सकती हैं. जैसे, O में 140ns, M में 8ns हो गया. इसे Nexus5X पर मापा गया था. यह मेट्रिक, Android Studio कंसोल आउटपुट में दिखती है. साथ ही,
- प्रोफ़ाइलिंग की सुविधा - अब बेंचमार्क रन के लिए प्रोफ़ाइलिंग डेटा कैप्चर किया जा सकता है. इससे यह पता लगाया जा सकता है कि आपका कोड धीरे-धीरे क्यों चल रहा है. बेंचमार्क, एआरटी से मेथड ट्रेसिंग या मेथड सैंपलिंग को कैप्चर करने की सुविधा देता है. इन फ़ाइलों की जांच, Android Studio में मौजूद Profiler की मदद से की जा सकती है. इसके लिए, File > Open पर जाएं.
- Benchmark Gradle प्लग इन अब आसानी से सेटअप करने के लिए डिफ़ॉल्ट सेटिंग उपलब्ध कराता है:
testBuildType
को डिफ़ॉल्ट रूप से रिलीज़ करने के लिए सेट किया गया है, ताकि कोड कवरेज की सुविधा के साथ डिपेंडेंसी का इस्तेमाल न किया जा सके. रिलीज़ buildType को डिफ़ॉल्ट buildType के तौर पर भी कॉन्फ़िगर किया जाता है. इससे Android Studio को पहली बार कोई प्रोजेक्ट खोलने पर, सही बिल्ड वैरिएंट को अपने-आप चुनने की अनुमति मिलती है. (b/138808399)signingConfig.debug
का इस्तेमाल डिफ़ॉल्ट हस्ताक्षर कॉन्फ़िगरेशन के तौर पर किया जाता है (b/153583269)
** गड़बड़ियां ठीक की गईं **
- वार्मअप ट्रांज़िशन के ओवरहेड को काफ़ी हद तक कम किया गया. इसमें हर बेंचमार्क के लिए पहली मेज़रमेंट वैल्यू, अन्य वैल्यू की तुलना में ज़्यादा होती थी. यह समस्या, बहुत छोटे बेंचमार्क (एक माइक्रोसेकंड या उससे कम) में ज़्यादा दिखती थी. (b/142058671)
- कमांड लाइन से चलाने पर, हर बेंचमार्क के लिए
InstrumentationResultParser
गड़बड़ी ठीक की गई. (I64988, b/154248456)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- कमांड लाइन और Gradle के ज़रिए Benchmark को कॉल करने पर, नतीजे सीधे तौर पर नहीं दिखते. इस समस्या को हल करने के लिए, Studio का इस्तेमाल करें या नतीजों के लिए JSON आउटपुट फ़ाइल को पार्स करें.
- बेंचमार्क रिपोर्टिंग, उन डिवाइसों से रिपोर्ट नहीं खींच पाती है जिन पर ऐसा ऐप्लिकेशन इंस्टॉल किया गया है जिसका applicationId “android” या “download” (केस-इनसेंसिटिव) से खत्म होता है. जिन उपयोगकर्ताओं को यह समस्या आ रही है उन्हें Android Gradle प्लग इन को 4.2-alpha01 या इसके बाद के वर्शन पर अपग्रेड करना चाहिए.
वर्शन 1.0.0
मानदंड वर्शन 1.0.0
20 नवंबर, 2019
androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
, और androidx.benchmark:benchmark-junit4:1.0.0
को 1.0.0-rc01 के बाद से बिना किसी बदलाव के रिलीज़ किया गया है. वर्शन 1.0.0 में ये बदलाव शामिल हैं.
1.0.0 वर्शन की मुख्य सुविधाएं
बेंचमार्क लाइब्रेरी की मदद से, ऐप्लिकेशन कोड के परफ़ॉर्मेंस बेंचमार्क लिखे जा सकते हैं. साथ ही, नतीजे तुरंत पाए जा सकते हैं.
इससे बिल्ड और रनटाइम कॉन्फ़िगरेशन से जुड़ी समस्याओं को रोकने में मदद मिलती है. साथ ही, डिवाइस की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है, ताकि मेज़रमेंट सटीक और एक जैसे हों. समय के साथ कोड की परफ़ॉर्मेंस देखने और रिग्रेशन को रोकने के लिए, Android Studio में सीधे तौर पर या Continuous Integration में बेंचमार्क चलाएं.
मुख्य सुविधाओं में ये शामिल हैं:
- क्लॉक स्टेबिलाइज़ेशन
- थ्रेड को प्राथमिकता देने की सुविधा
- यूज़र इंटरफ़ेस (यूआई) की परफ़ॉर्मेंस की जांच करने की सुविधा. जैसे, RecyclerView का सैंपल
- JIT-aware वार्मअप और लूपिंग
- पोस्ट-प्रोसेसिंग के लिए, JSON फ़ाइल में बेंचमार्क का आउटपुट
वर्शन 1.0.0-rc01
23 अक्टूबर, 2019
androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
, और androidx.benchmark:benchmark-junit4:1.0.0-rc01
रिलीज़ किए जाते हैं. वर्शन 1.0.0-rc01 में ये बदलाव शामिल हैं.
नई सुविधाएं
- मानदंडों में systrace ट्रेसिंग जोड़ी गई
गड़बड़ियां ठीक की गईं
- मेट्रिक के स्थिर न होने की समस्या को ठीक किया गया. इसमें, डीप्रायराइज़ेशन (b/140773023) की वजह से, वार्म अप से पहले JIT पूरा नहीं होता था
- Android Gradle प्लग इन 3.5 और 3.6 में, JSON आउटपुट डायरेक्ट्री को एक जैसा किया गया
वर्शन 1.0.0-beta01
9 अक्टूबर, 2019
androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
, और androidx.benchmark:benchmark-junit4:1.0.0-beta01
रिलीज़ किए जाते हैं. वर्शन 1.0.0-beta01 में ये बदलाव शामिल हैं.
नई सुविधाएं
- हर वार्मअप से पहले गार्बेज कलेक्शन चलाएं, ताकि एक बेंचमार्क से दूसरे बेंचमार्क में मेमोरी लीक होने की समस्या कम हो (b/140895105)
गड़बड़ियां ठीक की गईं
androidx.annotation:android-experimental-lint
डिपेंडेंसी जोड़ी गई है, ताकि एक्सपेरिमेंटल एपीआई का इस्तेमाल न करने पर Java कोड, लिंट की गड़बड़ियों को सही तरीके से दिखा सके. यह गड़बड़ियां, Kotlin कॉल करने वालों के लिए Kotlin एक्सपेरिमेंटल एनोटेशन की तरह ही होंगी.- अब Android Gradle Plugin 3.6 में, आउटपुट के लिए
additionalTestOutputDir
इंस्ट्रूमेंटेशन आर्ग्युमेंट के इस्तेमाल का सही तरीके से पता लगाता है, ताकि यह पता चल सके कि AGP डेटा कॉपी को कब हैंडल करेगा. -1
को सही तरीके से प्रिंट करने के लिए, JSON में क्लॉक फ़्रीक्वेंसी का पता न चलने की समस्या को ठीक किया गया (b/141945670).
वर्शन 1.0.0-alpha06
18 सितंबर, 2019
androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
, और androidx.benchmark:benchmark-junit4:1.0.0-alpha06
रिलीज़ किए जाते हैं. वर्शन 1.0.0-alpha06 में ये बदलाव शामिल हैं.
नई सुविधाएं
- टेस्ट रनर के लिए पुराने पैकेज का गलत तरीके से इस्तेमाल करने की जांच की गई है. अब इससे ज़्यादा मददगार गड़बड़ी का मैसेज मिलता है
एपीआई में हुए बदलाव
- एक्सपेरिमेंट के तौर पर उपलब्ध एनोटेशन
ExperimentalAnnotationReport
अब सही तरीके से सार्वजनिक हो गया है. एक्सपेरिमेंट के तौर पर उपलब्ध BenchmarkState#report एपीआई का इस्तेमाल करने के लिए, अब इस एनोटेशन की ज़रूरत होगी
वर्शन 1.0.0-alpha05
5 सितंबर, 2019
androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
, और androidx.benchmark:benchmark-junit4:1.0.0-alpha05
रिलीज़ किए जाते हैं. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
एपीआई में हुए बदलाव
BenchmarkState.reportData
एपीआई को अब एक्सपेरिमेंट के तौर पर उपलब्ध के तौर पर मार्क कर दिया गया है
गड़बड़ियां ठीक की गईं
- क्लॉक-लॉकिंग स्क्रिप्ट से जुड़ी समस्या को ठीक किया गया है. यह स्क्रिप्ट, उन डिवाइसों पर काम नहीं करती थी जिनमें
cut
याexpr
शेल यूटिलिटी मौजूद नहीं थी. ./gradlew lockClocks
टास्क से जुड़ी समस्या को ठीक किया गया है. यह समस्या उन डिवाइसों में होती थी जिन्हें su यूटिलिटी के पुराने वर्शन से रूट किया गया था. इस वर्शन में-c
फ़्लैग काम नहीं करता था.
वर्शन 1.0.0-alpha04
7 अगस्त, 2019
androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
, और androidx.benchmark:benchmark-junit4:1.0.0-alpha04
रिलीज़ किए जाते हैं. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
बिना Gradle के मानदंड लाइब्रेरी का इस्तेमाल करने के तरीके के बारे में नया दस्तावेज़ भी जोड़ा गया है. इसमें अलग-अलग बिल्ड सिस्टम (जैसे, Bazel या Buck) के साथ इस्तेमाल करने और सीआई में चलाने के बारे में बताया गया है. ज़्यादा जानकारी के लिए, Gradle के बिना बेंचमार्क बनाना और लगातार इंटिग्रेशन में बेंचमार्क चलाना लेख पढ़ें.
नई सुविधाएं
- Gradle प्लगिन
- अब यह सुविधा, टेस्ट कवरेज को अपने-आप बंद कर देती है. साथ ही,
AndroidBenchmarkRunner
को डिफ़ॉल्ट रूप से सेट कर देती है (b/138374050) - एजीपी पर आधारित डेटा कॉपी करने की नई सुविधा जोड़ी गई है. इसका इस्तेमाल, बेंचमार्क चलाने और AGP 3.6+ का इस्तेमाल करने के दौरान किया जा सकता है
- अब यह सुविधा, टेस्ट कवरेज को अपने-आप बंद कर देती है. साथ ही,
- JSON फ़ॉर्मैट में जोड़े गए नए फ़ील्ड
- कुल बेंचमार्क टेस्ट रन टाइम का आउटपुट (b/133147694)
@Parameterized
नाम वाली स्ट्रिंग का इस्तेमाल करने वाले बेंचमार्क (उदाहरण के लिए@Parameters(name = "size={0},depth={1}")
) अब JSON आउटपुट (b/132578772) में, हर बेंचमार्क के हिसाब से पैरामीटर के नाम और वैल्यू दिखाते हैं
- ड्राई रन मोड (b/138785848)
- हर बेंचमार्क लूप को सिर्फ़ एक बार चलाने के लिए, "ड्राई रन" मोड जोड़ा गया है. इससे मेज़रमेंट कैप्चर किए बिना, गड़बड़ियों/क्रैश की जांच की जा सकती है. यह सुविधा, उदाहरण के लिए, प्रीसबमिट में बेंचमार्क को तुरंत चलाने के लिए काम आ सकती है. इससे यह जांच की जा सकती है कि वे ठीक से काम कर रहे हैं या नहीं.
एपीआई में हुए बदलाव
- मॉड्यूल का स्ट्रक्चर बदल गया है. इससे लाइब्रेरी को अलग-अलग हिस्सों में बांट दिया गया है (b/138451391)
benchmark:benchmark-junit4
में JUnit डिपेंडेंसी वाली क्लास शामिल हैं:AndroidBenchmarkRunner
औरBenchmarkRule
. ये दोनों क्लास,androidx.benchmark.junit4
पैकेज में ले जाई गई हैंbenchmark:benchmark-common
में बाकी लॉजिक शामिल होता है. इसमें BenchmarkState API भी शामिल है- इस स्प्लिट की मदद से, लाइब्रेरी आने वाले समय में JUnit4 API के बिना बेंचमार्किंग की सुविधा दे पाएगी
- कॉन्फ़िगरेशन से जुड़ी चेतावनियों को अब गड़बड़ियों के तौर पर माना जाता है. इससे टेस्ट क्रैश हो जाएगा (b/137653596)
- ऐसा इसलिए किया जाता है, ताकि सटीक मेज़रमेंट को बढ़ावा दिया जा सके. खास तौर पर, सीआई में
- इंस्ट्रुमेंटेशन आर्ग्युमेंट का इस्तेमाल करके, इन गड़बड़ियों को वापस चेतावनियों में बदला जा सकता है. उदाहरण के लिए:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
गड़बड़ियां ठीक की गईं
- Q डिवाइसों पर बाहरी स्टोरेज में डेटा सेव करते समय होने वाली गड़बड़ियों के बारे में ज़्यादा जानकारी वाले मैसेज मिलते हैं. साथ ही, समस्या को हल करने के सुझाव भी मिलते हैं
- बेंचमार्क टेस्ट के दौरान स्क्रीन अपने-आप चालू हो जाती हैं. ऐसा तब होता है, जब स्क्रीन बंद होने पर टेस्ट पूरा नहीं हो पाता
बाहरी योगदान
- Sergey Zakharov को धन्यवाद. उन्होंने JSON आउटपुट को बेहतर बनाने और स्क्रीन बंद होने की समस्याओं को ठीक करने में योगदान दिया है!
वर्शन 1.0.0-alpha03
2 जुलाई, 2019
androidx.benchmark:benchmark:1.0.0-alpha03
और androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
रिलीज़ हो गए हैं. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
नई सुविधाएं
- पूरी JSON रिपोर्ट में, हर बेंचमार्क के लिए थर्मल थ्रॉटलिंग की वजह से बैटरी की खपत की जानकारी दिखाएं
गड़बड़ियां ठीक की गईं
- Android प्लगिन और Android ब्लॉक के बाद, Gradle प्लगिन को लागू करने की ज़रूरत नहीं होनी चाहिए
- स्कोप किए गए स्टोरेज का इस्तेमाल करने वाले Android 10 डिवाइसों पर, मानदंड वाली रिपोर्ट की सुविधा जोड़ी गई
वर्शन 1.0.0-alpha02
6 जून, 2019
androidx.benchmark:1.0.0-alpha02
और
androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
रिलीज़ हो गए हैं. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
ध्यान दें कि हम JSON स्कीमा को एक एपीआई के तौर पर इस्तेमाल कर रहे हैं. हम अन्य एपीआई की तरह ही, इस एपीआई के स्टेबल होने से जुड़ी शर्तों का पालन करेंगे. बीटा वर्शन में एक बार स्टेबल होने के बाद, इसमें बहुत कम बदलाव किए जाएंगे. फ़ाइनल रिलीज़ में इसे ठीक कर दिया जाएगा. माइनर रिलीज़ में सिर्फ़ नए बदलाव जोड़े जाएंगे. वहीं, मेजर रिलीज़ में बदलाव किए जाएंगे या उन्हें हटाया जाएगा.
एपीआई में हुए बदलाव
JSON स्कीमा को बेहतर बनाया गया है. JSON स्कीमा में आगे होने वाले बदलावों में, सिर्फ़ नई चीज़ें जोड़ी जाएंगी:
- आने वाले समय में, मेट्रिक के अन्य ग्रुप के साथ काम करने के लिए, नतीजे के ऑब्जेक्ट स्ट्रक्चर को फिर से व्यवस्थित किया गया (b/132713021)
- टेस्ट रन के कॉन्टेक्स्ट की जानकारी जोड़ी गई है. जैसे, डिवाइस और बिल्ड की जानकारी. साथ ही, यह जानकारी भी जोड़ी गई है कि घड़ियां लॉक हैं या नहीं. यह जानकारी, टॉप-लेवल ऑब्जेक्ट (b/132711920) में जोड़ी गई है
- समय की मेट्रिक के नामों में अब ‘ns’ शामिल है (b/132714527)
- रिपोर्ट की गई हर मेट्रिक के लिए अतिरिक्त आंकड़े जोड़े गए (ज़्यादा से ज़्यादा, मीडियन, कम से कम). साथ ही, 'नैनो' के बारे में खास जानकारी देने वाले आसान आंकड़े हटा दिए गए (b/132713851)
एक्सएमएल आउटपुट हटाया गया (b/132714414)
BenchmarkState.reportData
API से, थर्मल थ्रॉटलिंग का पता लगाने की सुविधा हटा दी गई है (b/132887006)
गड़बड़ियां ठीक की गईं
- हाल ही के कुछ ओएस डिवाइसों पर
./gradlew lockClocks
के काम न करने की समस्या ठीक की गई है (b/133424037) - एम्युलेटर के लिए, थ्रॉटलिंग का पता लगाने की सुविधा बंद की गई (b/132880807)
वर्शन 1.0.0-alpha01
7 मई, 2019
androidx.benchmark:benchmark:1.0.0-alpha01
रिलीज़ हो गया है. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.