Android NDK开发详解之调试和性能分析的对 Microbenchmark 进行性能分析

Android NDK开发详解之调试和性能分析的对 Microbenchmark 进行性能分析

默认情况下,Microbenchmark 可为您提供有关已执行代码的时间和分配情况的信息。如果您想调查所测量的代码运行缓慢的原因,可以在启用 CPU 性能分析器的情况下运行基准测试。

如需选择性能分析器配置,请添加插桩测试运行程序参数 androidx.benchmark.profiling.mode,并指定 MethodTracing、StackSampling 或 None 参数之一,如以下代码段所示。

如需详细了解这些选项,请参阅选择记录配置。 MethodTracing 相当于“跟踪 Java 方法”,StackSampling 相当于“采样 Java 方法”,如该文档中所定义。
Groovy

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'
    }
}

Kotlin

android {
defaultConfig {
// must be one of: ‘None’, ‘StackSampling’, or ‘MethodTracing’
testInstrumentationRunnerArguments[“androidx.benchmark.profiling.mode”]= ‘StackSampling’
}
}

当您对基准测试进行性能分析后,系统会将输出 .trace 文件连同 JSON 结果一起复制到主机的目录下。如需在 Android Studio 的 CPU 性能分析器中检查性能分析结果,请依次选择 File > Open。如需详细了解如何读取和理解轨迹,请参阅检查轨迹。
注意:Microbenchmark 库会自动捕获系统跟踪记录,但会停用自定义跟踪部分(即忽略对 Trace.beginSection and endSection 的调用),以防止跟踪开销的干扰。

MethodTracing

当您尝试优化代码时,方法轨迹非常有用,因为它可帮助您找出运行时间比其他方法更长的方法。这样,您就可以专注于优化对性能影响最大的方法。

对于方法轨迹,基准测试会在捕获方法轨迹之前进行预热,并记录基准测试调用的每种方法。捕获每种方法进入和退出操作的开销会显著影响性能结果,因为启用方法轨迹后虚拟机运行速度会减慢。因此,您应该以相对而非绝对的方式解读结果。例如,关注某次运行的速度比另一次运行是快还是慢,而非其绝对时间。

StackSampling

此外,样本轨迹还有助于找出开销高昂的方法,而不会产生方法轨迹的性能开销。但是,如果您的应用在捕获调用堆栈后进入一个方法,并且该方法在下次捕获前退出,则系统不会记录该方法调用。为了正确跟踪生命周期较短的方法,请使用方法轨迹而不是样本轨迹。

对于堆栈采样,基准测试会在预热完成后对调用堆栈进行采样。您可以使用插桩参数控制采样频率和采样时长。

在 Android 10 (API 29) 及更高版本中,堆栈采样使用 Simpleperf 对应用调用堆栈(包括 C++ 代码)进行采样。在 Android 9 (API 28) 及更低版本中,它使用 Debug.startMethodTracingSampling 来捕获堆栈样本。

您可以通过添加其他插桩参数来配置此性能分析模式:

androidx.benchmark.profiling.sampleFrequency
    每秒要捕获的堆栈样本数。
    参数类型:整数
    默认为每秒 1000 个样本。

androidx.benchmark.profiling.sampleDurationSeconds
    基准测试的运行时长。
    参数类型:整数
    默认为 5 秒。

None

此参数不会捕获性能分析文件,但仍然会测量有关时间和分配情况的信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五一编程

程序之路有我与你同行

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

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

打赏作者

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

抵扣说明:

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

余额充值