Macrobenchmark kitaplığıyla Karşılaştırma Referans Profilleri

Temel Profiller etkinleştirildiğinde bir uygulamanın nasıl performans gösterdiğini test etmek için Jetpack Macrobenchmark'ı kullanmanızı ve ardından sonuçları, Temel Profilleri devre dışı bırakılmış bir karşılaştırmayla karşılaştırmanızı öneririz. Bu yaklaşımla, üretilen karelerin aksamaya neden olup olmadığını görmek için uygulama başlatma süresini (hem ilk hem de tam görüntülemeye kadar) veya çalışma zamanı oluşturma performansını ölçebilirsiniz.

Macrobenchmarks, CompilationMode API'yi kullanarak ölçüm öncesi derlemeyi kontrol etmenizi sağlar. Performansı farklı derleme durumlarıyla karşılaştırmak için farklı CompilationMode değerleri kullanın. Aşağıdaki kod snippet'i, Referans Profillerin avantajını ölçmek için CompilationMode parametresinin nasıl kullanılacağını göstermektedir:

@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()
        }
    ) {
        // Waits for the first rendered frame, which represents time to initial display.
        startActivityAndWait()

        // Waits for content to be visible, which represents time to fully drawn.
        device.wait(Until.hasObject(By.res("my-content")), 5_000)
    }
}

Aşağıdaki ekran görüntüsünde, Google Pixel 7'de çalıştırılan Now in Android sample uygulamasının sonuçlarını doğrudan Android Studio'da görebilirsiniz. Sonuçlar, Temel Profiller kullanıldığında (229,0 ms) uygulama başlatmanın, derleme olmayan durumlarda (324,8 ms) daha hızlı olduğunu gösteriyor.

ColdstartupBenchmark sonuçları
Şekil 1. ColdStartupBenchmark sonuçlarının derleme yok (324 ms), tam derleme (315 ms), kısmi derleme (312 ms) ve Referans Profiller (229 ms) için ilk gösterime kadar geçen süreyi gösteriyor.

Yukarıdaki örnekte StartupTimingMetric ile yakalanan uygulama başlatma sonuçları gösterilmektedir. Ancak FrameTimingMetric gibi dikkate değer başka önemli metrikler de vardır. Tüm metrik türleri hakkında daha fazla bilgi için Macrobenchmark metriklerini yakalama bölümüne bakın.

Tam gösterime kalan süre

Önceki örnekte ilk ekran görüntülenene kadar geçen süre (TTID), uygulamanın ilk karesini oluşturmak için harcadığı süredir. Ancak bu, mutlaka kullanıcının uygulamanızla etkileşime geçmeye başlaması için geçen süreyi yansıtmaz. Tam gösterime kadar geçen süre (TTFD) metriği, tamamen kullanılabilir bir uygulama durumuna sahip olmak için gereken kod yollarının ölçülmesi ve optimize edilmesi açısından daha yararlıdır.

Hem TTID hem de TTFD önemli olduğundan optimizasyon yapmanızı öneririz. Düşük bir TTID, kullanıcının uygulamanın gerçekten başlatılmakta olduğunu görmesine yardımcı olur. TTFD'yi kısa tutmak, kullanıcının uygulamayla hızlı bir şekilde etkileşimde bulunabilmesini sağlamak açısından önemlidir.

Uygulamanın kullanıcı arayüzü tamamen çizildiğinde raporlama stratejileri için Başlangıç zamanlaması doğruluğunu iyileştirme konusuna bakın.

  • Not: JavaScript kapalıyken bağlantı metni gösterilir
  • [Macrobenchmark yazın][11]
  • [Macrobenchmark metriklerini yakalama][12]
  • [Uygulama başlatma analizi ve optimizasyonu {:#app-startup-analysis-Optimized}][13]