Android NDK开发详解之调试和性能分析的使用 Macrobenchmark 库进行基准测试

Android NDK开发详解之调试和性能分析的使用 Macrobenchmark 库进行基准测试

我们建议使用 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)
    }
}

注意:请在实体设备上运行基准来测量实际性能。在 Android 模拟器上测量性能很可能会得到错误的结果,因为资源是与相应宿主机共享的。
在下面的屏幕截图中,您可以直接在 Android Studio 中查看 Google Pixel 7 上运行的 Now in Android 示例应用的结果。结果表明,与未编译时应用启动时间(324.8 毫秒)相比,当使用基准配置文件时应用的启动时间最短(229.0 毫秒)。

在这里插入图片描述

图 1. ColdStartupBenchmark 的结果,其中显示未编译(324 毫秒)、完整编译(315 毫秒)、部分编译(312 毫秒)和采用基准配置文件(229 毫秒)情况下的初始显示所用时间。
提示:您还可以将结果作为 JSON 文件检索,以便在 CI 流水线中解析结果。如需了解详情,请参阅在持续集成环境中运行基准测试。
虽然前面的示例显示的是使用 StartupTimingMetric 捕获的应用启动结果,但还有一些其他重要指标值得考虑,例如 FrameTimingMetric。如需详细了解所有类型的指标,请参阅捕获 Macrobenchmark 指标。

完全显示所用时间

前面的示例测量了初始显示所用时间 (TTID),这是指应用生成第一帧所用的时间。不过,这不一定反映您的应用启动直至用户可开始与应用互动之间的时间。完全显示所用时间 (TTFD) 指标在测量和优化拥有完全可用应用状态所需的代码路径方面更为有用。

我们建议您针对 TTID 和 TTFD 进行优化,因为两者都很重要。较短的 TTID 有助于用户看到应用是真的在启动。保持较短的 TTFD 对于帮助确保用户能够快速与应用互动非常重要。

如需了解在应用界面完全绘制后的报告策略,请参阅提高启动时间精确度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值