Temel Profiller etkinleştirildiğinde bir uygulamanın nasıl performans gösterdiğini test etmek için Jetpack Makrobenchmark aracını kullanmanızı ve bu sonuçları Referans Profiller devre dışıyken yapılan karşılaştırmalarla karşılaştırmanızı öneririz. Bu yaklaşımla, oluşturulan karelerin duraklamaya neden olup olmadığını görmek için uygulama başlatma süresini (hem ilk gösterime hem de tam görüntülemeye kadar geçen süre) veya çalışma zamanı oluşturma performansını ölçebilirsiniz.
Makrobenchmark'lar, ölçüm öncesi derlemeyi CompilationMode
API kullanarak 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, Temel Profiller'in 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 örneği uygulaması için sonuçları doğrudan Android Studio'da görebilirsiniz. Sonuçlar, derleme olmamasına (324,8 ms) kıyasla Temel Profiller kullanıldığında (229,0 ms) uygulama başlatmanın en hızlı olduğunu göstermektedir.
Önceki örnekte, StartupTimingMetric
ile yakalanan uygulama başlatma sonuçları gösterilmektedir. Ancak FrameTimingMetric
gibi dikkate alınması gereken başka metrikler de mevcuttur. Tüm metrik türleri hakkında daha fazla bilgi için Makrobenchmark metriklerini yakalama bölümüne bakın.
Tam gösterime kalan süre
Önceki örnekte, uygulamanın ilk karesini oluşturmak için geçen süreyi belirten ilk ekran görüntülenene kadar geçen süre (TTID) ölçülür. Ancak bu, kullanıcının uygulamanızla etkileşim kurmaya başlayabilmesi için geçmesi gereken 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ı ölçmede ve optimize etmede daha yararlıdır.
Her ikisi de önemli olduğundan, hem TTID hem de TTFD için 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şim kurabilmesini sağlamak açısından önemlidir.
Uygulamanın kullanıcı arayüzü tamamen çizildiğinde raporlamayla ilgili stratejiler için Başlangıç zamanlaması doğruluğunu iyileştirme bölümüne bakın.
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken görüntülenir
- [Makrobenchmark yazın][11]
- [MakroKarşılaştırma metriklerini yakalayın][12]
- [Uygulama startup analizi ve optimizasyonu {:#app-startup-analysis-optimization}][13]