默认情况下,微基准会提供有关已执行代码的计时和分配信息。如果您想调查为什么测量代码运行缓慢,请检查方法跟踪(在 支持的操作系统版本上默认捕获)或选择其他性能分析配置。
要选择分析器配置,请添加检测运行器参数 androidx.benchmark.profiling.mode
,并将其设置为 MethodTracing
(默认)、StackSampling
或 None
参数之一,如以下代码段所示。
有关这些选项的更多信息,请参阅记录 Java/Kotlin 方法。MethodTracing
等同于该文档中定义的跟踪,而 StackSampling
等同于采样。
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 中检查性能分析结果,请在微基准结果中选择“方法跟踪”或“堆栈采样跟踪”链接。
方法跟踪
方法跟踪在您尝试优化代码时非常有用,因为它可以帮助您识别运行时间比其他方法长的方法。然后,您可以专注于优化对性能影响最大的方法。
性能分析在代码测量之后按顺序进行,因此您的测试会输出准确的计时和性能分析结果。
方法跟踪默认处于开启状态。
堆栈采样
采样跟踪也可以帮助识别开销大的方法,而不会产生方法跟踪的性能开销。但是,如果您的应用在捕获调用堆栈后进入某个方法,并且在该方法在下次捕获之前退出,则不会记录该方法调用。要正确跟踪生命周期短的方法,请使用方法跟踪而非采样跟踪。
通过堆栈采样,基准会在预热完成后对调用堆栈进行采样。您可以使用检测参数控制采样行为,例如采样频率和采样持续时间。
在 Android 10 (API 29) 及更高版本上,堆栈采样使用 Simpleperf 对应用调用堆栈进行采样,包括 C++ 代码。在 Android 9 (API 28) 及更低版本上,它使用 Debug.startMethodTracingSampling
捕获堆栈样本。
您可以通过添加其他检测参数来配置此性能分析模式
androidx.benchmark.profiling.sampleFrequency
- 每秒要捕获的堆栈样本数量。
- 参数类型:整数
- 默认为每秒 1000 个样本。
androidx.benchmark.profiling.sampleDurationSeconds
- 基准运行持续时间。
- 参数类型:整数
- 默认为 5 秒。
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- 在可能导致 ANR 时跳过方法跟踪。您应该在 CI 运行中保持此设置启用,因为 ANR 可能会在长时间的 CI 运行期间导致问题。
- 参数类型:布尔值
- 默认为
true
无
此参数不捕获性能分析文件。计时和分配信息仍将测量。
推荐内容
- 注意:当 JavaScript 关闭时,会显示链接文本
- 微基准检测参数
- 在持续集成中运行基准