默认情况下,微基准测试会提供有关已执行代码的计时和分配信息。如果您想调查所测代码运行缓慢的原因,可以附加 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 分析器中检查分析结果,请选择**文件** > **打开**。要了解有关读取和理解跟踪的更多信息,请参阅检查跟踪。
MethodTracing
方法追踪在优化代码时非常有用,因为它可以帮助你识别运行时间比其他方法长得多的方法。然后,你可以专注于优化对性能影响最大的方法。
分析在代码测量之后顺序进行,因此你的测试结果既包含准确的时间信息,也包含分析结果。
堆栈采样
样本追踪也可以帮助识别代价高昂的方法,而不会产生方法追踪的性能开销。但是,如果你的应用在捕获调用堆栈后进入一个方法,并且该方法在下次捕获之前退出,则不会记录该方法调用。为了正确跟踪生命周期较短的方法,请使用方法追踪而不是样本追踪。
使用堆栈采样,基准测试会在预热完成后对调用堆栈进行采样。你可以使用检测参数来控制采样频率和采样持续时间。
在 Android 10(API 29)及更高版本上,堆栈采样使用Simpleperf来采样应用调用堆栈,包括 C++ 代码。在 Android 9(API 28)及更低版本上,它使用Debug.startMethodTracingSampling
来捕获堆栈样本。
你可以通过添加另一个检测参数来配置此分析模式。
androidx.benchmark.profiling.sampleFrequency
- 每秒捕获的堆栈样本数量。
- 参数类型:整数
- 默认为每秒 1000 个样本。
androidx.benchmark.profiling.sampleDurationSeconds
- 基准测试运行的持续时间。
- 参数类型:整数
- 默认为 5 秒。
无
此参数不会捕获分析文件。时间和分配信息仍然会被测量。
推荐给你
- 注意:当 JavaScript 关闭时显示链接文本
- 微基准检测参数
- 在持续集成中运行基准测试