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

नीचे दिए गए इंस्ट्रूमेंटेशन आर्ग्युमेंट की मदद से, लाइब्रेरी के व्यवहार को कॉन्फ़िगर करें. इन्हें अपने 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.enabledRules=BaselineProfile

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

adb shell am instrument -e androidx.benchmark.enabledRules BaselineProfile -w com.example.macrobenchmark/androidx.test.runner.AndroidJUnitRunner

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

androidx.benchmark.compilation.enabled

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

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

androidx.benchmark.dryRunMode.enable

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

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

androidx.benchmark.enabledRules

इससे सिर्फ़ एक तरह के टेस्ट के लिए, फ़िल्टर किए गए रन की अनुमति मिलती है: बेसलाइन प्रोफ़ाइल जनरेशन या मैक्रोबेंचमार्क टेस्ट. कॉमा लगाकर अलग की गई सूचियां भी काम करती हैं.

  • ऑर्ग्युमेंट का टाइप: स्ट्रिंग
  • उपलब्ध विकल्प:
    • Macrobenchmark
    • BaselineProfile
  • डिफ़ॉल्ट रूप से: तय नहीं किया गया

androidx.benchmark.junit4.SideEffectRunListener

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

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

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

androidx.benchmark.fullTracing.enable

androidx.tracing.perfetto ट्रैसपॉइंट चालू करता है, जैसे कि Jetpack Compose के कॉम्पोज़िशन को ट्रैक करना.

आपको अपना प्रोजेक्ट सेट अप करना होगा, ताकि आप बेंचमार्क से कॉम्पोज़िशन ट्रैकिंग कैप्चर कर सकें. ज़्यादा जानकारी के लिए, Jetpack Macrobenchmark की मदद से ट्रैक रिकॉर्ड करना लेख पढ़ें.

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

androidx.benchmark.profiling.mode

इससे, बेंचमार्क चलाते समय ट्रेस फ़ाइलें कैप्चर की जा सकती हैं. उपलब्ध विकल्प, माइक्रोबेंचमार्क लाइब्रेरी के विकल्पों जैसे ही होते हैं. ज़्यादा जानकारी के लिए, माइक्रोबेंचमार्क की प्रोफ़ाइल बनाना पर जाएं.

  • आर्ग्युमेंट का टाइप: स्ट्रिंग
  • उपलब्ध विकल्प:
    • MethodTracing
    • StackSampling
    • None
  • डिफ़ॉल्ट रूप से: None

androidx.benchmark.startupProfiles.enable

इससे, आपको बेंचमार्किंग के दौरान स्टार्टअप प्रोफ़ाइल जनरेट करने की सुविधा बंद करने की अनुमति मिलती है.

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

androidx.benchmark.suppressErrors

गड़बड़ियों को चेतावनियों में बदलने के लिए, कॉमा लगाकर अलग की गई गड़बड़ियों की सूची स्वीकार करता है.

  • आर्ग्युमेंट का टाइप: स्ट्रिंग की सूची
  • उपलब्ध विकल्प:

    • DEBUGGABLE

      DEBUGGABLE गड़बड़ी से पता चलता है कि टारगेट पैकेज, अपने मेनिफ़ेस्ट में debuggable=true के साथ चल रहा है. इससे, डीबग करने की सुविधाओं के साथ काम करने के लिए, रनटाइम की परफ़ॉर्मेंस काफ़ी कम हो जाती है. इस गड़बड़ी से बचने के लिए, debuggable=false के साथ बेंचमार्क चलाएं. डीबग किए जा सकने वाले आर्ग्युमेंट से, प्रोग्राम के चलने की स्पीड पर असर पड़ता है. इसका मतलब है कि बेंचमार्क में हुए सुधार, असल उपयोगकर्ता के अनुभव पर लागू नहीं हो सकते या रिलीज़ की परफ़ॉर्मेंस खराब हो सकती है.

    • LOW-BATTERY

      बैटरी कम होने पर, डिवाइस अक्सर बाकी बची बैटरी बचाने के लिए परफ़ॉर्मेंस कम कर देते हैं. उदाहरण के लिए, बड़े कोर बंद करके. ऐसा तब भी होता है, जब डिवाइस प्लग इन हों. इस गड़बड़ी को सिर्फ़ तब छिपाएं, जब ऐप्लिकेशन की परफ़ॉर्मेंस को कम करके जान-बूझकर उसकी प्रोफ़ाइल बनाई जा रही हो.

    • EMULATOR

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

    • NOT-PROFILEABLE

      टारगेट पैकेज $packageName, <profileable shell=true> के बिना चल रहा है. Android 10 और 11 पर, प्रोफ़ाइल करने की सुविधा ज़रूरी है, ताकि Macrobenchmark, टारगेट प्रोसेस से ज़्यादा जानकारी वाली ट्रैकिंग जानकारी कैप्चर कर सके. जैसे, ऐप्लिकेशन या लाइब्रेरी में तय किए गए सिस्टम ट्रैकिंग सेक्शन. इस गड़बड़ी को बहुत सावधानी से दबाएं.

    • METHOD-TRACING-ENABLED

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

  • डिफ़ॉल्ट रूप से: खाली सूची

additionalTestOutputDir

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

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