使用 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 衡量该指标。