指标是从基准中提取的主要信息类型。它们作为 List
传递给 measureRepeated
函数,让您可以一次指定多个测量指标。基准的运行至少需要一种指标类型。
以下代码段捕获帧计时和自定义跟踪部分指标
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
在此示例中,RV CreateView
和 RV OnBindView
是在 RecyclerView
中定义的、可跟踪的代码块的 ID。 createViewHolder()
方法的源代码是一个示例,说明了如何在您自己的代码中定义可跟踪的代码块。
StartupTimingMetric
、TraceSectionMetric
、FrameTimingMetric
和 PowerMetric
,将在本文档后面详细介绍。
基准测试结果将输出到 Android Studio,如图 1 所示。如果定义了多个指标,则所有指标都将组合在输出中。

TraceSectionMetric
和 FrameTimingMetric
的结果。StartupTimingMetric
StartupTimingMetric
捕获应用启动计时指标,包含以下值
timeToInitialDisplayMs
:从系统接收启动意图到渲染目标Activity
的第一帧所用的时间。timeToFullDisplayMs
:从系统接收启动意图到应用使用reportFullyDrawn()
方法报告完全绘制所用的时间。测量在渲染reportFullyDrawn()
调用之后或包含该调用的第一帧完成后停止。此测量结果可能在 Android 10 (API 级别 29) 及更早版本上不可用。
StartupTimingMetric
输出启动迭代的最小值、中位数和最大值。为了评估启动改进,您应该关注中位数,因为它们提供了典型启动时间的最佳估计。有关导致应用启动时间的更多信息,请参阅应用启动时间。

StartupTimingMetric
结果。FrameTimingMetric
FrameTimingMetric
捕获由基准(例如滚动或动画)生成的帧的计时信息,并输出以下值
frameOverrunMs
:给定帧超出其截止时间的时间量。正数表示丢帧以及可见的卡顿或停顿。负数表示帧比截止时间快多少。注意:这仅在 Android 12 (API 级别 31) 及更高版本上可用。frameDurationCpuMs
:帧在 CPU 上(包括 UI 线程和RenderThread
)生成所需的时间。
这些测量结果按第 50、90、95 和 99 百分位数进行分布收集。
有关如何识别和改进慢帧的更多信息,请参阅渲染缓慢。

FrameTimingMetric
结果。TraceSectionMetric
TraceSectionMetric
捕获与所提供 sectionName
匹配的跟踪部分发生的次数及其所需时间。对于时间,它输出以毫秒为单位的最小值、中位数和最大值。跟踪部分由函数调用 trace(sectionName)
或 Trace.beginSection(sectionName)
和 Trace.endSection()
之间的代码或其异步变体定义。它总是选择在测量期间捕获的跟踪部分的第一个实例。默认情况下,它只输出您包中的跟踪部分;要包含您包之外的进程,请设置 targetPackageOnly = false
。

TraceSectionMetric
结果。PowerMetric
PowerMetric
捕获测试期间提供的电量类别的电量或能耗变化。每个选定的类别都分解为其可测量的子组件,未选定的类别将添加到“未选择”指标中。
这些指标衡量的是系统范围内的消耗,而不是每个应用的消耗,并且仅限于 Pixel 6、Pixel 6 Pro 及更高版本设备
power<category>Uw
:此类别中在测试期间消耗的电量。energy<category>Uws
:此类别中在测试期间每单位时间传输的能量。
类别包括以下内容
CPU
显示
GPU
GPS
内存
机器学习
网络
未分类
对于某些类别,例如 CPU
,可能很难将其他进程完成的工作与您自己的应用完成的工作区分开。为了最大程度地减少干扰,请移除或限制不必要的应用和帐号。

PowerMetric
结果。为您推荐
- 注意:当 JavaScript 关闭时,会显示链接文本
- 创建基准配置文件 {:#creating-profile-rules}
- 编写 Macrobenchmark
- 应用启动分析与优化 {:#app-startup-analysis-optimization}