माइक्रो-बेंचमार्क इंस्ट्रूमेंटेशन के आर्ग्युमेंट

नीचे दिए गए इंस्ट्रूमेंटेशन आर्ग्युमेंट की मदद से, माइक्रोबेंचमार्क के व्यवहार को कॉन्फ़िगर करें. इन्हें Gradle कॉन्फ़िगरेशन में जोड़ा जा सकता है. इसके अलावा, कमांड लाइन से इंस्ट्रुमेंटेशन चलाते समय इन्हें सीधे तौर पर लागू किया जा सकता है. Android Studio और कमांड लाइन टेस्ट रन, दोनों के लिए इन आर्ग्युमेंट को सेट करने के लिए, उन्हें testInstrumentationRunnerArguments में जोड़ें:

android {
    defaultConfig {
        // ...
        testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
    }
}

Android Studio से बेंचमार्क चलाते समय, इंस्ट्रुमेंटेशन के तर्क भी सेट अप किए जा सकते हैं. तर्क बदलने के लिए, यह तरीका अपनाएं:

  1. बदलाव करें पर क्लिक करके, रन कॉन्फ़िगरेशन में बदलाव करें. इसके बाद, वह कॉन्फ़िगरेशन चुनें जिसमें आपको बदलाव करना है.
    पहली इमेज. रन कॉन्फ़िगरेशन में बदलाव करें.
  2. इंस्ट्रुमेंटेशन के आर्ग्युमेंट फ़ील्ड के बगल में मौजूद पर क्लिक करके, इंस्ट्रुमेंटेशन के आर्ग्युमेंट में बदलाव करें.
    दूसरी इमेज. इंस्ट्रूमेंटेशन के तर्क में बदलाव करें.
  3. पर क्लिक करें और ज़रूरी इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ें.
    तीसरी इमेज. इंस्ट्रुमेंटेशन आर्ग्युमेंट जोड़ें.

अगर आपको कमांड लाइन से बेंचमार्क चलाना है, तो -P android.testInstrumentationRunnerArguments.[name of the argument] का इस्तेमाल करें:

./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.profiling.mode=StackSampling

अगर आपको सीधे तौर पर किसी इंस्ट्रुमेंट कमांड को चालू करना है (ऐसा CI टेस्टिंग एनवायरमेंट में हो सकता है), तो -e के साथ am instrument को आर्ग्युमेंट पास करें:

adb shell am instrument -e androidx.benchmark.profiling.mode StackSampling -w com.example.macrobenchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

सीआई में बेंचमार्क कॉन्फ़िगर करने के बारे में ज़्यादा जानकारी के लिए, सीआई में बेंचमार्किंग लेख पढ़ें

androidx.benchmark.cpuEventCounter.enable (experimental)

androidx.benchmark.cupEventCounter.events में बताए गए सीपीयू इवेंट की संख्या गिनता है. इसके लिए, रूट ऐक्सेस की ज़रूरत होती है.

  • आर्ग्युमेंट का टाइप: बूलियन
  • डिफ़ॉल्ट रूप से: false पर सेट होती है

androidx.benchmark.cpuEventCounter.events (experimental)

इससे यह तय होता है कि किस तरह के सीपीयू इवेंट की गिनती करनी है. इस आर्ग्युमेंट का इस्तेमाल करने के लिए, androidx.benchmark.cpuEventCounter.enable को true पर सेट करना होगा.

  • आर्ग्युमेंट का टाइप: कॉमा लगाकर अलग की गई स्ट्रिंग की सूची
  • उपलब्ध विकल्प:
    • Instructions
    • CPUCycles
    • L1DReferences
    • L1DMisses
    • BranchInstructions
    • BranchMisses
    • L1IReferences
    • L1IMisses
  • डिफ़ॉल्ट रूप से: Instructions, CpuCycles, BranchMisses

androidx.benchmark.dryRunMode.enable

इसकी मदद से, एक लूप में बेंचमार्क चलाए जा सकते हैं. इससे यह पुष्टि की जा सकती है कि वे ठीक से काम कर रहे हैं या नहीं.

इसका मतलब है कि:

  • कॉन्फ़िगरेशन से जुड़ी गड़बड़ियों को लागू नहीं किया जाता. उदाहरण के लिए, एम्युलेटर पर नियमित रूप से सही होने की जांच को आसान बनाने के लिए
  • बेंचमार्क सिर्फ़ एक लूप चलाता है. इसमें वार्मअप नहीं होता
  • रनटाइम को कम करने के लिए, मेज़रमेंट और ट्रेस कैप्चर नहीं किए जाते

यह टेस्ट थ्रूपुट को ऑप्टिमाइज़ करता है. साथ ही, यह बिल्ड और मेज़रमेंट की सटीकता के बजाय, बेंचमार्क लॉजिक की पुष्टि करता है.

  • आर्ग्युमेंट का टाइप: बूलियन
  • डिफ़ॉल्ट रूप से यह इस पर सेट होता है: false

androidx.benchmark.killExistingPerfettoRecordings

Benchmark, डिफ़ॉल्ट रूप से किसी भी मौजूदा Perfetto (सिस्टम ट्रेस) रिकॉर्डिंग को बंद कर देता है. ऐसा इसलिए किया जाता है, ताकि नई ट्रेसिंग शुरू करते समय कोई रुकावट न आए. इस सुविधा को बंद करने के लिए, false पास करें.

  • आर्ग्युमेंट का टाइप: बूलियन
  • डिफ़ॉल्ट रूप से यह इस पर सेट होता है: true

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
  • डिफ़ॉल्ट रूप से: खाली सूची

additionalTestOutputDir

यह कुकी कॉन्फ़िगर करती है कि डिवाइस पर, JSON फ़ॉर्मैट में बेंचमार्क रिपोर्ट और प्रोफ़ाइलिंग के नतीजे कहां सेव किए जाएं.

  • आर्ग्युमेंट का टाइप: फ़ाइल पाथ स्ट्रिंग
  • डिफ़ॉल्ट रूप से: टेस्ट APK की बाहरी डायरेक्ट्री

लिसनर

अगर बेंचमार्क के चलने के दौरान, बैकग्राउंड में कोई ऐसा काम होता है जो बेंचमार्क से जुड़ा नहीं है, तो आपको बेंचमार्क के नतीजे अलग-अलग मिल सकते हैं.

बेंचमार्किंग के दौरान बैकग्राउंड में होने वाले काम को बंद करने के लिए, listener इंस्ट्रूमेंटेशन के तर्क के टाइप को androidx.benchmark.junit4.SideEffectRunListener पर सेट करें.

  • आर्ग्युमेंट का टाइप: स्ट्रिंग
  • उपलब्ध विकल्प:
    • androidx.benchmark.junit4.SideEffectRunListener
  • डिफ़ॉल्ट रूप से: तय नहीं किया गया