Jetpack Macrobenchmark を使用して、ベースライン プロファイルが有効になっている場合と無効になっている場合でアプリの動作をテストし、結果を比較することをおすすめします。このアプローチでは、アプリの起動時間(初期表示までの時間と完全表示までの時間)または実行時のレンダリング パフォーマンスを測定して、生成されたフレームがジャンクを引き起こすかどうかを確認できます。
Macrobenchmark では、CompilationMode
API を使用して、測定前のコンパイルを制御できます。結果を測定するには、次のスニペットに示すように、compilationMode
パラメータを正しい値に設定します。
@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startupNoCompilation() = startup(CompilationMode.None())
@Test
fun startupPartialWithBaselineProfiles() =
startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))
@Test
fun startupPartialCompilation = startup(
CompilationMode.Partial(
baselineProfileMode = BaselineProfileMode.Disable,
warmupIteration = 3
)
)
@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 で直接確認できます。この結果から、コンパイルなし(324.8 ms)とは対照的に、ベースライン プロファイルを使用した場合にアプリは最速で起動する(229.0 ms)ことがわかります。

ColdStartupBenchmark
には初期表示までの時間が示されています。結果は、コンパイルなし(324 ms)、フルコンパイル(315 ms)、部分コンパイル(312 ms)、ベースライン プロファイル(229 ms)となりました。前述の例では、StartupTimingMetric
でキャプチャしたアプリの起動結果が示されていますが、他にも FrameTimingMetric
など、検討すべき重要な指標があります。指標の全種類について詳しくは、Macrobenchmark の指標をキャプチャするをご覧ください。
完全表示までの時間
前述の例では、初期表示までの時間(TTID)を測定しています。これは、アプリが最初のフレームを生成するのに要する時間です。ただし、これは必ずしもユーザーがアプリの操作を開始できるようになるまでの時間を示しているわけではありません。アプリを完全に使用できる状態にするのに必要なコードパスを測定して最適化するうえでは、完全表示までの時間(TTFD)指標のほうがより有益です。
TTID と TTFD はともに重要であるため、いずれも最適化することをおすすめします。TTID が短ければ、アプリが実際に起動されていることをユーザーが確認しやすくなります。一方、ユーザーがすぐにアプリを操作できるようにするために、TTFD を短くしておくことは重要です。
アプリ UI が完全に描画されたときの通知に関する戦略については、起動時間の精度を改善するをご覧ください。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- [Macrobenchmark を作成する][11]
- [Macrobenchmark の指標をキャプチャする][12]
- [アプリの起動の分析と最適化]{:#app-startup-analysis-optimization}[13]