बेंचमार्क
| नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| 11 फ़रवरी, 2026 | 1.4.1 | - | - | 1.5.0-alpha03 |
डिपेंडेंसी का एलान करना
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-alpha03
11 फ़रवरी, 2026
androidx.benchmark:benchmark-*:1.5.0-alpha03 रिलीज़ हो गया है. वर्शन 1.5.0-alpha03 में ये बदलाव शामिल हैं.
- इसे UiAutomator 2.4 के बीटा वर्शन पर निर्भर रहने के लिए अपडेट किया गया है.
वर्शन 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 में, Baseline Profile 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) स्वीकार करता है
गड़बड़ियां ठीक की गईं
- सही प्लगिन का इस्तेमाल करने के लिए,
TraceProcessorस्टार्टअप इनसाइट लिंक फ़ॉर्मैट अपडेट किया गया है. साथ ही, डेलिमिटर (:,%3Aसे छोटा है और दोनों काम करते हैं) को ज़्यादा साफ़ तौर पर दिखाया गया है (Ie18ef) - प्रोसेस बंद करने के लिए हमेशा 'बंद करें' विकल्प का इस्तेमाल करें. भले ही, डिवाइस रूट किया गया हो और सिस्टम ऐप्लिकेशन बंद किए जा रहे हों. यह फ़ॉर्म के अपवादों को ठीक करता है:
Expected no stdout/stderr from killall ... No such process. (Idca2c)
बाहरी योगदान
TraceProcessorHttpServerके लिए प्रॉक्सी अपवाद हैंडलर जोड़ा गया (I480f5)
वर्शन 1.4.0-alpha11
9 अप्रैल, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha11 रिलीज़ हो गया है. वर्शन 1.4.0-alpha11 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TraceProcessorके आर्ग्युमेंट टाइमआउट में बदलाव किया गया: Java कॉलर के इस्तेमाल के लिए, timeoutMs की अवधि लंबी की गई. (I9fbb5)TraceProcessorकंस्ट्रक्टर को इंटरनल के तौर पर मार्क करें. कॉल करने वाले लोगों कोTraceProcessor.startServerयाTraceProcessor.runServerका इस्तेमाल करना चाहिए. (Ia8c5b)
गड़बड़ियां ठीक की गईं
MacrobenchmarkScope.killProcessकी मदद से ऐप्लिकेशन को बंद करते समय, बंद करने की कमांड के नतीजों की पुष्टि करें. इससे, साइलेंट फ़ेलियर और टाइमआउट की गड़बड़ी को रोका जा सकता है. (I84555)
डिपेंडेंसी से जुड़े अपडेट
- यह लाइब्रेरी अब Kotlin 2.0 के भाषा लेवल को टारगेट करती है. इसके लिए, KGP 2.0.0 या इसके बाद का वर्शन ज़रूरी है. (Idb6b5)
वर्शन 1.4.0-alpha10
26 मार्च, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha10 रिलीज़ हो गया है. वर्शन 1.4.0-alpha10 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
TraceProcessorसर्वर लोड और क्वेरी करने के लिए, डिफ़ॉल्ट टाइम आउट को 60/30 सेकंड से बढ़ाकर 120 सेकंड कर दिया गया है. साथ ही, दोनों को एक टाइम आउट पैरामीटर के साथ कॉन्फ़िगर किया जा सकता है. (Ifec87)
गड़बड़ियां ठीक की गईं
- कुछ ऐसी समस्याओं को ठीक किया गया है जो
profileinstallerके बिना किसी ऐप्लिकेशन की परफ़ॉर्मेंस की तुलना करने या उसकी प्रोफ़ाइल कैप्चर करने पर होती थीं. साथ ही, इसमेंBroadcastRecieverको शामिल किया गया है. इसका असर सिर्फ़ रूट किए गए डिवाइसों पर होता है. (Ied308)
वर्शन 1.4.0-alpha09
12 मार्च, 2025
androidx.benchmark:benchmark-*:1.4.0-alpha09 रिलीज़ हो गया है. वर्शन 1.4.0-alpha09 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- कस्टम लाइफ़साइकल के साथ आसानी से इस्तेमाल करने के लिए, बंद किए जा सकने वाले हैंडल के साथ
TraceProcessorऔर सेशन एपीआई जोड़े गए. यह कोरूटीन और Java API का इस्तेमाल आसान बनाने की दिशा में भी एक कदम है.TraceProcessor.runServer {}के लिए काम करने वाले एक्सटेंशन को अब एक्सपेरिमेंटल के तौर पर मार्क किया गया है. ऐसा इसलिए, क्योंकि आने वाले समय में इन्हें एक्सपेरिमेंटल से हटाकर सामान्य एक्सटेंशन के तौर पर उपलब्ध कराया जा सकता है. (I358b4)
गड़बड़ियां ठीक की गईं
pgreptoybox में हुए बदलाव की वजह से, एपीआई 36 के साथ फ़िक्स्ड बेंचमार्क और बेसलाइन प्रोफ़ाइल कैप्चर काम नहीं कर रहा है. अब पूरी कमांड लाइन प्रिंट करने के लिए,-aकी ज़रूरत होती है. (Idc991)- डिफ़ॉल्ट ट्रेसिंग कॉन्फ़िगरेशन को फ़िल्टर करें, ताकि नए एपीआई लेवल पर ट्रेस में डेटा के नुकसान का जोखिम कम हो सके. (I54e8a)
- एक्सपेरिमेंट के तौर पर
androidx.benchmark.killExistingPerfettoRecordingsइंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ा गया है. इसेfalseपर सेट किया जा सकता है, ताकि पहले से मौजूद Perfect Trace Capture को जारी रखा जा सके. डिफ़ॉल्ट रूप से, डिवाइस पर पहले से मौजूद 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)
गड़बड़ियां ठीक की गईं
- प्रोफ़ाइलिंग के दौरान कॉल किए गए माइक्रोबेंचमार्क के इंटरनल फ़ंक्शन की संख्या कम की गई है, ताकि उदाहरण के लिए, मेथड ट्रेस ज़्यादा साफ़ तौर पर दिखें (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_ error दिखता था. (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 में ये बदलाव शामिल हैं.
नई सुविधा - ऐप्लिकेशन के शुरू होने में लगने वाले समय के बारे में अहम जानकारी
- ऐप्लिकेशन स्टार्टअप की अहम जानकारी के शुरुआती वर्शन को Macrobenchmark में चालू किया जा सकता है. (09fae38)
स्टार्टअप के मानदंड में इसे चालू करने के लिए:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
इसके बाद, स्टार्टअप बेंचमार्क चलाने पर, ट्रेस का विश्लेषण किया जाएगा, ताकि सामान्य समस्याओं का पता लगाया जा सके.साथ ही, उन्हें मेट्रिक के बाद, बेंचमार्क टैब में Studio टेस्ट आउटपुट में प्रिंट किया जा सके. उदाहरण के लिए:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
फ़िलहाल, इस सुविधा पर काम चल रहा है. आने वाले समय में, दस्तावेज़ों को बेहतर बनाया जाएगा और इसे ज़्यादा से ज़्यादा लोगों के लिए उपलब्ध कराया जाएगा. हालांकि, इस दौरान आपके सुझाव/राय या शिकायत का स्वागत है.
नई सुविधाएं
- सभी बेसलाइन प्रोफ़ाइल चेतावनियों को बंद करने के लिए, gradle प्रॉपर्टी
androidx.baselineprofile.suppressWarningsजोड़ी गई. (314153a) - माइक्रोबेंच मेट्रिक अब Perfetto ट्रेस में काउंटर के तौर पर दिखती हैं. (3214854)
- एक्सपेरिमेंट के तौर पर उपलब्ध स्क्रिप्ट जोड़ी गई हैं. इनका इस्तेमाल, JIT को बंद करने (इसके लिए रूट / रनटाइम रीस्टार्ट करना ज़रूरी है) और डिवाइस की परफ़ॉर्मेंस/टेस्ट की स्थिति को रीसेट करने के लिए किया जा सकता है. फ़िलहाल, इन्हें Gradle टास्क के तौर पर पब्लिश नहीं किया गया है. (7c3732b)
- एम्युलेटर पर टेस्ट चलाने के दौरान, टेस्ट स्किप करने के लिए बेंचमार्क आर्ग्युमेंट जोड़ा गया है.
automaticGenerationDuringबिल्ड चालू होने पर, बेंचमार्क भी बेसलाइन प्रोफ़ाइल जनरेट करने की प्रोसेस को ट्रिगर करेंगे. अगर इम्यूलेटर का इस्तेमाल किया जाता है, तो यह काम नहीं करेगा. नए आर्ग्युमेंटskipBenchmarksOnEmulatorकी मदद से, हम टेस्ट को स्किप कर सकते हैं. (0c2ddcd) - एपीआई 23 या उसके बाद के वर्शन पर परफ़ॉर्मेंस इवेंट चालू करने की सुविधा काम करेगी (2550048)
एपीआई में हुए बदलाव
- मौजूदा एक्सपेरिमेंटल
PerfettoConfigआर्ग्युमेंट कोMacrobenchmarkRule.measureRepeated()से नएExperimentalConfigऑब्जेक्ट में ले जाया गया.
गड़बड़ियां ठीक की गईं
- बार-बार कोशिश करने की संख्या बढ़ाएं
lockClocks.sh(99e9dac) - अगर
nonMinifiedऔर बेंचमार्क बिल्ड टाइप पहले से मौजूद हैं, तो उन्हें न बनाएं. बग की वजह से,nonMinifiedऔर बेंचमार्क बिल्ड टाइप मौजूद होने पर भी, उन्हें फिर से बनाया जा रहा था. (e75f0a5) TraceSectionMetricनतीजों में से, ऐसे स्लाइस को अनदेखा करें जो खत्म नहीं होते हैं. (a927d20)- एम्युलेटर की बेहतर जांच, ताकि
sdk_प्रीफ़िक्स को ध्यान में रखा जा सके. (1587de8) FrameTimingGfxInfoMetricमें, उन पैकेज को 'क्लियर' के तौर पर मार्क करें जो नहीं चल रहे हैं. (35cc79c)androidx.benchmark.cpuEventCounterसे, निर्देश वाले इवेंट के अलावा अन्य इवेंट के लिए गलत वैल्यू जनरेट होने की समस्या ठीक की गई. (06edd59)- मेट्रिक की प्राथमिकता के क्रम का पालन करने के लिए,
resumeTiming/runWithTimingDisabledको ठीक किया गया है. साथ ही, कम प्राथमिकता वाली मेट्रिक को रोकने/फिर से शुरू करने का असर, ज़्यादा प्राथमिकता वाली मेट्रिक के नतीजों पर काफ़ी कम हो गया है. उदाहरण के लिए, अगरcpuEventCounter.enableइंस्ट्रुमेंटेशन आर्ग्युमेंट के ज़रिए सीपीयू परफ़ॉर्मेंस काउंटर का इस्तेमाल किया जा रहा है, तो pause/resume होने पर timeNs में अब ज़्यादा कमी नहीं आएगी. (5de0968)
वर्शन 1.3
वर्शन 1.3.4
26 मार्च, 2025
androidx.benchmark:benchmark-*:1.3.4 रिलीज़ हो गया है. वर्शन 1.3.4 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Benchmark Baseline Gradle Plugin में, 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) - माइक्रोबेंचमार्क को छोटा करना - बेंचमार्क लाइब्रेरी के ProGuard में
org.junit.runner.notification.RunListenerकी सबक्लास को बनाए रखें (Ic8ed5, b/354264743) TraceSectionMetricको ठीक किया गया है, ताकि खत्म न होने वाले स्लाइस को अनदेखा किया जा सके. पहले, इन्हें -1 अवधि का माना जाता था. जैसे, जोड़ते समय या कम से कम अवधि ढूंढते समय. (If74b7)FrameTimingGfxInfoMetricमें उस समस्या को ठीक किया गया है जिसकी वजह से, प्रोसेस पहले से नहीं चल रही होने पर मेट्रिक शुरू करने पर क्रैश हो जाती थी. (I6e412)
वर्शन 1.3.0
21 अगस्त, 2024
androidx.benchmark:benchmark-*:1.3.0 रिलीज़ हो गया है. वर्शन 1.3.0 में ये बदलाव शामिल हैं.
1.2.0 के बाद से माइक्रोबेंचमार्क में हुए बदलाव
- ज़्यादातर डिवाइसों पर माइक्रोबेंचमार्क चलाने पर, मेथड ट्रेसिंग की सुविधा डिफ़ॉल्ट रूप से चालू रहती है
- मेज़रमेंट के बाद, मेथड ट्रेसिंग एक अलग फ़ेज़ के तौर पर चलती है. इससे सटीक मेज़रमेंट और मेथड ट्रेस, दोनों को एक ही बेंचमार्क रन से आउटपुट किया जा सकता है
- Android OS और एआरटी के कुछ वर्शन पर, मेथड ट्रेसिंग की सुविधा उपलब्ध नहीं है. इसलिए, मेज़रमेंट के बाद के चरणों पर इसका असर पड़ेगा. इन वर्शन पर, मेथड ट्रेसिंग की सुविधा डिफ़ॉल्ट रूप से बंद होती है. साथ ही, Studio के आउटपुट में एक चेतावनी दिखती है
- मुख्य थ्रेड के बेंचमार्क और एएनआर
- यूज़र इंटरफ़ेस (यूआई) थ्रेड के बेंचमार्क (जैसे, Compose/View यूज़र इंटरफ़ेस (यूआई) के साथ इंटरैक्ट करने वाले) के लिए
measureRepeatedOnMainThreadजोड़ा गया है, ताकि कई सेकंड तक चलने पर एएनआर से बचा जा सके. - अगर एएनआर से बचने की समयसीमा खत्म होने की आशंका होती है, तो तरीके के ट्रेस छोड़ दिए जाते हैं. इस व्यवहार को बंद करने के लिए,
androidx.benchmark.profiling.skipWhenDurationRisksAnrको false पर सेट करें. हालांकि, सीआई रन के लिए ऐसा करने का सुझाव नहीं दिया जाता है, क्योंकि एएनआर की वजह से लंबे सीआई रन में समस्या आ सकती है.
- यूज़र इंटरफ़ेस (यूआई) थ्रेड के बेंचमार्क (जैसे, Compose/View यूज़र इंटरफ़ेस (यूआई) के साथ इंटरैक्ट करने वाले) के लिए
- काट-छांट करना
- Proguard के नियमों को एम्बेड किया गया है, ताकि कोड छोटा करने की सुविधा चालू होने पर माइक्रोबेंचमार्किंग को बेहतर बनाया जा सके
- किसी लाइब्रेरी मॉड्यूल में कोड छोटा करने/R8 के लिए AGP 8.3 की ज़रूरत होती है. इसे
android.buildTypes.release.androidTest.enableMinificationमें जाकर,build.gradleके ज़रिए चालू किया जा सकता है - डेड कोड हटाने से रोकने के लिए, एक्सपेरिमेंटल
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इटरेशन के दौरान एआरटी प्रोफ़ाइल को सही तरीके से डंप किया जाता है, ताकि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 / exception लेबल जोड़े गए. इससे मौजूदा व्यवहार में कोई बदलाव नहीं होता. इसलिए, कुछ गड़बड़ियां दिखती हैं और अन्य गड़बड़ियों का पता नहीं चलता. हालांकि, इससे गड़बड़ियों को समझना आसान हो जाता है. आम तौर पर, स्टार्टअप मेट्रिक की रिपोर्ट न करने वाले
Log.w()वे होते हैं जिनमें नॉन-फ़्रेम इवेंट मौजूद नहीं होते. स्टार्टअप का पता चलने पर अपवाद थ्रो किए जाते हैं. हालांकि, यूआई/आरटी स्लाइस से फ़्रेम टाइमिंग की जानकारी को छोड़कर. (Id240f, b/329145809) FrameTimingMetricमेंframeCountमेज़रमेंट जोड़ा गया है. इससे उन स्थितियों का पता लगाने में मदद मिलेगी जहां फ़्रेम की संख्या में बदलाव होने की वजह से मेज़रमेंट में बदलाव होता है. जैसे, नए ऐनिमेशन जोड़े गए हैं या अमान्य होने की समस्याएं ठीक की गई हैं. (I1e5aa)- यह साफ़ तौर पर बताया गया है कि दस्तावेज़ों में उपलब्ध होने पर,
frameOverrunMsको ट्रैकिंग के लिए पसंदीदा मेट्रिक के तौर पर इस्तेमाल किया जाता है. साथ ही, यह भी बताया गया है कि ऐसा क्यों किया जाता है. (I18749, b/329478323) - इस समस्या को ठीक किया गया है. इसमें ट्रेस की शुरुआत और आखिर में मौजूद ऐसे फ़्रेम को एक साथ जोड़ा जा सकता था जो खत्म नहीं हुए हैं. इससे, एक ही फ़्रेम को बहुत लंबा फ़्रेम बताया जाता था. (I39353, b/322232828)
- फ़्रेम जनरेट न होने पर,
FrameTimingMetricगड़बड़ी को बेहतर बनाया गया है. साथ ही, मेट्रिक पार्स करने में गड़बड़ी होने पर, समस्या का पता लगाने में मदद करने के लिए, हमेशा ट्रेस का लिंक आउटपुट किया जाता है. (I956b9) FrameTimingMetricमें क्रैश होने की समस्या को ठीक किया गया है. यह समस्या, फ़्रेम आईडी को पार्स करने के दौरान होती थी. खास तौर पर, यह समस्या कुछ OEM डिवाइसों पर होती थी. (Ia24bc, b/303823815, b/306235276)FrameMetricsमें जांच के नियमों को आसान बनाया गया है. साथ ही, गड़बड़ी के मैसेज में ज़्यादा जानकारी जोड़ी गई है. (Iadede)
- पावर -
बेसलाइन प्रोफ़ाइल कैप्चर करने की सुविधा / Gradle प्लगिन में 1.2.0 के बाद से हुए बदलाव
- AGP के सुझाए गए ज़्यादा से ज़्यादा वर्शन को बढ़ाकर 9.0.0-alpha01 कर दिया गया है.
- यह पक्का करें कि
mergeArtProfileऔरmergeStartupProfileटास्क, हमेशा बेसलाइन प्रोफ़ाइल जनरेट होने का इंतज़ार करें. (I623d6, b/343086054) - बेसलाइन प्रोफ़ाइल जनरेट करने पर, आपको बदलावों की खास जानकारी दिखेगी (I824c8, b/269484510)
- चेतावनी बंद करने के लिए डीएसएल जोड़ा गया (Ic4deb, b/331237001)
- यह समस्या ठीक करें, ताकि यह पक्का किया जा सके कि
automaticGenerationDuringBuildबंद होने पर, बेंचमार्क जनरेट की गई बेसलाइन प्रोफ़ाइलों का इस्तेमाल करें (Ic144f, b/333024280) nonMinifiedया बेंचमार्क बिल्ड टाइप को पसंद के मुताबिक बनाने पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू करने के लिए,BaselineProfileGradle प्लगिन प्रॉपर्टी ओवरराइड करने की समस्या ठीक की गई. (Ib8f05, b/324837887)- AGP 8.3.0-alpha15 से पहले के वर्शन में, AAR में लाइब्रेरी की बेसलाइन प्रोफ़ाइलें शामिल करने से जुड़ी समस्या को ठीक किया गया है. (I1d2af, b/313992099)
- जनरेशन टास्क के आखिर में, फ़िक्स्ड बेसलाइन और स्टार्टअप प्रोफ़ाइल का आउटपुट यूआरएल. (I802e5, b/313976958)
1.2.0 के बाद हुए अन्य अहम बदलाव
- ट्रेस कैप्चर करना
- गड़बड़ी से लॉग की गई चेतावनी तक, Perfetto को शुरू करते समय EXITCODE 2 की गड़बड़ी कम हुई
- बेंचमार्क में डिफ़ॉल्ट रूप से एआईडीएल ट्रेसिंग चालू करें(इसके लिए एपीआई 28 की ज़रूरत होती है) (Ia0af2, b/341852305)
- मानदंडों में, डिफ़ॉल्ट रूप से पोर्टर टैग ट्रेसिंग चालू करें. यह वेकलॉक ट्रेसपॉइंट कैप्चर करता है. उदाहरण के लिए, वेकलॉक ट्रेसपॉइंट. (Icfe44, b/286551983)
- कमज़ोर डिवाइसों पर ट्रेसिंग शुरू करते समय क्रैश से बचने के लिए, ट्रेस कैप्चर शुरू होने का टाइम आउट बढ़ाया गया (I98841, b/329145808)
- सार्वजनिक एपीआई
PerfettoTraceProcessor.Session.queryMetricsको JSON, textproto, और proto बाइनरी (डिकोड नहीं किया गया) वैरिएंट के साथ जोड़ा गया. इनकी मदद से,TraceProcessor(I54d7f, b/304038382) में शामिल मेट्रिक के बारे में क्वेरी की जा सकती है - Perfetto ट्रेस रिकॉर्ड पर ब्लॉकिंग शुरू करने की सुविधा चालू करें, ताकि ट्रेस की शुरुआत में डेटा छूटने का जोखिम कम हो सके. यह सुविधा सिर्फ़ एपीआई 33 या इसके बाद के वर्शन पर काम करती है. (Ie6e41, b/310760059)
- JSON आउटपुट
- JSON आउटपुट में, बेंचमार्क के कॉन्टेक्स्ट में अतिरिक्त जानकारी जोड़ी गई है:
context.artMainlineVersion- आर्ट मेनलाइन मॉड्यूल का पूर्णांक वर्शन (अगर डिवाइस पर मौजूद है, तो-1नहीं तो)context.build.id- Equals android.os.Build.IDcontext.build.version.codename- Equals android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename- यह प्री-रिलीज़ कोडनेम के पहले अक्षर से मेल खाता है. इसमें रिलीज़ बिल्ड भी शामिल हैं (Ie5020)
- प्रोफ़ाइलिंग ट्रेस (जैसे, Perfetto, मेथड ट्रेस) के लिए टूलिंग को आसान बनाने के लिए, JSON आउटपुट में
profilerOutputसूची जोड़ी गई (I05ddd, b/332604449) - बेंचमार्क मॉड्यूल में Android Test Orchestrator का इस्तेमाल करने पर चेतावनी जोड़ी गई है. ऐसा इसलिए, क्योंकि इससे हर मॉड्यूल के आउटपुट की JSON फ़ाइलें बार-बार ओवरराइट हो जाएंगी. (Ia1af6, b/286899049)
- फ़ाइलें लिखते समय या पोस्ट-प्रोसेसिंग के दौरान क्रैश होने की समस्या से बचने के लिए, फ़ाइल के नाम 200 वर्णों से ज़्यादा होने पर गड़बड़ी का मैसेज दिखाएं. (I4a5ab)
- JSON आउटपुट में, बेंचमार्क के कॉन्टेक्स्ट में अतिरिक्त जानकारी जोड़ी गई है:
वर्शन 1.3.0-rc01
7 अगस्त, 2024
androidx.benchmark:benchmark-*:1.3.0-rc01 रिलीज़ हो गया है. वर्शन 1.3.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
androidx.benchmark.cpuEventCounterसे, निर्देश वाले इवेंट के अलावा अन्य इवेंट के लिए गलत वैल्यू जनरेट होने की समस्या ठीक की गई (I7386a, b/286306579)- मेट्रिक की प्राथमिकता के क्रम का पालन करने के लिए,
resumeTiming/runWithTimingDisabledको ठीक किया गया है. साथ ही, कम प्राथमिकता वाली मेट्रिक को रोकने/फिर से शुरू करने से, ज़्यादा प्राथमिकता वाली मेट्रिक के नतीजों पर पड़ने वाले असर को काफ़ी हद तक कम किया गया है. उदाहरण के लिए, अगरcpuEventCounter.enableइंस्ट्रुमेंटेशन आर्ग्युमेंट के ज़रिए सीपीयू परफ़ॉर्मेंस काउंटर का इस्तेमाल किया जा रहा है, तो pause/resume होने पर timeNs में अब ज़्यादा कमी नहीं आएगी. (I39c2e, b/286306579, b/307445225) - स्टैक सैंपलिंग को मुख्य थ्रेड से हटाने पर, स्टैक सैंपलिंग की वजह से मुख्य थ्रेड के हार्ड टाइमआउट होने की संभावना कम हो जाती है.
measureRepeatedOnMainThread(I487a8, b/342237318) - नए प्लैटफ़ॉर्म एपीआई को ऐक्सेस करने के लिए, मैन्युअल तरीके से आउटलाइन बनाने की सुविधा हटा दी गई है. ऐसा इसलिए, क्योंकि AGP 7.3 या इसके बाद के वर्शन (जैसे, R8 वर्शन 3.3) के साथ R8 का इस्तेमाल करने पर, एपीआई मॉडलिंग के ज़रिए यह काम अपने-आप हो जाता है. साथ ही, AGP 8.1 या इसके बाद के वर्शन (जैसे, D8 वर्शन 8.1) का इस्तेमाल करने पर, सभी बिल्ड के लिए यह काम अपने-आप हो जाता है. AGP का इस्तेमाल न करने वाले क्लाइंट को D8 के 8.1 या उसके बाद के वर्शन पर अपडेट करने का सुझाव दिया जाता है. ज़्यादा जानकारी के लिए यह लेख देखें. (I9496c, b/345472586)
- पैकेज का नाम इंस्ट्रूमेंटेशन आर्ग्युमेंट के तौर पर भेजने के लिए, agp वर्शन की जांच करने की सुविधा जोड़ी गई. AGP 8.4.0 से पहले, टारगेट ऐप्लिकेशन के पैकेज का नाम, इंस्ट्रुमेंटेशन ऐप्लिकेशन को इंस्ट्रुमेंटेशन आर्ग्युमेंट के ज़रिए नहीं भेजा जा सकता. (0c72a3f)
वर्शन 1.3.0-beta02
10 जुलाई, 2024
androidx.benchmark:benchmark-*:1.3.0-beta02 रिलीज़ हो गया है. वर्शन 1.3.0-beta02 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- चेतावनी लॉग करने के लिए, Perfetto शुरू करते समय EXITCODE
2को ठीक से हैंडल करें, लेकिन आगे बढ़ें.
वर्शन 1.3.0-beta01
12 जून, 2024
androidx.benchmark:benchmark-*:1.3.0-beta01 रिलीज़ हो गया है. वर्शन 1.3.0-beta01 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- एक जैसा नाम रखने के लिए,
MethodTracing.affectsMeasurementOnThisDeviceका नाम बदलकरAFFECTS_MEASUREMENT_ON_THIS_DEVICEकर दिया गया है. (I1bdfa) - हमने एक्सपेरिमेंट के तौर पर
BlackHole.consume()एपीआई जोड़ा है, ताकि माइक्रोबेंचमार्क में डेड कोड को हटाने से रोका जा सके. (If6812, b/286091643) - अब माइक्रोबेंचमार्क, सही तरीके से थ्रो करेगा, ताकि मेथड ट्रेसिंग, मेज़रमेंट में रुकावट न डाले. यह समस्या कुछ डिवाइसों पर तब होती है, जब इंस्ट्रूमेंटेशन आर्ग्युमेंट या
MicrobenchmarkConfigके ज़रिए, मेथड ट्रेसिंग को चालू किया जाता है. साथ ही, अगर मेथड ट्रेस के बाद मेज़रमेंट करने की कोशिश की जाती है. जिन डिवाइसों पर इस गड़बड़ी का असर पड़ा है उनमें API 26 से 30 या एआरटी के कुछ ऐसे मेनलाइन मॉड्यूल वर्शन चल रहे हैं जिन पर इस गड़बड़ी का असर पड़ा है. इन डिवाइसों का पता रनटाइम के दौरानProfilerConfig.MethodTracing.affectsMeasurementOnThisDeviceकी मदद से लगाया जा सकता है. (Iafb92, b/303660864)
गड़बड़ियां ठीक की गईं
- AGP के ज़्यादा से ज़्यादा वर्शन को 9.0.0-alpha01 पर ले जाने का सुझाव दिया गया है. (I5bbb0)
- बेंचमार्क कॉन्टेक्स्ट में कंपाइलेशन मोड जोड़ा गया (If5612, b/325512900)
- डिफ़ॉल्ट रूप से एआईडीएल ट्रेसिंग चालू करें (इसके लिए एपीआई 28 की ज़रूरत होती है) (Ia0af2, b/341852305)
- JSON आउटपुट में, बेंचमार्क के कॉन्टेक्स्ट में अतिरिक्त जानकारी जोड़ी गई है:
context.artMainlineVersion- आर्ट मेनलाइन मॉड्यूल का पूर्णांक वर्शन (अगर डिवाइस पर मौजूद है, तो -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)
- इससे, Macrobenchmark के लिए, मेथड ट्रेस कैप्चर करना आसान हो जाता है. इसकी मदद से,
measureBlock()की अवधि के लिए स्कोप किया जाता है. पहले, यह सुविधा टारगेट प्रोसेस लॉन्च होने पर शुरू होती थी. साथ ही, यह सिर्फ़ कोल्ड स्टार्ट (Iee85a, b/300651094) के साथ काम करती थी - परफ़ेक्टो ट्रेस प्रोसेसर के धीरे-धीरे शुरू होने पर क्रैश होने की समस्या ठीक की गई (I98841, b/329145808)
वर्शन 1.3.0-alpha03
17 अप्रैल, 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03 रिलीज़ हो गया है. वर्शन 1.3.0-alpha03 में ये बदलाव शामिल हैं.
नई सुविधाएं
- इसमें JSON, textproto, और proto बाइनरी (डिकोड नहीं किया गया) वैरिएंट वाले सार्वजनिक एपीआई
PerfettoTraceProcessor.Session.queryMetricsएपीआई जोड़े गए हैं. इनकी मदद से, TraceProcessor में शामिल मेट्रिक (I54d7f, b/304038382) के बारे में क्वेरी की जा सकती है - प्रोफ़ाइलिंग ट्रेस (जैसे, perfetto, मेथड ट्रेस) को आसानी से टूल करने के लिए, JSON आउटपुट में
profilerOutputजोड़ा गया. (I05ddd, b/332604449) - Perfetto कॉन्फ़िगरेशन की परफ़ॉर्मेंस की तुलना करने के लिए, पावर टैग जोड़ा गया. यह वेकलॉक ट्रेसपॉइंट कैप्चर करता है. उदाहरण के लिए, वेकलॉक ट्रेसपॉइंट. (Icfe44, b/286551983)
- inst आर्ग्युमेंट
androidx.benchmark.profiling.skipWhenDurationRisksAnrजोड़ा गया है. इसे फ़ॉल्स पर सेट किया जा सकता है, ताकि जब अनुमानित अवधि की वजह से एएनआर हो सकता है, तब तरीके के ट्रेस को स्किप न किया जा सके. सीआई रन में इससे बचने का सुझाव दिया जाता है. - एक्सपेरिमेंट के लिए inst आर्ग्युमेंट
androidx.benchmark.profiling.perfCompare.enableजोड़ा गया है. मेज़रमेंट और प्रोफ़ाइलिंग फ़ेज़ के बीच तुलना करने के लिए, इसे सही पर सेट करें. यह उदाहरण के लिए, मेथड ट्रेसिंग के ओवरहेड का आकलन करने में मददगार है. (I61fb4, b/329146942)
एपीआई में हुए बदलाव
TraceSectionMetric.Modeको सील की गई क्लास में बदल दिया गया है, ताकि आने वाले समय में इसे बढ़ाया जा सके. साथ ही, जब स्टेटमेंट (I71f7b) का इस्तेमाल किया जाता है, तब कोई गड़बड़ी न होTraceSectionMetric.Mode.Averageऔर.Countको जोड़ा गया. साथ ही, आर्ग्युमेंट को फिर से क्रम में लगाया गया, ताकि ज़्यादा इस्तेमाल होने वाला आर्ग्युमेंट (मोड) आर्ग्युमेंट की सूची में पहले हो. इससे पैरामीटर के नाम तय करने की ज़रूरत कम हो गई. (Ibf0b0, b/315830077, b/322167531)Metric.getResultका नाम बदलकरgetMeasurementsकर दिया गया, ताकि यह रिटर्न टाइप (I42595) से मैच हो सके
गड़बड़ियां ठीक की गईं
- यह पक्का करने के लिए कि
automaticGenerationDuringBuildबंद होने पर, बेंचमार्क जनरेट की गई बेसलाइन प्रोफ़ाइलों का इस्तेमाल करें, इस समस्या को ठीक किया गया है (Ic144f, b/333024280) nonMinifiedया बेंचमार्क बिल्ड टाइप को पसंद के मुताबिक बनाने पर, बेसलाइन प्रोफ़ाइल जनरेट करने और बेंचमार्किंग की सुविधा चालू करने के लिए,BaselineProfileGradle प्लगिन प्रॉपर्टी ओवरराइड करने की समस्या ठीक की गई. (Ib8f05, b/324837887)- मैक्रोबेंचमार्क में फ़्लश की गई मेथड ट्रेस को ठीक किया गया है, ताकि मेथड ट्रेस को पूरी तरह से कैप्चर किया जा सके और वे मान्य हों. ऐसा धीमे डिवाइसों पर भी किया जा सकेगा. (I6349a, b/329904950)
- Perfetto ट्रेस रिकॉर्ड पर ब्लॉकिंग शुरू करने की सुविधा चालू करें, ताकि ट्रेस की शुरुआत में डेटा छूटने का जोखिम कम हो सके. यह सुविधा सिर्फ़ एपीआई 33 या इसके बाद के वर्शन पर काम करती है. (Ie6e41, b/310760059)
- बेंचमार्क मॉड्यूल में Android Test Orchestrator का इस्तेमाल करने पर चेतावनी जोड़ी गई है. ऐसा इसलिए, क्योंकि इससे हर मॉड्यूल के आउटपुट की JSON फ़ाइलें बार-बार ओवरराइट हो जाएंगी. (Ia1af6, b/286899049)
- Studio के आउटपुट में एक जैसा फ़ॉर्मैट रखने के लिए, हज़ार के सेपरेटर के तौर पर ',' (कॉमा) का इस्तेमाल करें. साथ ही, डिवाइस की स्थान-भाषा को अनदेखा करें (I3e921, b/313496656)
TraceSectionMetricअबTrace.{begin|end}AsyncSectionका इस्तेमाल करके बनाए गए स्लाइस के साथ काम करता है. (I91b32, b/300434906)- स्टार्टअप का पता लगाने में हुई सभी गड़बड़ियों के लिए, log.w / exception लेबल जोड़े गए. इससे मौजूदा व्यवहार में कोई बदलाव नहीं होता. इसलिए, कुछ गड़बड़ियां दिखती हैं और अन्य गड़बड़ियों का पता नहीं चलता. हालांकि, इससे गड़बड़ियों को समझना आसान हो जाता है. आम तौर पर, स्टार्टअप मेट्रिक की रिपोर्ट न करने वाले
Log.w()वे होते हैं जिनमें नॉन-फ़्रेम इवेंट मौजूद नहीं होते. स्टार्टअप का पता चलने पर अपवाद थ्रो किए जाते हैं. हालांकि, यूआई/आरटी स्लाइस से फ़्रेम टाइमिंग की जानकारी को छोड़कर. (Id240f, b/329145809) - मैक्रोबेंचमार्क चलाने से पहले, बैकग्राउंड में चल रही 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- सेक्शन के नाम को मेट्रिक लेबल के तौर पर बदलने के लिए, लेबल आर्ग्युमेंट जोड़ें
- मेट्रिक का मतलब साफ़ तौर पर बताने के लिए, आउटपुट में मोड का नाम जोड़ा गया
- डिफ़ॉल्ट वैल्यू को बदलकर सम कर दिया गया है, क्योंकि इस मेट्रिक का इस्तेमाल ज़्यादातर बार-बार होने वाले इवेंट के लिए किया जाता है सीआई के इस्तेमाल में होने वाले इन बदलावों के बारे में जानें, क्योंकि इससे डेटा में रुकावट आ सकती है या पार्सिंग में गड़बड़ी हो सकती है. (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) - अब Macrobenchmark, टारगेट ऐप्लिकेशन के लिए
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 या इसके बाद का होने पर, बेसलाइन प्रोफ़ाइल 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जोड़ा गया है, ताकि रनटाइम फ़िल्टरिंग बेसलाइन प्रोफ़ाइल बनाम मैक्रोबेंचमार्क नियम टेस्ट की अनुमति दी जा सके- tracing-perfetto की मदद से ट्रेसिंग की सुविधा चालू करने के लिए,
androidx.benchmark.perfettoSdkTracing.enableआर्ग्युमेंट जोड़ा गया है. उदाहरण के लिए, कंपोज़ रीकंपोज़िशन ट्रेसिंग. ध्यान दें किStartupMode.COLDके साथ इस्तेमाल करने पर, टाइमिंग पर काफ़ी असर पड़ेगा. ऐसा इसलिए, क्योंकि ऐप्लिकेशन के स्टार्टअप के दौरान ट्रेसिंग लाइब्रेरी लोड और चालू होती है.
ज़रूरी शर्तें
- प्रोफ़ाइल कैप्चर / रीसेट करने और शेडर कैश मेमोरी मिटाने की सुविधा चालू करने के लिए, अब टारगेट ऐप्लिकेशन में
ProfileInstaller1.3.0 या इससे ऊपर का वर्शन होना ज़रूरी है.
- प्रोफ़ाइल कैप्चर / रीसेट करने और शेडर कैश मेमोरी मिटाने की सुविधा चालू करने के लिए, अब टारगेट ऐप्लिकेशन में
नए एक्सपेरिमेंटल मीट्रिक एपीआई
- एक्सपेरिमेंट के तौर पर
TraceSectionMetricजोड़ा गया है. इससे आपके ऐप्लिकेशन में मौजूदtrace("") {}ब्लॉक या TraceMetric से, समय की सामान्य जानकारी निकाली जा सकती है. साथ ही, PerfettoTraceProcessorकी पूरी क्वेरी क्षमता का फ़ायदा उठाया जा सकता है. - पावर के इस्तेमाल की जानकारी कैप्चर करने के लिए, एक्सपेरिमेंटल
PowerMetricजोड़ा गया - पेज में गड़बड़ियों की संख्या गिनने के लिए, एक्सपेरिमेंटल
MemoryCountersMetricजोड़ा गया - एक्सपेरिमेंट के लिए
PerfettoTraceProcessorएपीआई जोड़ा गया है. इसका इस्तेमाल, सिस्टम ट्रेस (जिसे Perfetto ट्रेस भी कहा जाता है) से मेट्रिक निकालने के लिए किया जाता है
- एक्सपेरिमेंट के तौर पर
समाधान
- हमने एक ऐसी समस्या को ठीक किया है जिसमें एक से ज़्यादा APK से इंस्टॉल किए गए ऐप्लिकेशन (जैसे, ऐप्लिकेशन बंडल से) से प्रोफ़ाइलें इंस्टॉल या एक्सट्रैक्ट करते समय, ऐप्लिकेशन क्रैश हो जाते थे.
FrameTimingMetricमें, ऐसे फ़्रेम को अनदेखा करने की समस्या ठीक की गई है जिनके फ़्रेम आईडी अलग-अलग हैं. आम तौर पर, यह समस्या API 31+ पर रिपल के दौरान फ़्रेम में होती है (I747d2, b/279088460)- 64 एमबी से ज़्यादा के ट्रेस पर पार्सिंग से जुड़ी गड़बड़ियों को ठीक किया गया (Ief831, b/269949822)
- डिवाइस (खास तौर पर एम्युलेटर) के ओएस इमेज को ट्रेसिंग या कंपाइलेशन के लिए सही तरीके से कॉन्फ़िगर न किए जाने पर होने वाली गड़बड़ियों के बारे में ज़्यादा जानकारी दी गई है
- बैटरी के बिना काम करने वाले डिवाइसों (माइक्रो और मैक्रो) के लिए, बैटरी लेवल की जाँच करने की सुविधा बंद करें
- फ़ाइल आउटपुट को बेहतर बनाया गया है. साथ ही, अमान्य आउटपुट डायरेक्ट्री के लिए ज़्यादा साफ़ तौर पर गड़बड़ियों की जानकारी दी गई है और डिफ़ॉल्ट सेटिंग को ज़्यादा सुरक्षित बनाया गया है
- शेडर कैश को लगातार कम करके,
StartupMode.COLDकी स्थिरता को बेहतर बनाया गया है. इसेMacrobenchmarkScope.dropShaderCacheके ज़रिए भी दिखाया गया है startActivityAndWaitके लिए, लीनबैक फ़ॉलबैक की समस्या ठीक की गई.
माइक्रोबेंचमार्क
- सुविधाएं
- प्रोफ़ाइलिंग को अन्य मेट्रिक के बाद, एक अलग फ़ेज़ में ले जाया गया है. इससे एक टेस्ट रन में, सटीक समय और प्रोफ़ाइलिंग के नतीजे, दोनों दिखाए जा सकते हैं.
- एक्सपेरिमेंट के लिए एपीआई
- कस्टम मेट्रिक तय करने के लिए, एक्सपेरिमेंट के तौर पर
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 रूट किए गए डिवाइसों पर, profileable की जांच को स्किप किया गया. (I2abac, b/291722507)
- Dex Layout Optimizations का इस्तेमाल करते समय, स्टार्टअप प्रोफ़ाइल के नियमों को अब बेसलाइन प्रोफ़ाइल के नियमों के तौर पर भी माना जाता है. (aosp/2684246, b/293889189)
वर्शन 1.2.0-beta02
26 जुलाई, 2023
androidx.benchmark:benchmark-*:1.2.0-beta02 रिलीज़ हो गया है. वर्शन 1.2.0-beta02 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- माइक्रोबेंच कस्टम मेट्रिक और कॉन्फ़िगरेशन (जैसे, प्रोफ़ाइलर और ट्रेसिंग) के लिए, एक्सपेरिमेंट के तौर पर एपीआई जोड़े गए. (I86101, b/291820856)
गड़बड़ियां ठीक की गईं
- ट्रेसिंग के लिए ओएस का कॉन्फ़िगरेशन गलत होने पर, मैक्रोबेंच में गड़बड़ी की रिपोर्ट करें. इस समस्या को हाल ही में API 26/28 ARM64 एमुलेटर में ठीक किया गया था. (I0a328, b/282191686)
- संकलन रीसेट न होने की समस्या के बारे में ज़्यादा जानकारी जोड़ी गई है, ताकि एम्युलेटर को अपडेट करने का सुझाव दिया जा सके. ऐसा इसलिए, क्योंकि हाल ही में कुछ एम्युलेटर में इस समस्या को ठीक किया गया है. (I8c815, b/282191686)
implementationडिपेंडेंसी के बजाय,androidx.test.uiautomator:uiautomator:2.2.0कोapiडिपेंडेंसी के तौर पर सेट करें. (I1981e)
वर्शन 1.2.0-beta01
18 जुलाई, 2023
androidx.benchmark:benchmark-*:1.2.0-beta01 रिलीज़ हो गया है. वर्शन 1.2.0-beta01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Studio में बेंचमार्क आउटपुट में कभी-कभी चेतावनियां नहीं दिखती हैं. इस समस्या को ठीक किया गया है. साथ ही, Studio में बेंचमार्क आउटपुट में मौजूद शुरुआती खाली जगहों से जुड़ी समस्या को ठीक किया गया है (Ia61d0, b/227205461, b/286306579, b/285912360)
FrameTimingMetricके लिए टिप्पणी पिन की गई. सबमेट्रिक का नामframeDurationCpuMsहै. (Ib097f, b/288830934).
वर्शन 1.2.0-alpha16
21 जून, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha16 रिलीज़ हो गया है. वर्शन 1.2.0-alpha16 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
BaselineProfileRule.collectBaselineProfile()API का नाम बदलकरBaselineProfileRule.collect()कर दिया गया है. (I4b665)
गड़बड़ियां ठीक की गईं
androidx.benchmark.profiling.mode = MethodTracingके लिए 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)
एपीआई में हुए बदलाव
collectBaselineProfileएपीआई हमेशा स्टेबल बेसलाइन प्रोफ़ाइलें जनरेट करता है.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 प्लगिन, ऐल्फ़ा वर्शन में रिलीज़ किया गया है. इससे बेसलाइन प्रोफ़ाइल जनरेट करना आसान हो जाता है. साथ ही, डेवलपर के वर्कफ़्लो को भी आसान बनाया जा सकता है.
एपीआई में हुए बदलाव
- API 21 और 22 पर, Perfetto ट्रेसिंग की सुविधा हटा दी गई है. इसमें माइक्रोबेंचमार्क और एक्सपेरिमेंट के तौर पर उपलब्ध
PerfettoTraceएपीआई, दोनों शामिल हैं. इस वर्शन से पहले, कुछ डिवाइसों परUiAutomationकनेक्शन ठीक से काम नहीं करते थे. (I78e8c) PerfettoTraceProcessorके लिए, सार्वजनिक तौर पर उपलब्ध एक्सपेरिमेंटल एपीआई जोड़ा गया है, ताकि ट्रेस कॉन्टेंट को पार्स किया जा सके. यह Perfetto ट्रेस डेटा के आधार पर, पूरी तरह से कस्टम मेट्रिक बनाने की दिशा में एक कदम है. (I2659e, b/219851406)
वर्शन 1.2.0-alpha11
8 मार्च, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha11 रिलीज़ हो गया है. वर्शन 1.2.0-alpha11 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक से ज़्यादा APK वाले ऐप्लिकेशन बंडल से प्रोफ़ाइलें फिर से इंस्टॉल करने या निकालने के दौरान,
MacrobenchmarkRuleऔरBaselineProfileRuleमें क्रैश होने की समस्या ठीक की गई. (I0d8c8, b/270587281)
वर्शन 1.2.0-alpha10
22 फ़रवरी, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha10 रिलीज़ हो गया है. वर्शन 1.2.0-alpha10 में ये बदलाव शामिल हैं.
नई सुविधाएं
- Android 14 और इसके बाद के वर्शन पर, Macrobenchmark अब टारगेट ऐप्लिकेशन को फिर से इंस्टॉल नहीं करता, ताकि कंपाइलेशन की स्थिति को रीसेट किया जा सके. ऐसा नई प्लैटफ़ॉर्म सुविधा की वजह से होता है. पहले, रूट किए गए डिवाइस का होना ज़रूरी था. इसके अलावा, हर बेंचमार्क के चलने से पहले, ऐप्लिकेशन की सभी स्थितियों (जैसे, उपयोगकर्ता का लॉगिन) को हटाना पड़ता था. (I9b08c, b/249143766)
गड़बड़ियां ठीक की गईं
- कंपाइलेशन स्किप करने की वजह से, खाली प्रोफ़ाइल के साथ क्रैश होने वाली
DryRunModeकी समस्या ठीक की गई. इसके बजाय, यह एक ही बार चलता है और प्रोफ़ाइल को एक्सट्रैक्ट करता है, ताकि यह पक्का किया जा सके कि कुछ डेटा कैप्चर किया गया है. (I2f05d, b/266403227) - पुराने एपीआई लेवल पर powerstats की मौजूदगी की जांच करते समय,
PowerMetricक्रैश होने की समस्या ठीक की गई. (5faaf9, b/268253898)
वर्शन 1.2.0-alpha09
11 जनवरी, 2023
androidx.benchmark:benchmark-*:1.2.0-alpha09 रिलीज़ हो गया है. वर्शन 1.2.0-alpha09 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- सभी बेंचमार्क / बेसलाइन प्रोफ़ाइल जनरेशन को बंद करने के लिए,
androidx.benchmark.enabledRulesइंस्ट्रुमेंटेशन आर्ग्युमेंट मेंNoneको पास करने की सुविधा चालू की गई. (I3d7fd, b/258671856) - ऐप्लिकेशन मॉड्यूल (जैसे, खुद से इंस्ट्रुमेंट न करने वाले टेस्ट APK) में
PerfettoTraceकैप्चर करने की समस्या ठीक की गई (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)
ऐसी समस्याएं जिनकी जानकारी पहले से है
- profileinstaller मेनिफ़ेस्ट में ब्रॉडकास्ट रजिस्ट्री मौजूद न होने की वजह से, MacrobenchmarkScope.dropShaderCache() क्रैश हो सकता है. यह समस्या अब तक ठीक नहीं की गई है. (I5c728, b/258619948) profileinstaller:1.3.0-alpha02 में इस समस्या को हल करने के लिए, अपने ऐप्लिकेशन के AndroidManifest.xml में यह कोड जोड़ें. यह कोड, आपके बेंचमार्क के AndroidManifest.xml में नहीं जोड़ा जाना चाहिए:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
वर्शन 1.2.0-alpha07
9 नवंबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07 रिलीज़ हो गया है. वर्शन 1.2.0-alpha07 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- 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 system trace viewer में, कैप्चर किए गए बेंचमार्क ट्रेस के लिए फ़्रेम ब्रेकडाउन की समस्या ठीक की गई (I3f3ae, b/239677443)
FrameTimingMetricको ठीक किया गया है, ताकिFrameOverrunको एपीआई 29 के बजाय 31 की ज़रूरत हो (I716dd, b/220702554)BaselineProfileRuleमें इटरेशन सेट करें. साथ ही, अगर टारगेट पैकेज इंस्टॉल नहीं है, तो साफ़ तौर पर इसकी जानकारी दें. यह काम MacrobenchmarkRule के लिए पहले ही किया जा चुका है. (Ic09a3, b/227991471)
वर्शन 1.2.0-alpha04
21 सितंबर, 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04 रिलीज़ हो गया है. वर्शन 1.2.0-alpha04 में ये बदलाव शामिल हैं.
नई सुविधाएं
स्थानीय डेवलपमेंट को तेज़ी से पूरा करने और ऐप्लिकेशन के ऑटोमेशन की पुष्टि करने के लिए, मैक्रोबेंचमार्क में
dryRunMode.enableइंस्ट्रूमेंटेशन आर्ग्युमेंट के लिए सहायता जोड़ें.यह सुविधा, माइक्रोबेंचमार्क में पहले से उपलब्ध है. उदाहरण के लिए, प्रीसबमिट में. इससे, इटरेशन की संख्या 1 पर सेट हो जाती है. साथ ही, कंपाइलेशन को स्किप कर दिया जाता है, सभी कॉन्फ़िगरेशन से जुड़ी गड़बड़ियों को छिपा दिया जाता है, और मेज़रमेंट .json फ़ाइल का आउटपुट बंद कर दिया जाता है. (Ib51b4, b/175149857)Gradle कमांड लाइन पर:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=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दिखता था. अब यूओई सिर्फ़ तब होता है, जब मेट्रिक का इस्तेमाल ऐसे डिवाइस पर किया जाता है जिस पर यह काम नहीं करती (जैसे:PowerMetric.configure). (I5cf20, b/227229375) - मैक्रोबेंचमार्क में, हर सिस्टम कैटगरी में कुल पावर और एनर्जी को मेज़र करने के लिए,
TotalPowerMetricऔरTotalEnergyMetricको जोड़ा गया है. (I3b26b, b/224557371)
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें अनरूट किए गए बिल्ड पर, हर मैक्रोबेंचमार्क के बीच कंपाइल किए गए तरीकों को सही तरीके से रीसेट नहीं किया जा रहा था. माफ़ करें, लेकिन इसके लिए हर बार APK को फिर से इंस्टॉल करना पड़ता है. इससे हर मैक्रोबेंचमार्क के लिए ऐप्लिकेशन का डेटा मिट जाएगा. (I31c74, b/230665435)
- एपीआई 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 और बेसलाइन प्रोफ़ाइल जनरेट करने वाले टेस्ट के बीच मॉड्यूल शेयर करने की सुविधा जोड़ी गई है. सिर्फ़ एक तरह की जांच चलाने के लिए, '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()का इस्तेमाल करने पर, Macrobenchmarks के लिए स्टार्टअप मेट्रिक ठीक की गईं. इस बदलाव से पहले,CompilationMode.Partial()की तुलना मेंCompilation.None()की स्पीड कम दिखती थी. (611ac9).
वर्शन 1.1.0-beta05
23 मार्च, 2022
androidx.benchmark:benchmark-*:1.1.0-beta05 रिलीज़ हो गया है. वर्शन 1.1.0-beta05 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
CompilationMode.Noneका इस्तेमाल करते समय, प्रोफ़ाइल इंस्टॉल करने की प्रोसेस को स्किप करने के बाद पैकेज बंद करें. (aosp/1991373)- उस समस्या को ठीक किया गया है जिसकी वजह से
StartupMode.COLDका इस्तेमाल करते समय, Macrobenchmarks स्टार्टअप मेट्रिक इकट्ठा नहीं कर पाता था. (aosp/2012227 b/218668335)
वर्शन 1.1.0-beta04
23 फ़रवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta04 रिलीज़ हो गया है. वर्शन 1.1.0-beta04 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
Android 10 पर मेट्रिक के मौजूद न होने की समस्या को ठीक किया गया. साथ ही,
NoSuchElementExceptionकी वजह से होने वाली समस्या को ठीक किया गया. इसकी वजह यह थी कि प्रोसेस के नाम, ट्रेस में सही तरीके से कैप्चर नहीं किए जा रहे थे. (Ib4c17, b/218668335)Q (API 29) और इसके बाद के वर्शन पर, थर्मल थ्रॉटलिंग का पता लगाने के लिए
PowerManagerका इस्तेमाल करें. इससे थर्मल थ्रॉटलिंग का पता लगाने के दौरान, गलत पॉज़िटिव की फ़्रीक्वेंसी में काफ़ी कमी आती है. साथ ही, यह उपयोगकर्ता के बिल्ड पर बेंचमार्क की स्पीड को काफ़ी बढ़ा देता है. यह थ्रॉटलिंग का पता भी लगाता है. ऐसा तब भी होता है, जब क्लॉक लॉक हों. हालांकि, ऐसा तब होता है, जब डिवाइस के फ़िज़िकल एनवायरमेंट के हिसाब से क्लॉक बहुत ज़्यादा लॉक हों. (I9c027, b/217497678, b/131755853)जांच को आसान बनाने के लिए, simpleperf की सैंपलिंग प्रोफ़ाइलिंग को सिर्फ़
measureRepeatedथ्रेड पर फ़िल्टर करें (Ic3e12, b/217501939)एक से ज़्यादा प्रोसेस वाले ऐप्लिकेशन में, नाम वाली यूज़र इंटरफ़ेस (यूआई) सबप्रोसेस से मेट्रिक पाने की सुविधा (Ice6c0, b/215988434)
Android 9 (SDK 28) को टारगेट करने के लिए, बेसलाइन प्रोफ़ाइल के नियमों को फ़िल्टर करें. aosp/1980331 b/216508418
Compilation.None()का इस्तेमाल करते समय, प्रोफ़ाइल इंस्टॉल करने की प्रोसेस को स्किप करें. इसके अलावा, अगर ऐप्लिकेशनandroidx.profileinstallerऔर Android Gradle प्लगिन के पुराने वर्शन का इस्तेमाल कर रहा है, तो चेतावनी की रिपोर्ट करें. aosp/1977029
वर्शन 1.1.0-beta03
9 फ़रवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta03 रिलीज़ हो गया है. वर्शन 1.1.0-beta03 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- ऑडियो अंडररन का पता लगाने की अनुमति देने के लिए, एक्सपेरिमेंटल फ़्लैग के तहत मैक्रोबेंचमार्क लाइब्रेरी में
AudioUnderrunMetricजोड़ा गया (Ib5972) BaselineProfileRuleअबsetupब्लॉक को स्वीकार नहीं करता है, क्योंकि यहprofileBlockकी तरह ही काम करता था. (Ic7dfe, b/215536447)उदाहरण के लिए,
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें Studio के आउटपुट में लिंक किए जाने पर, बाद के रन में माइक्रोबेंच प्रोफ़ाइलर ट्रेस अपडेट नहीं होते थे (I5ae4d, b/214917025)
- एपीआई 23 (Ice380) पर, कंपाइलेशन शेल कमांड को रोकने की सुविधा
- इनके नाम बदले गए हैं:
FrameCpuTime->FrameDurationCpu,FrameUiTime->FrameDurationUi. ऐसा इसलिए किया गया है, ताकि यह साफ़ तौर पर पता चल सके कि ये अवधि हैं, टाइमस्टैंप नहीं. साथ ही, प्रीफ़िक्स को मैच करने के लिए भी ऐसा किया गया है. (I0eba3, b/216337830)
वर्शन 1.1.0-beta02
26 जनवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta02 रिलीज़ हो गया है. वर्शन 1.1.0-beta02 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- माइक्रोबेंचमार्क स्टैक सैंपलिंग / मेथड ट्रेसिंग प्रोफ़ाइल के नतीजे अब Studio के आउटपुट में लिंक किए गए हैं. ये नतीजे, अन्य प्रोफ़ाइलिंग आउटपुट की तरह ही होते हैं. साथ ही, ये नतीजे, ऐलोकेशन मेट्रिक को नहीं छिपाते हैं. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule अब जनरेट की गई BaselineProfile टेक्स्ट फ़ाइल को पुल करने के लिए, logcat और Studio आउटपुट में
adb pullकमांड प्रिंट करता है. (f08811)
वर्शन 1.1.0-beta01
12 जनवरी, 2022
androidx.benchmark:benchmark-*:1.1.0-beta01 रिलीज़ हो गया है. वर्शन 1.1.0-beta01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- यह समस्या ठीक करता है, जिसमें प्रोफ़ाइलर आर्ग्युमेंट को चालू करने के विकल्प को अनदेखा किया जाता है. (I37373, b/210619998)
- अब काम नहीं करने वाले
CompliationModesको हटाया गया (I98186, b/213467659) CompilationMode.Partialके आधारभूत प्रोफ़ाइल आर्ग्युमेंट को साफ़ तौर पर समझने के लिए, enum में स्विच किया गया. (Id67ea)
वर्शन 1.1.0-alpha13
15 दिसंबर, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13 रिलीज़ हो गया है. वर्शन 1.1.0-alpha13 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Android Q (एपीआई 29+) पर, माइक्रोबेंच के आउटपुट में कम ओवरहेड वाली सिस्टम ट्रेसिंग की सुविधा जोड़ी गई है. ध्यान दें कि फ़िलहाल, यह सुविधा
android.os.Traceयाandroidx.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 बीटा (Ib60cc, b/193260119) पर काम करने के लिए, FrameTimingMetric से जुड़ी समस्या ठीक की गई है
CompilationMode.BaselineProfileको बेहतर तरीके से काम करने में मदद करने के लिए,EmptyActivityका इस्तेमाल करके टारगेट ऐप्लिकेशन को फ़ोर्स स्टॉप की स्थिति से बाहर लाएं. (Id7cac, b/192084204)- प्लैटफ़ॉर्म के स्टैंडर्ड के मुताबिक, ट्रेस फ़ाइल एक्सटेंशन को
.perfetto-traceमें बदल दिया गया है. (I4c236, b/174663039) - StartupTimingMetric अब "fullyDrawnMs" मेट्रिक आउटपुट करता है. इससे यह मेज़र किया जाता है कि आपका ऐप्लिकेशन पूरी तरह से रेंडर होने में कितना समय लेता है. अपने ऐप्लिकेशन के लिए इस मेट्रिक को तय करने के लिए, जब आपका शुरुआती कॉन्टेंट तैयार हो जाए, तब Activity.reportFullyDrawn को कॉल करें. जैसे, जब आपकी शुरुआती सूची के आइटम, डेटाबेस या नेटवर्क से लोड हो जाएं. (reportFullyDrawn तरीका, ComponentActivity पर बिल्ड वर्शन की जांच किए बिना उपलब्ध है). ध्यान दें कि आपकी जांच इतनी लंबी होनी चाहिए कि मेट्रिक कैप्चर हो जाए. startActivityAndWait, reportFullyDrawn के लिए इंतज़ार नहीं करता. (If1141, b/179176560)
- ट्रेस में यूज़र इंटरफ़ेस (यूआई) मेटाडेटा जोड़ने की लागत को 50 से ज़्यादा मिलीसेकंड तक कम किया गया (Ic8390, b/193923003)
- ट्रेसिंग बंद करने पर, पोलिंग फ़्रीक्वेंसी में काफ़ी बढ़ोतरी हुई.इससे स्टार्टअप के बेंचमार्क रनटाइम में 30% से ज़्यादा की कमी आ सकती है. उदाहरण के लिए, Idfbc1, b/193723768
वर्शन 1.1.0-alpha03
16 जून, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03 रिलीज़ हो गया है. वर्शन 1.1.0-alpha03 में ये बदलाव शामिल हैं.
नई सुविधाएं
- Jetpack ProfileInstaller लाइब्रेरी का इस्तेमाल करके इंस्टॉल की गई प्रोफ़ाइलों के लिए, एक नया
CompilationMode.BaselineProfileजोड़ा गया है. (aosp/1720930)
गड़बड़ियां ठीक की गईं
बेंचमार्क से जुड़ी गड़बड़ियों को छिपाने के लिए, Gradle के सैंपल कोड को अपडेट किया गया है. अब इसमें ऐसे एपीआई का इस्तेमाल किया जाता है जो बंद नहीं हुआ है. साथ ही, इसमें ऐसा सिंटैक्स इस्तेमाल किया जाता है जो .gradle.kts का इस्तेमाल करने वाले लोगों के लिए भी काम करता है.
उदाहरण के लिए,
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
वर्शन 1.1.0-alpha02
18 मई, 2021
मानदंड के वर्शन 1.1.0-alpha02 में, बेंचमार्किंग का एक अहम कॉम्पोनेंट शामिल किया गया है. इसका नाम मैक्रोबेंचमार्क है. बेंचमार्क की मदद से सीपीयू लूप को मेज़र किया जा सकता है. इसके अलावा, मैक्रोबेंचमार्क की मदद से, पूरे ऐप्लिकेशन के इंटरैक्शन को मेज़र किया जा सकता है. जैसे, स्टार्टअप और स्क्रोलिंग. साथ ही, ट्रेस कैप्चर किए जा सकते हैं. ज़्यादा जानकारी के लिए, लाइब्रेरी का दस्तावेज़ देखें.
androidx.benchmark:benchmark-*:1.1.0-alpha02 रिलीज़ हो गया है. वर्शन 1.1.0-alpha02 में ये बदलाव शामिल हैं.
नई सुविधाएं
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, डेटा कॉपी को कब मैनेज करेगा. -1को सही तरीके से प्रिंट करने के लिए, JSON में क्लॉक फ़्रीक्वेंसी का पता न चलने की समस्या को ठीक किया गया (b/141945670).
वर्शन 1.0.0-alpha06
18 सितंबर, 2019
androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06, और androidx.benchmark:benchmark-junit4:1.0.0-alpha06 रिलीज़ किए जाते हैं. वर्शन 1.0.0-alpha06 में ये बदलाव शामिल हैं.
नई सुविधाएं
- टेस्ट रनर के लिए पुराने पैकेज का गलत तरीके से इस्तेमाल करने की जांच की गई है. अब इससे ज़्यादा मददगार गड़बड़ी का मैसेज मिलता है
एपीआई में हुए बदलाव
- एक्सपेरिमेंट के तौर पर उपलब्ध एनोटेशन
ExperimentalAnnotationReportअब सही तरीके से सार्वजनिक हो गया है. एक्सपेरिमेंट के तौर पर उपलब्ध BenchmarkState#report एपीआई का इस्तेमाल करने के लिए, अब इस एनोटेशन की ज़रूरत होगी
वर्शन 1.0.0-alpha05
5 सितंबर, 2019
androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05, और androidx.benchmark:benchmark-junit4:1.0.0-alpha05 रिलीज़ किए जाते हैं. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
एपीआई में हुए बदलाव
BenchmarkState.reportDataएपीआई को अब एक्सपेरिमेंट के तौर पर मार्क किया गया है
गड़बड़ियां ठीक की गईं
- क्लॉक-लॉकिंग स्क्रिप्ट से जुड़ी समस्या को ठीक किया गया है. यह स्क्रिप्ट, उन डिवाइसों पर काम नहीं करती थी जिनमें
cutयाexprशेल यूटिलिटी मौजूद नहीं थी. ./gradlew lockClocksटास्क से जुड़ी उस समस्या को ठीक किया गया है जिसकी वजह से, su यूटिलिटी के पुराने वर्शन से रूट किए गए डिवाइसों पर यह टास्क रुक जाता था. इस वर्शन में-cफ़्लैग काम नहीं करता था.
वर्शन 1.0.0-alpha04
7 अगस्त, 2019
androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04, और androidx.benchmark:benchmark-junit4:1.0.0-alpha04 रिलीज़ किए जाते हैं. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.
बिना Gradle के मानदंड लाइब्रेरी का इस्तेमाल करने के तरीके के बारे में भी नया दस्तावेज़ जोड़ा गया है. इसका इस्तेमाल अलग-अलग बिल्ड सिस्टम (जैसे, Bazel या Buck) के साथ किया जा सकता है. साथ ही, इसे सीआई में भी चलाया जा सकता है. ज़्यादा जानकारी के लिए, Gradle के बिना बेंचमार्क बनाना और लगातार इंटिग्रेशन में बेंचमार्क चलाना लेख पढ़ें.
नई सुविधाएं
- Gradle प्लगिन
- अब यह टेस्ट कवरेज को अपने-आप बंद कर देता है और डिफ़ॉल्ट रूप से
AndroidBenchmarkRunnerसेट करता है (b/138374050) - AGP पर आधारित डेटा कॉपी करने की नई सुविधा जोड़ी गई है. इसका इस्तेमाल, बेंचमार्क चलाते समय और 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 रिलीज़ हो गया है. इस वर्शन में शामिल बदलाव यहां देखे जा सकते हैं.