指标是从基准测试中提取的主要信息类型。它们作为 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 所示。如果定义了多个指标,则所有指标都将组合到输出中。
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 上生成所花费的时间。
这些测量以 50th、90th、95th 和 99th 百分位数的分布形式收集。
有关如何识别和改进缓慢帧的更多信息,请参阅 缓慢渲染。
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}