मैक्रोबेंचमार्क लाइब्रेरी के साथ बेंचमार्क बेसलाइन प्रोफ़ाइल

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

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

@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    // No ahead-of-time (AOT) compilation at all. Represents performance of a
    // fresh install on a user's device if you don't enable Baseline Profiles—
    // generally the worst case performance.
    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    // Partial pre-compilation with Baseline Profiles. Represents performance of
    // a fresh install on a user's device.
    @Test
    fun startupPartialWithBaselineProfiles() =
        startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))

    // Partial pre-compilation with some just-in-time (JIT) compilation.
    // Represents performance after some app usage.
    @Test
    fun startupPartialCompilation() = startup(
        CompilationMode.Partial(
            baselineProfileMode = BaselineProfileMode.Disable,
            warmupIteration = 3
        )
    )

    // Full pre-compilation. Generally not representative of real user
    // experience, but can yield more stable performance metrics by removing
    // noise from JIT compilation within benchmark runs.
    @Test
    fun startupFullCompilation() = startup(CompilationMode.Full())

    private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
        packageName = "com.example.macrobenchmark.target",
        metrics = listOf(StartupTimingMetric()),
        compilationMode = compilationMode,
        iterations = 10,
        startupMode = StartupMode.COLD,
        setupBlock = {
            pressHome()
        }
    ) {
        uiAutomator {
            startApp(packageName)
            onElement(5_000) { viewIdResourceName == "my-content"}
        }
    }
}

नीचे दिए गए स्क्रीनशॉट में, Google Pixel 7 पर चलाए गए Now in Android सैंपल ऐप्लिकेशन के नतीजे, सीधे Android Studio में देखे जा सकते हैं. नतीजों से पता चलता है कि बेसलाइन प्रोफ़ाइल (229.0 मि॰से॰) का इस्तेमाल करने पर, ऐप्लिकेशन सबसे तेज़ी से शुरू होता है. वहीं, कंपाइल न करने पर (324.8 मि॰से॰) ऐप्लिकेशन शुरू होने में ज़्यादा समय लगता है.

ColdstartupBenchmark के नतीजे
पहली इमेज. ColdStartupBenchmark के नतीजे दिखाए गए हैं. इनमें, कंपाइलेशन के बिना (324 मि॰से॰), पूरे कंपाइलेशन (315 मि॰से॰), कुछ कंपाइलेशन (312 मि॰से॰), और बेसलाइन प्रोफ़ाइलों (229 मि॰से॰) के लिए, शुरुआती डिसप्ले का समय दिखाया गया है.

पिछले उदाहरण में, StartupTimingMetric का इस्तेमाल करके ऐप्लिकेशन के शुरू होने में लगने वाले समय के नतीजे दिखाए गए हैं. हालांकि, कुछ अन्य अहम मेट्रिक भी हैं जिन पर ध्यान दिया जाना चाहिए. जैसे, FrameTimingMetric. सभी तरह की मेट्रिक के बारे में ज़्यादा जानने के लिए, मैक्रोबेंचमार्क मेट्रिक कैप्चर करना लेख पढ़ें.

पूरी तरह से दिखने में लगने वाला समय

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

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

ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) पूरी तरह से ड्रॉ होने पर रिपोर्टिंग से जुड़ी रणनीतियों के बारे में जानने के लिए, स्टार्टअप टाइमिंग की सटीकता को बेहतर बनाएं लेख पढ़ें.

  • ध्यान दें: JavaScript बंद होने पर लिंक का टेक्स्ट दिखता है
  • [Macrobenchmark लिखना][11]
  • [Macrobenchmark मेट्रिक कैप्चर करना][12]
  • UI Automator की मदद से, अपने-आप होने वाले टेस्ट लिखना
  • [ऐप्लिकेशन के शुरू होने की प्रोसेस का विश्लेषण और उसे ऑप्टिमाइज़ करना {:#app-startup-analysis-optimization}][14]