नीचे दिए गए इंस्ट्रूमेंटेशन आर्ग्युमेंट की मदद से, माइक्रोबेंचमार्क के व्यवहार को कॉन्फ़िगर करें. इन्हें अपने Gradle कॉन्फ़िगरेशन में जोड़ा जा सकता है या कमांड लाइन से इंस्ट्रूमेंटेशन चलाते समय, इन्हें सीधे लागू किया जा सकता है. Android Studio और कमांड लाइन टेस्ट के सभी रन के लिए, इन आर्ग्युमेंट को सेट करने के लिए, उन्हें testInstrumentationRunnerArguments
में जोड़ें:
android {
defaultConfig {
// ...
testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
}
}
Android Studio से बेंचमार्क चलाते समय, इंस्ट्रूमेंटेशन आर्ग्युमेंट भी सेट अप किए जा सकते हैं. आर्ग्युमेंट बदलने के लिए, यह तरीका अपनाएं:
- बदलाव करें पर क्लिक करके, रन कॉन्फ़िगरेशन में बदलाव करें. इसके बाद, वह कॉन्फ़िगरेशन चुनें जिसमें आपको बदलाव करना है.
पहली इमेज. रन कॉन्फ़िगरेशन में बदलाव करें. - इंस्ट्रुमेंटेशन आर्ग्युमेंट फ़ील्ड के बगल में मौजूद
दूसरी इमेज. इंस्ट्रुमेंटेशन आर्ग्युमेंट में बदलाव करें.
पर क्लिक करके, इंस्ट्रुमेंटेशन आर्ग्युमेंट में बदलाव करें.
तीसरी इमेज. इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ें.
पर क्लिक करें और ज़रूरी
इंस्ट्रूमेंटेशन आर्ग्युमेंट जोड़ें.
अगर आपको कमांड लाइन से बेंचमार्क चलाना है, तो -P
android.testInstrumentationRunnerArguments.[name of the argument]
का इस्तेमाल करें:
./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.profiling.mode=StackSampling
अगर सीधे तौर पर am instrument कमांड का इस्तेमाल किया जा रहा है (ऐसा सीआई के टेस्टिंग एनवायरमेंट में हो सकता है), तो -e
के साथ am instrument
को आर्ग्युमेंट पास करें:
adb shell am instrument -e androidx.benchmark.profiling.mode StackSampling -w com.example.macrobenchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
सीआई में मानदंडों को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, सीआई में मानदंड तय करना देखें
additionalTestOutputDir
यह कॉन्फ़िगर करता है कि डिवाइस पर, जेएसओएन बेंचमार्क रिपोर्ट और प्रोफ़ाइलिंग के नतीजे कहां सेव किए जाएं.
- ऑर्ग्युमेंट का टाइप: फ़ाइल पाथ स्ट्रिंग
- डिफ़ॉल्ट रूप से: टेस्ट APK की बाहरी डायरेक्ट्री
androidx.benchmark.cpuEventCounter.enable (प्रयोग के तौर पर उपलब्ध)
androidx.benchmark.cupEventCounter.events
में बताए गए सीपीयू इवेंट की गिनती करता है.
इसके लिए, रूट ऐक्सेस की ज़रूरत होती है.
- आर्ग्युमेंट का टाइप: बूलियन
- डिफ़ॉल्ट रूप से: गलत
androidx.benchmark.cpuEventCounter.events (प्रयोग के तौर पर उपलब्ध)
इससे यह तय होता है कि किस तरह के सीपीयू इवेंट की गिनती करनी है. इस आर्ग्युमेंट का इस्तेमाल करने के लिए,
androidx.benchmark.cpuEventCounter.enable
को true
पर सेट करना होगा.
- आर्ग्युमेंट टाइप: कॉमा लगाकर अलग की गई स्ट्रिंग की सूची
- उपलब्ध विकल्प:
Instructions
CPUCycles
L1DReferences
L1DMisses
BranchInstructions
BranchMisses
L1IReferences
L1IMisses
- डिफ़ॉल्ट रूप से:
Instructions
,CpuCycles
,BranchMisses
androidx.benchmark.dryRunMode.enable
इसकी मदद से, एक ही लूप में मानदंड चलाए जा सकते हैं, ताकि यह पुष्टि की जा सके कि वे सही तरीके से काम कर रहे हैं.
इसका मतलब है कि:
- कॉन्फ़िगरेशन से जुड़ी गड़बड़ियां लागू नहीं की जातीं. उदाहरण के लिए, एमुलेटर पर सही होने की नियमित जांच के साथ इसे आसानी से चलाने के लिए
- बेंचमार्क सिर्फ़ एक लूप चलाता है, जिसमें कोई वार्मअप नहीं होता
- रनटाइम कम करने के लिए, मेज़रमेंट और ट्रेस कैप्चर नहीं किए जाते
यह टेस्ट थ्रूपुट के लिए ऑप्टिमाइज़ करता है. साथ ही, बिल्ड और मेज़रमेंट के सटीक होने के बजाय, बेंचमार्क लॉजिक की पुष्टि करता है.
- आर्ग्युमेंट का टाइप: बूलियन
- डिफ़ॉल्ट रूप से:
false
androidx.benchmark.iterations
यह समय के हिसाब से टारगेट के दोहराव की गिनती को बदल देता है, ताकि यह पक्का किया जा सके कि एक जैसा काम किया जा रहा है. आम तौर पर, यह सिर्फ़ प्रोफ़ाइलिंग की सुविधा चालू होने पर ही काम का होता है. इससे, अलग-अलग लागू करने या चलाने की तुलना करते समय, प्रोफ़ाइलिंग ट्रेस में काम की एक जैसी संख्या का पता चलता है. अन्य मामलों में, इससे मेज़रमेंट की सटीकता या स्थिरता कम हो सकती है.
- आर्ग्युमेंट का टाइप: इंटेजर
- डिफ़ॉल्ट रूप से: तय नहीं किया गया
androidx.benchmark.junit4.SideEffectRunListener
अगर बेंचमार्क चलने के दौरान, उससे जुड़ा बैकग्राउंड काम नहीं किया जाता है, तो आपको बेंचमार्क के अलग-अलग नतीजे मिल सकते हैं.
बेंचमार्किंग के दौरान बैकग्राउंड में होने वाले काम को बंद करने के लिए, listener
इंस्ट्रूमेंटेशन आर्ग्युमेंट टाइप को
androidx.benchmark.junit4.SideEffectRunListener
पर सेट करें.
- आर्ग्युमेंट का टाइप: स्ट्रिंग
- उपलब्ध विकल्प:
androidx.benchmark.junit4.SideEffectRunListener
- डिफ़ॉल्ट रूप से: तय नहीं किया गया
androidx.benchmark.output.enable
इससे नतीजे की JSON फ़ाइल को बाहरी स्टोरेज में सेव किया जा सकता है.
- आर्ग्युमेंट का टाइप: बूलियन
- डिफ़ॉल्ट रूप से:
true
androidx.benchmark.profiling.mode
इससे, बेंचमार्क चलाते समय ट्रेस फ़ाइलें कैप्चर की जा सकती हैं. उपलब्ध विकल्पों के लिए, माइक्रोबेंचमार्क की प्रोफ़ाइल बनाएं देखें.
ध्यान दें कि Android OS के कुछ वर्शन में, मेथड ट्रैकिंग की सुविधा काम नहीं करती. ऐसा करने पर, बाद में होने वाली मेज़रमेंट पर असर पड़ता है. माइक्रोबेंचमार्क, ऐसा होने से रोकने के लिए अपवाद दिखाता है. इसलिए, सिर्फ़ तब डिफ़ॉल्ट आर्ग्युमेंट का इस्तेमाल करके, मेथड के ट्रेस कैप्चर करें, जब ऐसा करना सुरक्षित हो. समस्या #316174880 देखें.
- आर्ग्युमेंट का टाइप: स्ट्रिंग
- उपलब्ध विकल्प:
MethodTracing
StackSampling
None
- डिफ़ॉल्ट रूप से यह सेट होता है:
MethodTracing
का सुरक्षित वर्शन, जो सिर्फ़ तब मेथड ट्रेस कैप्चर करता है, जब डिवाइस मेज़रमेंट पर असर डाले बिना ऐसा कर सकता हो.
androidx.benchmark.suppressErrors
गड़बड़ियों को चेतावनियों में बदलने के लिए, कॉमा लगाकर अलग की गई गड़बड़ियों की सूची स्वीकार करता है.
- ऑर्ग्युमेंट का टाइप: स्ट्रिंग की सूची
- उपलब्ध विकल्प:
DEBUGGABLE
LOW-BATTERY
EMULATOR
CODE-COVERAGE
UNLOCKED
SIMPLEPERF
ACTIVITY-MISSING
- डिफ़ॉल्ट रूप से: खाली सूची
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- Macrobenchmark इंस्ट्रूमेंटेशन के आर्ग्युमेंट
- माइक्रो-बेंचमार्क की प्रोफ़ाइल बनाना
- बेसलाइन प्रोफ़ाइलें बनाना {:#creating-profile-rules}