分析微基准测试

默认情况下,微基准测试会提供有关已执行代码的计时和分配信息。如果您想调查所测代码运行缓慢的原因,可以附加 CPU 分析器来运行基准测试。

要选择分析器配置,请添加检测运行器参数androidx.benchmark.profiling.mode,并使用MethodTracingStackSamplingNone参数之一,如下面的代码片段所示。

有关选项的更多信息,请参阅选择记录配置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 秒。

此参数不会捕获分析文件。时间和分配信息仍然会被测量。