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