Jetpack Macrobenchmark を使用してベースライン プロファイルが有効な場合のアプリの動作をテストし、その結果をベースライン プロファイルを無効したベンチマークと比較することをおすすめします。これにより、アプリの起動時間(初期表示からフル表示までの所要時間)を測定したり、実行時のレンダリング パフォーマンス(生成されたフレームによりジャンクが発生する可能性があるかどうか)を確認したりできます。
Macrobenchmark を使用すると、CompilationMode
API を介して、測定前のコンパイルを制御できます。結果を測定するには、以下のスニペットに示すように、compilationMode
パラメータを正しい値に設定する必要があります。
@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startupNoCompilation() = startup(CompilationMode.None())
@Test
fun startupBaselineProfile() = startup(CompilationMode.Partial())
@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)
}
}
Google Pixel 7 で実行された Now in Android サンプルアプリのスクリーンショットに示すように、結果は Android Studio に直接表示されます。この結果から、アプリの起動は、コンパイルなし(378.6 ms)と比べて、ベースライン プロファイルを使用した場合に最も速かった(275.1 ms)ことがわかります。フル AOT コンパイルは、ディスクからより大きいファイルを読み込む必要があるため、さらに時間がかかる(393 ms)可能性があります。
なお、上記の例は StartupTimingMetric
でキャプチャしたアプリ起動の結果を示すものですが、FrameTimingMetric
など、他にも検討すべき重要な指標があります。すべての種類の指標について詳しくは、指標をキャプチャするをご覧ください。