मानदंड
| नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| 28 जनवरी, 2026 | 1.4.1 | - | - | 1.5.0-alpha02 |
डिपेंडेंसी का एलान करना
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.5
वर्शन 1.5.0-alpha02
28 जनवरी, 2026
androidx.benchmark:benchmark-*:1.5.0-alpha02 रिलीज़ हो गया है. वर्शन 1.5.0-alpha02 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
Kotlin मल्टी-प्लैटफ़ॉर्म मॉड्यूल के लिए, बेसलाइन प्रोफ़ाइल जनरेट करने की सुविधा को आंशिक तौर पर जोड़ा गया है. आम तौर पर, प्रोफ़ाइलों पर निर्भरता को dependencies ब्लॉक में
baselineProfileGradle कॉन्फ़िगरेशन का इस्तेमाल करके तय किया जा सकता है. हालांकि, फ़िलहाल यह KMP मॉड्यूल के लिए काम नहीं करता है.kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // THIS DOES NOT WORK // baselineProfile(":yourProducerProject") } } }इसके बजाय, आपको
baselineProfile**extension का इस्तेमाल करके अपनी डिपेंडेंसी तय करनी चाहिए. (Ie19c4)plugins { id("org.jetbrains.kotlin.multiplatform") id("com.android.kotlin.multiplatform.library") id("androidx.baselineprofile.consumer") } kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // ... } } } // Define dependencies // This works ! baselineProfile { variants { androidMain { from(project(":yourProducerProject")) } } }
वर्शन 1.5.0-alpha01
17 दिसंबर, 2025
androidx.benchmark:benchmark-*:1.5.0-alpha01 रिलीज़ हो गया है. वर्शन 1.5.0-alpha01 में ये बदलाव शामिल हैं.
- Macrobenchmark 1.5, मेज़र किए गए ऐप्लिकेशन के साथ इंटरैक्ट करने को आसान बनाने के लिए
UiAutomator2.4 का इस्तेमाल करता है. MacrobenchmarkScope ऑब्जेक्ट अब UiAutomatorTestScope को बढ़ाता है. इससे आपकोonElement { ... }.click()जैसे आधुनिकUiAutomatorएपीआई इस्तेमाल करने की अनुमति मिलती है. UiAutomator2.4 के बारे में ज़्यादा जानकारी के लिए, दस्तावेज़ देखें.
नई सुविधाएं
- AGP 9.0 में, बेसलाइन प्रोफ़ाइल Gradle प्लगिन के लिए अब
newDsl=falseकी ज़रूरत नहीं है (Iaaac7, b/443311090) - ट्रेस कॉन्फ़िगरेशन को बढ़ाया गया है, ताकि बेंचमार्क में कैप्चर किए गए सिस्टम/Perfetto ट्रेस में मुख्य साइज़ (जैसे, छोटा/बड़ा) शामिल किया जा सके. (I8e397, b/457469959)
एपीआई में हुए बदलाव
- (UiAutomator में) नई विंडो के लिए इंतज़ार करने के लिए,
startActivitywait को बदल दिया गया है. (I35da6, b/440021797) - androidx.benchmark में
BlackHoleएपीआई को स्थिर किया गया है. (I2b67e, b/451749438) PerfettoTraceRuleके लिए, सुविधा देने वाले कंस्ट्रक्टर के तौर पर@JvmOverloadsजोड़ें. (I1510a, b/443763207)
वर्शन 1.4
वर्शन 1.4.1
10 सितंबर, 2025
androidx.benchmark:benchmark-*:1.4.1 रिलीज़ हो गया है. वर्शन 1.4.1 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- अगर
perfettoSdkTracing=true(जैसे, माइक्रोबेंचमार्क में कंपोज़ को ट्रेस करते समय) पहले से चल रही टारगेट प्रोसेस को बंद कर देता था और StartupMode तय नहीं किया गया था. (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)
गड़बड़ियां ठीक की गईं
- सही प्लगिन का इस्तेमाल करने के लिए, स्टार्टअप के बारे में अहम जानकारी देने वाले लिंक के फ़ॉर्मैट को अपडेट किया गया है. साथ ही, डेलिमिटर (
:,%3Aसे छोटा है और दोनों काम करते हैं) को ज़्यादा साफ़ तौर पर दिखाया गया है (Ie18ef)TraceProcessor - प्रोसेस बंद करने के लिए हमेशा 'बंद करें' विकल्प का इस्तेमाल करें. भले ही, डिवाइस रूट किया गया हो और सिस्टम ऐप्लिकेशन बंद किए जा रहे हों. यह फ़ॉर्म के अपवादों को ठीक करता है:
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सर्वर लोड और क्वेरी करने के लिए, डिफ़ॉल्ट टाइमआउट को बढ़ाकर 120 सेकंड कर दिया गया है. पहले यह 60/30 सेकंड था. साथ ही, दोनों को एक टाइमआउट पैरामीटर के साथ कॉन्फ़िगर किया जा सकता है. (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)
गड़बड़ियां ठीक की गईं
pgreptoybox में हुए बदलाव की वजह से, एपीआई 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-profilesstdout' लेबल वाले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इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ा गया है. इसे फ़ॉल्स पर सेट किया जा सकता है, ताकि लोकल टेस्टिंग के लिए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()से जुड़ी एक समस्या को ठीक किया गया है. इस समस्या की वजह से,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)- API 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)- बेंचमार्क
1.3.2से: इस समस्या को ठीक किया गया है. इसमें Firebase Test Lab (FTL), बेसलाइन प्रोफ़ाइल Gradle प्लगिन से बेसलाइन प्रोफ़ाइल या 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आर्ग्युमेंट, नएExperimentalConfigऑब्जेक्ट मेंMacrobenchmarkRule.measureRepeated()पर ले जाया गया.
गड़बड़ियां ठीक की गईं
- फिर से कोशिश करने की संख्या बढ़ाएं
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 Project Isolation से जुड़ी समस्याओं को ठीक किया गया है. (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) में, बेसलाइन प्रोफ़ाइल Gradle प्लगिन से बेसलाइन प्रोफ़ाइल या 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.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) - माइक्रोबेंचमार्क को छोटा करना -
org.junit.runner.notification.RunListenerकी सबक्लास को बेंचमार्क लाइब्रेरी के ProGuard में रखें (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 पर सेट करें. हालांकि, CI रन के लिए ऐसा करने का सुझाव नहीं दिया जाता है, क्योंकि एएनआर की वजह से लंबे समय तक चलने वाले CI रन में समस्या आ सकती है.
- कई सेकंड तक चलने पर एएनआर से बचने के लिए, यूज़र इंटरफ़ेस (यूआई) थ्रेड के बेंचमार्क (जैसे, Compose/View यूज़र इंटरफ़ेस (यूआई) के साथ इंटरैक्ट करने वाले) के लिए
- काट-छांट करना
- Proguard के नियमों को एम्बेड किया गया है, ताकि कोड छोटा करने की सुविधा चालू होने पर माइक्रोबेंचमार्किंग को बेहतर बनाया जा सके
- किसी लाइब्रेरी मॉड्यूल में कोड छोटा करने/R8 के लिए AGP 8.3 की ज़रूरत होती है. इसे
build.gradleमें मौजूदandroid.buildTypes.release.androidTest.enableMinificationकी मदद से चालू किया जा सकता है - डेड कोड हटाने से रोकने के लिए, एक्सपेरिमेंटल
BlackHole.consume()एपीआई जोड़ा गया (If6812, b/286091643)
- मेट्रिक
- सीपीयू इवेंट काउंटर की एक्सपेरिमेंटल सुविधा (
perf_event_openसे मिलने वाली मेट्रिक, जिसके लिए प्लैटफ़ॉर्म के ज़्यादातर वर्शन पर रूट ऐक्सेस की ज़रूरत होती है),InstrumentationArgumentandroidx.benchmark.cpuEventCounter.enableके ज़रिए ऐक्सेस किया जा सकता है (इसेtrueपर सेट किया जा सकता है). साथ ही,androidx.benchmark.cpuEventCounter.eventsको (Instructions,CpuCycles) पर सेट किया जा सकता है. यह सुविधा, कुछ userdebug एम्युलेटर पर काम करनी चाहिए. हालांकि, सभी उपलब्ध एम्युलेटर पर इसकी जांच नहीं की गई है
- सीपीयू इवेंट काउंटर की एक्सपेरिमेंटल सुविधा (
1.2.0 के बाद से MACRObenchmark में हुए बदलाव
- मैक्रोबेंचमार्क के लिए, मेथड ट्रेसिंग को बेहतर बनाया गया है.
- अब मेथड ट्रेस,
measureBlockकी अवधि के हिसाब से तय किए जाते हैं. अगर प्रोसेस कई बार शुरू होती है, तो ये कई सेशन कैप्चर कर सकते हैं. - इससे पहले, मेथड ट्रेसिंग की सुविधा सिर्फ़
StartupMode.COLDबेंचमार्क के लिए काम करती थी. साथ ही, यहmeasureBlocksके लिए कोई भी डेटा कैप्चर नहीं करती थी. ऐसा तब होता था, जब टारगेट प्रोसेस रीस्टार्ट नहीं होती थी - मैक्रोबेंचमार्क में फ़्लश की गई मेथड ट्रेस को ठीक किया गया है, ताकि मेथड ट्रेस पूरी तरह से कैप्चर की जा सकें और मान्य हों. ऐसा धीमे डिवाइसों पर भी किया जा सकेगा. (I6349a, b/329904950)
- अब मेथड ट्रेस,
- जब प्रोसेस बंद हो जाती है, तब अलग-अलग
warmUpइटरेशन के दौरान ART प्रोफ़ाइल को सही तरीके से डंप करता है, ताकिCompilationMode.Partial(warmup=N)मेज़रमेंट ज़्यादा सटीक हों. (I17923) - ड्रॉप शैडर ब्रॉडकास्ट नहीं हो सका
- शेडर ब्रॉडकास्ट करने में गड़बड़ी होने पर दिखने वाले मैसेज में, गड़बड़ी ठीक करने के सुझाव जोड़े गए
- बिना
ProfileInstaller1.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) - मैक्रोबेंचमार्क चलाने से पहले, बैकग्राउंड में चल रही 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 / अपवाद लेबल जोड़े गए. इससे मौजूदा व्यवहार में कोई बदलाव नहीं होता. इसलिए, कुछ गड़बड़ियां दिखती हैं और अन्य गड़बड़ियों का पता नहीं चलता. हालांकि, इससे गड़बड़ियों को समझना आसान हो जाता है. आम तौर पर, स्टार्टअप मेट्रिक की रिपोर्ट न करने वाले
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) BaselineProfilegradle प्लगिन की प्रॉपर्टी ओवरराइड करने की सुविधा से जुड़ी समस्या ठीक की गई है. इससेnonMinifiedया बेंचमार्क बिल्ड टाइप को पसंद के मुताबिक बनाने पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू की जा सकती है. (Ib8f05, b/324837887)- AGP 8.3.0-alpha15 से पहले के वर्शन में, AAR में लाइब्रेरी की बेसलाइन प्रोफ़ाइलें शामिल करने से जुड़ी समस्या को ठीक किया गया है. (I1d2af, b/313992099)
- जनरेशन टास्क के आखिर में, तय की गई बेसलाइन और स्टार्टअप प्रोफ़ाइल के आउटपुट यूआरएल को ठीक किया गया. (I802e5, b/313976958)
1.2.0 के बाद हुए अन्य अहम बदलाव
- ट्रेस कैप्चर करना
- गड़बड़ी से लॉग की गई चेतावनी तक, 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- Art मेनलाइन मॉड्यूल का पूर्णांक वर्शन (अगर डिवाइस पर मौजूद है, तो-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.IDcontext.build.version.codename- बराबर हैandroid.os.Build.VERSION.CODENAMEcontext.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को सील की गई क्लास में बदल दिया गया है, ताकि आने वाले समय में इसे बढ़ाया जा सके. साथ ही, when स्टेटमेंट (I71f7b) को पूरी तरह से लागू किया जा सकेTraceSectionMetric.Mode.Averageऔर.Countको जोड़ा गया. साथ ही, आर्ग्युमेंट को फिर से क्रम में लगाया गया, ताकि ज़्यादा इस्तेमाल होने वाला आर्ग्युमेंट (मोड) आर्ग्युमेंट की सूची में पहले हो. इससे पैरामीटर के नाम तय करने की ज़रूरत कम हो गई. (Ibf0b0, b/315830077, b/322167531)Metric.getResultका नाम बदलकरgetMeasurementsकर दिया गया, ताकि यह रिटर्न टाइप (I42595) से मैच हो सके
गड़बड़ियां ठीक की गईं
- यह पक्का करने के लिए कि
automaticGenerationDuringBuildबंद होने पर, बेंचमार्क जनरेट की गई बेसलाइन प्रोफ़ाइलों का इस्तेमाल करें, इस समस्या को ठीक किया गया है (Ic144f, b/333024280) BaselineProfilegradle प्लगिन की प्रॉपर्टी ओवरराइड करने की सुविधा से जुड़ी समस्या ठीक की गई है. इससेnonMinifiedया बेंचमार्क बिल्ड टाइप को पसंद के मुताबिक बनाने पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू की जा सकती है. (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 / अपवाद लेबल जोड़े गए. इससे मौजूदा व्यवहार में कोई बदलाव नहीं होता. इसलिए, कुछ गड़बड़ियां दिखती हैं और अन्य गड़बड़ियों का पता नहीं चलता. हालांकि, इससे गड़बड़ियों को समझना आसान हो जाता है. आम तौर पर, स्टार्टअप मेट्रिक की रिपोर्ट न करने वाले
Log.w()वे होते हैं जिनमें नॉन-फ़्रेम इवेंट मौजूद नहीं होते. स्टार्टअप का पता चलने पर अपवाद थ्रो किए जाते हैं. हालांकि, फ़्रेम टाइमिंग की जानकारी (यूआई/आरटी स्लाइस से) को छोड़कर. (Id240f, b/329145809) - मैक्रोबेंचमार्क चलाने से पहले, बैकग्राउंड में चल रही 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एपीआई में कई बदलाव किए गए हैं:Mode.Minजोड़ेंMode.Max- सेक्शन के नाम को मेट्रिक लेबल के तौर पर बदलने के लिए, लेबल आर्ग्युमेंट जोड़ें
- मेट्रिक का मतलब साफ़ तौर पर बताने के लिए, आउटपुट में मोड का नाम जोड़ा गया
- डिफ़ॉल्ट वैल्यू को बदलकर सम कर दिया गया है, क्योंकि इस मेट्रिक का इस्तेमाल ज़्यादातर बार-बार होने वाले इवेंट के लिए किया जाता है CI के इस्तेमाल में होने वाले इन बदलावों के बारे में जानें, क्योंकि इससे डेटा में रुकावटें आ सकती हैं या पार्सिंग में गड़बड़ी हो सकती है. (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) को ठीक किया जा सके ProfileInstaller1.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 प्लगिन से अपवाद हटा दिया गया है.
- 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जोड़ा गया - ट्रेसिंग-परफ़ेक्टो की मदद से ट्रेसिंग चालू करने के लिए,
androidx.benchmark.perfettoSdkTracing.enableआर्ग्युमेंट जोड़ा गया है. उदाहरण के लिए, कंपोज़ रीकंपोज़िशन ट्रेसिंग. ध्यान दें किStartupMode.COLDके साथ इस्तेमाल करने पर, टाइमिंग पर काफ़ी असर पड़ेगा. ऐसा इसलिए, क्योंकि ऐप्लिकेशन के शुरू होने के दौरान ट्रेसिंग लाइब्रेरी लोड और चालू होती है.
ज़रूरी शर्तें
- प्रोफ़ाइल कैप्चर / रीसेट करने और शेडर कैश मेमोरी को मिटाने के लिए, अब टारगेट ऐप्लिकेशन में
ProfileInstaller1.3.0 या इसके बाद का वर्शन होना ज़रूरी है.
- प्रोफ़ाइल कैप्चर / रीसेट करने और शेडर कैश मेमोरी को मिटाने के लिए, अब टारगेट ऐप्लिकेशन में
नए एक्सपेरिमेंटल मीट्रिक एपीआई
- एक्सपेरिमेंट के तौर पर
TraceSectionMetricजोड़ा गया है. इससे आपके ऐप्लिकेशन मेंtrace("") {}ब्लॉक से टाइमिंग की जानकारी निकाली जा सकती है. इसके अलावा, PerfettoTraceProcessorकी पूरी क्वेरी क्षमता का फ़ायदा पाने के लिए, TraceMetric का इस्तेमाल किया जा सकता है. - पावर के इस्तेमाल की जानकारी कैप्चर करने के लिए, एक्सपेरिमेंटल
PowerMetricजोड़ा गया - पेज में गड़बड़ियों की संख्या गिनने के लिए, एक्सपेरिमेंटल
MemoryCountersMetricको जोड़ा गया - एक्सपेरिमेंट के लिए
PerfettoTraceProcessorएपीआई जोड़ा गया है. इसका इस्तेमाल, सिस्टम ट्रेस (जिसे Perfetto ट्रेस भी कहा जाता है) से मेट्रिक निकालने के लिए किया जाता है
- एक्सपेरिमेंट के तौर पर
समाधान
- एक से ज़्यादा APK से इंस्टॉल किए गए ऐप्लिकेशन से प्रोफ़ाइलें इंस्टॉल या एक्सट्रैक्ट करते समय होने वाले क्रैश की समस्या ठीक की गई. जैसे, ऐप्लिकेशन बंडल से.
- एपीआई 31 और इसके बाद के वर्शन पर, फ़्रेम आईडी में अंतर होने पर फ़्रेम को अनदेखा करने की समस्या ठीक की गई है (आम तौर पर, यह समस्या रिपल के दौरान होती है) (I747d2, b/279088460)
FrameTimingMetric - 64 एमबी से ज़्यादा के ट्रेस पर पार्सिंग से जुड़ी गड़बड़ियों को ठीक किया गया (Ief831, b/269949822)
- डिवाइस (खास तौर पर एम्युलेटर) के ओएस इमेज को ट्रेसिंग या कंपाइलेशन के लिए सही तरीके से कॉन्फ़िगर न किए जाने पर होने वाली गड़बड़ियों के बारे में ज़्यादा जानकारी दी गई है
- बैटरी के बिना काम करने वाले डिवाइसों (माइक्रो और मैक्रो) के लिए, बैटरी लेवल की जाँच करने की सुविधा बंद करें
- फ़ाइल आउटपुट को बेहतर बनाया गया है. साथ ही, अमान्य आउटपुट डायरेक्ट्री के लिए ज़्यादा साफ़ तौर पर गड़बड़ियों की जानकारी दी गई है. इसके अलावा, डिफ़ॉल्ट सेटिंग को ज़्यादा सुरक्षित बनाया गया है
StartupMode.COLDकी स्थिरता को बेहतर बनाया गया है. इसके लिए, शेडर कैश को लगातार ड्रॉप किया जाता है. इसेMacrobenchmarkScope.dropShaderCacheके ज़रिए भी ऐक्सेस किया जा सकता हैstartActivityAndWaitके लिए, लीनबैक फ़ॉलबैक की समस्या ठीक की गई.
माइक्रोबेंचमार्क
- सुविधाएं
- प्रोफ़ाइलिंग को अन्य मेट्रिक के बाद, एक अलग फ़ेज़ में ले जाया गया है. इससे एक टेस्ट रन में, सटीक समय और प्रोफ़ाइलिंग के नतीजे, दोनों दिखाए जा सकते हैं.
- एक्सपेरिमेंट के लिए एपीआई
- कस्टम मेट्रिक तय करने के लिए, एक्सपेरिमेंट के तौर पर
MicrobenchmarkConfigAPI जोड़ा गया है. साथ ही, ट्रेसिंग और प्रोफ़ाइलिंग को कॉन्फ़िगर करने की सुविधा भी जोड़ी गई है. इसका इस्तेमाल, तरीके के ट्रेस कैप्चर करने या ट्रेसपॉइंट कैप्चर करने के लिए किया जा सकता है. हालांकि, ट्रेसिंग ओवरहेड के बारे में पता होना चाहिए. - 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 में ये बदलाव शामिल हैं.
नई सुविधाएं
- बेसलाइन प्रोफ़ाइल Gradle प्लगिन अब Android Gradle प्लगिन 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 रूट किए गए डिवाइसों पर, प्रोफ़ाइल किए जा सकने की जांच को स्किप किया गया. (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के लिए Macrobenchmark की सुविधा. (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)
एपीआई में हुए बदलाव
collectBaselineProfileAPI हमेशा स्टेबल बेसलाइन प्रोफ़ाइलें जनरेट करता है.collectStableBaselineProfileएपीआई को हटा दिया गया है. इसके बजाय,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 प्लगिन, ऐल्फ़ा वर्शन में रिलीज़ किया गया है. इससे बेसलाइन प्रोफ़ाइल जनरेट करना आसान हो जाता है और डेवलपर के वर्कफ़्लो को आसान बनाया जा सकता है.
एपीआई में हुए बदलाव
- एपीआई 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 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- सभी बेंचमार्क / बेसलाइन प्रोफ़ाइल जनरेशन को बंद करने के लिए,
Noneकोandroidx.benchmark.enabledRulesइंस्ट्रुमेंटेशन आर्ग में पास करने की सुविधा चालू की गई. (I3d7fd, b/258671856) - ऐप्लिकेशन मॉड्यूल में
PerfettoTraceकैप्चर करने की सुविधा को ठीक किया गया है. जैसे, ऐसे टेस्ट APK जो खुद से इंस्ट्रुमेंट नहीं होते हैं (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 का सेटअप पूरा न हो पाना और ट्रेस कैप्चर न हो पाना शामिल है (Ib6b87, b/258863685)
- जनरेट किए गए प्रोफ़ाइल नियमों को अपने-आप क्रम से लगाएं, ताकि समय के साथ उनमें होने वाले बदलावों की संख्या को कम किया जा सके. ऐसा तब किया जाता है, जब प्रोफ़ाइल नियमों को सोर्स कंट्रोल में चेक-इन किया जाता है. (Ie2509)
- Android 13 (एपीआई 33) से पहले के वर्शन पर, बिना रूट किए गए बिल्ड में क्रैश होने की समस्या ठीक की गई. इस दौरान,
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches(I6c245, b/259508183) मैसेज दिखता था
ऐसी समस्याएं जिनकी जानकारी पहले से है
- MacrobenchmarkScope.dropShaderCache(), profileinstaller मेनिफ़ेस्ट में ब्रॉडकास्ट रजिस्ट्री मौजूद न होने की वजह से क्रैश हो सकता है. यह समस्या अब तक ठीक नहीं की गई है. (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 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Macrobenchmark में ऊर्जा और पावर को मेज़र करने के लिए,
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 के सिस्टम ट्रेस व्यूअर में, कैप्चर किए गए बेंचमार्क ट्रेस के लिए फ़्रेम ब्रेकडाउन की समस्या ठीक की गई (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इंस्ट्रूमेंटेशन आर्ग्युमेंट के लिए सहायता जोड़ें. यह सुविधा, माइक्रोबेंचमार्क में पहले से उपलब्ध है. साथ ही, ऐप्लिकेशन ऑटोमेशन की पुष्टि करने के लिए भी सहायता जोड़ें. जैसे, प्रीसबमिट में. इससे, लूप की संख्या एक पर सेट हो जाती है. साथ ही, कंपाइल करने की प्रोसेस स्किप हो जाती है, कॉन्फ़िगरेशन से जुड़ी सभी गड़बड़ियां ठीक हो जाती हैं, और मेज़रमेंट .json फ़ाइल का आउटपुट बंद हो जाता है. (Ib51b4, b/175149857)Gradle कमांड लाइन पर:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=truebuild.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दिखता था. अब UOE सिर्फ़ तब होता है, जब मेट्रिक का इस्तेमाल ऐसे डिवाइस पर किया जाता है जिस पर यह काम नहीं करती (जैसे: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)
Macrobenchmark की मदद से बेसलाइन प्रोफ़ाइल जनरेट करते समय, मैनेज किए गए 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=falseandroidx.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 Plugin के पुराने वर्शन का इस्तेमाल कर रहा है, तो चेतावनी दिखाएं. 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.tracingJetpack 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 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Macrobenchmark में अब
minSdkVersionका23है. (If2655) - एक नया एक्सपेरिमेंटल
BaselineProfileRuleजोड़ता है. यह ऐप्लिकेशन की क्रिटिकल यूज़र जर्नी के लिए बेसलाइन प्रोफ़ाइल जनरेट कर सकता है. ज़्यादा जानकारी वाला दस्तावेज़ जल्द ही उपलब्ध होगा. (Ibbefa, b/203692160) - यह मेज़ररिपीटेड इंटरफ़ेस के उस वैरिएंट को हटाता है जिसे 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
एपीआई में हुए बदलाव
am startके ज़रिए लॉन्च करने के लिए, startActivityAndWait को स्विच किया गया है. इससे हर मेज़रमेंट इटरेशन का समय करीब पांच सेकंड कम हो जाता है. हालांकि, अब इंटेंट पार्सलेबल काम नहीं करेंगे. (I5a6f5, b/192009149
गड़बड़ियां ठीक की गईं
- थर्मल थ्रॉटलिंग का पता लगाने की सुविधा को कम संवेदनशील बनाया गया है. साथ ही, अगर थ्रॉटलिंग का पता बार-बार चलता है, तो बेसलाइन को फिर से कैलकुलेट किया जाता है. (I7327b)
- Android S बीटा पर काम करने के लिए, FrameTimingMetric से जुड़ी समस्या ठीक की गई (Ib60cc, b/193260119)
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 में ये बदलाव शामिल हैं.
नई सुविधाएं
Macrobenchmark के आर्टफ़ैक्ट जोड़े गए (androidx.benchmark:benchmark-macro-junit4 और androidx.benchmark:benchmark-macro)
- अपने ऐप्लिकेशन से स्टार्टअप, स्क्रोलिंग/ऐनिमेशन की परफ़ॉर्मेंस मेट्रिक कैप्चर करें. ऐसा स्थानीय तौर पर या सीआई में करें
- Android Studio में ट्रेस कैप्चर करना और उनकी जांच करना
गड़बड़ियां ठीक की गईं
- Android 12 पर आउटपुट डायरेक्ट्री के साथ शेल अनुमतियों से जुड़ी समस्या को हल किया गया है. ध्यान दें - जिन डिवाइसों पर यह समस्या हो रही है उन पर आउटपुट फ़ाइलें कैप्चर करना जारी रखने के लिए, Android Gradle प्लगिन को 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 ट्रेसिंग जोड़ी गई
गड़बड़ियां ठीक की गईं
- मेट्रिक के अस्थिर होने की समस्या को ठीक किया गया है. इसमें, प्राथमिकता कम होने की वजह से, वार्म अप से पहले JIT पूरा नहीं होता था (b/140773023)
- 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 प्लगिन 3.6 में, अब आउटपुट के लिए
additionalTestOutputDirइंस्ट्रूमेंटेशन आर्ग्युमेंट के इस्तेमाल का सही तरीके से पता चलता है. इससे यह पता चलता है कि AGP, डेटा कॉपी को कब मैनेज करेगा. - JSON में क्लॉक फ़्रीक्वेंसी का पता नहीं चलने की समस्या को ठीक किया गया, ताकि
-1को सही तरीके से प्रिंट किया जा सके (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 पर आधारित डेटा कॉपी करने की नई सुविधा जोड़ी गई है. इसका इस्तेमाल, बेंचमार्क चलाते समय और 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.reportDataAPI से, थर्मल थ्रॉटलिंग का पता लगाने की सुविधा हटा दी गई है (b/132887006)
गड़बड़ियां ठीक की गईं
- हाल ही के कुछ ओएस डिवाइसों पर
./gradlew lockClocksके काम न करने की समस्या ठीक की गई है (b/133424037) - एम्युलेटर के लिए, थ्रॉटलिंग का पता लगाने की सुविधा बंद की गई (b/132880807)
वर्शन 1.0.0-alpha01
7 मई, 2019
androidx.benchmark:benchmark:1.0.0-alpha01 रिलीज़ हो गया है. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.