Macrobenchmark ライブラリで測定を自動化する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Macrobenchmark を使用すると、CompilationMode API を介して、測定前のコンパイルを制御できます(BaselineProfile の使用を含む)。Macrobenchmark を使用してベースライン プロファイルが有効な場合のアプリの動作をテストし、その結果をベースライン プロファイルを無効したベンチマークと比較することをおすすめします。これを行うには、次のように compilationMode を適切な値に設定する必要があります。

@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark : AbstractStartupBenchmark(StartupMode.COLD)
abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    @Test
    fun startupPartialCompilation() = startup(
        CompilationMode.Partial(
            baselineProfileMode = BaselineProfileMode.Disable,
            warmupIterations = 3
        )
    )

    @Test
    fun startupPartialWithBaselineProfiles() =
        startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))

    @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,
        setupBlock = {
            pressHome()
        }
    ) {
        startActivityAndWait()
    }
}

テスト結果を渡す例を図 2 に示します。

図 2. これは小規模なテストの結果です。アプリの規模が大きいほど、ベースライン プロファイルのメリットも大きくなります。

上の例では StartupTimingMetric を見ていますが、ジャンク(フレーム指標)のように、Jetpack Macrobenchmark を使用して測定できる考慮すべき重要な指標もあります。