指标是从基准测试中提取的主要信息类型。它们作为 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
是可跟踪代码块的 ID,在 RecyclerView
中定义。 createViewHolder()
方法的源代码 是如何在您自己的代码中定义可跟踪代码块的示例。
StartupTimingMetric
、TraceSectionMetric
、FrameTimingMetric
和 PowerMetric
将在本文件的后面部分详细介绍。
基准测试结果输出到 Android Studio,如图 1 所示。如果定义了多个指标,则所有指标都会合并到输出中。
StartupTimingMetric
StartupTimingMetric
使用以下值捕获应用启动时间指标
timeToInitialDisplayMs
:从系统接收启动 Intent 到渲染目标Activity
的第一帧所花费的时间。timeToFullDisplayMs
:从系统接收启动 Intent 到应用使用reportFullyDrawn()
方法报告完全绘制所花费的时间。测量在渲染reportFullyDrawn()
调用后(或包含)的第一帧完成后停止。此测量可能在 Android 10(API 级别 29)及更早版本上不可用。
StartupTimingMetric
输出启动迭代的最小值、中位数和最大值。为了评估启动改进,您应该关注中位数,因为它们提供了对典型启动时间的最佳估计。有关影响应用启动时间的因素的更多信息,请参阅 应用启动时间。
FrameTimingMetric
FrameTimingMetric
捕获基准测试(例如滚动或动画)生成的帧的时间信息,并输出以下值
frameOverrunMs
:给定帧超出其截止时间的时间量。正数表示帧丢失且可见卡顿或抖动。负数表示帧比截止时间快多少。注意:此功能仅在 Android 12(API 级别 31)及更高版本上可用。frameDurationCpuMs
:帧在 UI 线程和RenderThread
上的 CPU 上生成所需的时间。
这些测量以 50%、90%、95% 和 99% 百分位数的分布收集。
有关如何识别和改进缓慢帧的更多信息,请参阅 渲染缓慢。
TraceSectionMetric
TraceSectionMetric
捕获与提供的 sectionName
匹配的跟踪段出现的次数及其花费的时间。对于时间,它以毫秒为单位输出最小值、中位数和最大值。跟踪段由函数调用 trace(sectionName)
或 Trace.beginSection(sectionName)
和 Trace.endSection()
(或其异步变体)之间的代码定义。它始终选择在测量期间捕获的跟踪段的第一个实例。默认情况下,它仅输出您软件包中的跟踪段;要包含软件包外部的过程,请设置 targetPackageOnly = false
。
有关跟踪的更多信息,请参阅 系统跟踪概述 和 定义自定义事件。
PowerMetric
PowerMetric
捕获在测试期间提供的 功耗类别 的功耗或能量变化。每个选定的类别都细分为其可衡量的子组件,未选定的类别将添加到“未选择”指标中。
这些指标测量的是系统范围内的功耗,而不是每个应用的功耗,并且仅限于 Pixel 6、Pixel 6 Pro 及更高版本的设备
power<category>Uw
:此类别中测试期间消耗的功率量。energy<category>Uws
:此类别中测试期间每单位时间的能量传输量。
类别包括以下内容
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
对于某些类别(例如 CPU
),可能难以将其他进程完成的工作与您自己的应用完成的工作区分开来。为了最大程度地减少干扰,请删除或限制不必要的应用和帐户。
为您推荐
- 注意:当 JavaScript 关闭时,将显示链接文本
- 创建基线配置文件 {:#creating-profile-rules}
- 编写宏基准测试
- 应用启动分析和优化 {:#app-startup-analysis-optimization}