分析微基准测试

默认情况下,微基准测试会为您提供有关执行代码的计时和分配信息。如果您想调查测量的代码运行缓慢的原因,则可以附加 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

当您尝试优化代码时,方法跟踪很有用,因为它可以帮助您识别运行时间比其他方法更长的方法。然后,您可以专注于优化对性能影响最大的方法。

分析在代码测量之后依次发生,因此您的测试会输出准确的计时和分析结果。

StackSampling

样本跟踪还可以帮助识别代价高昂的方法,而无需方法跟踪的性能开销。但是,如果您的应用在捕获调用堆栈后进入方法,并且该方法在下次捕获之前退出,则不会记录该方法调用。要正确跟踪生命周期较短的方法,请使用方法跟踪而不是样本跟踪。

使用堆栈采样,基准测试会在预热完成后对调用堆栈进行采样。您可以使用检测参数控制采样频率采样持续时间

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

您可以通过添加另一个检测参数来配置此性能分析模式。

  • androidx.benchmark.profiling.sampleFrequency

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

    • 基准测试运行的持续时间。
    • 参数类型:整数
    • 默认为 5 秒。

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