开发

OVR 指标工具统计数据定义指南

更新时间: 2024年12月15日
OVR 指标工具支持开发者为 Meta Quest 头戴设备上的应用追踪各项性能统计数据。OVR 指标工具可以为开发者提供应用性能概览,还可以用于预期验证。
使用 OVR 指标工具时,开发者必须选择要追踪的统计数据。使用应用主页上的基本高级按钮即可选择统计数据组合,也可以在统计数据选项卡上手动选择统计数据。
本指南阐述了各项 OVR 指标工具统计数据的定义,并尽可能提供指导和补充信息。统计数据选项卡中按名称罗列各项统计数据及其悬窗缩写。
OVR Metrics Tool overlay with all stats enabled

OVR 指标工具 1.5 版的新增内容

OVR 指标工具 1.5 版推出了以下统计数据。这些统计数据无法通过基本高级按钮启用。
统计数据
描述
边界 GPU 时间
显示边界 GPU 时间,即边界渲染所耗费的 GPU 时间。
CPU 利用率核心 0-7
显示各个 CPU 核心的利用率。在早期的 Quest 设备上,应用程序仅可使用核心 5、6 和 7。调度行为可能因设备代际而异。
应用程序 VSS、RSS 和 Dalvik PSS
内存统计数据,用于更深入地分析内存使用情况。

通过 ovrgpuprofiler 启用的统计数据

以下统计数据无法通过基本按钮或高级按钮启用,需要在已连接的 Shell 中启用 ovrgpuprofiler
统计数据
描述
每帧平均顶点数
显示每帧着色的大致顶点数。请注意,边界和系统悬窗会影响该数据。
每只眼睛平均填充百分比
预估的平均过度绘制量,基于每帧着色片段数除以视觉缓冲区分辨率。100 表示只接触视觉缓冲区的每个像素一次。请注意,边界和系统悬窗会影响该数据。
每个片段平均指示数
显示每个着色片段的平均指示数。
每个顶点平均指示数
显示每个着色顶点的平均指示数
每个片段平均纹理数
显示每个片段的平均纹理数。
片段着色占用时间百分比
显示片段着色所占用的 GPU 时间百分比。
顶点着色占用时间百分比
显示顶点着色所占用的 GPU 时间百分比。
顶点数据获取停滞时钟周期百分比
GPU 无法再请求任何顶点数据的时钟周期百分比。
纹理数据获取停滞时钟周期百分比
着色器处理器无法再请求任何纹理数据的时钟周期百分比。
L1 纹理缺失百分比
纹理请求在 L1 缓存的缺失缓存中所占的百分比。
L2 纹理缺失百分比
纹理请求在 L2 缓存的缺失缓存中所占的百分比。
使用邻近过滤的纹理采样百分比
使用邻近采样方法获取的纹理百分比。
使用线性过滤的纹理采样百分比
使用线性采样方法获取的纹理百分比。
使用各向异性过滤的纹理采样百分比
使用各向异性采样方法获取的纹理百分比。

基本统计数据

本节包含选中基本按钮后会追踪的统计数据。其中包含大多数开发者应追踪的重要性能信息。
统计数据
描述
过时帧数 (STALE)
显示过时帧数。这表示未能按时传送帧而使用前一帧代替的次数。

由于 CPU 和 GPU 并行工作,有时渲染一帧所花的时间会比单个帧的总时长还要长,但 CPU 和 GPU 各自所花的时间都不会超过一帧的时长。因此,应用可能以 72 FPS 的速度运行,但每秒会有 72 个过时帧。在这种情况下,渲染和显示时间之间的延迟会更高,但帧的发布节奏会保持稳定。

当值大于 0 且小于刷新率时,过时帧就会成为问题。此时,有些帧会连续显示两次,而有些帧会被跳过,给用户带来很糟糕的体验。在这种情况下,可以使用额外延迟模式。此功能在 Unity 中默认启用,在 Unreal Engine 中也可能默认启用,它指示异步时间扭曲 (ATW) 一直等待额外的帧,并且不将帧视为过时帧,除非它们在第二帧过后仍未准备好。如果应用的渲染速度很快,便会提前渲染帧,不过呈现出来的效果均自然而流畅。

如要进一步了解过时帧的工作原理,请参阅博文:了解 Meta Quest 的游戏延迟
应用 GPU 时间 (APP T)
显示应用 GPU 时间(单位:μs),即应用渲染一帧所花费的时间。

在优化应用程序时,该值是一个需要密切关注的实用数据。如果显示的时长大于一帧的长度(每秒 72 帧时为 13.88 ms),则表示应用属于 GPU 密集型。如果时长小于一帧的长度,则应用可能是 CPU 密集型。

除了使用此指标来确定应用是否为 GPU 或 CPU 密集型外,在更改着色器、添加纹理、更改网格和进行其他更改时,对其进行监控也很有助益。它有助于您了解 GPU 余量,还能在您使用调试逻辑来打开和关闭特定对象时,帮助您判断这些对象的性能密集程度。
GPU 利用率 (GPU U)
显示 GPU 利用率。如果该值最大为 100%,则应用属于 GPU 密集型。如果该值超过 90%,则可能出现因调度而导致的性能问题。
CPU 利用率 (CPU U)
显示 CPU 利用率。不过,这项指标表示的是性能最差的核心,而且,由于大多数应用都是多线程的,调度程序会在线程可用的时候分配它们,因此应用的主线程可能不会在这项指标中得到体现。
CPU 级别 (CPU L)
GPU 级别 (GPU L)
这两个指标指定应用设置的 GPU 和 GPU 时钟级别。这些级别可以手动设置,但我们建议使用动态时钟节流,如果应用未达到所要求级别的帧率,这些数字就会增加。

如果应用没有达到帧率,检查时钟级可以帮助快速指明性能是否为 CPU 或 GPU 密集型,进而提供可优化的目标区域。例如,如果存在性能问题的应用以 CPU 4 级和 GPU 2 级运行,那么它一定是 CPU 密集型应用,因为它还有可用的 GPU 开销。但如果两个级别都是 4,并且应用存在问题,则此数字就没用了,应该使用其他指标来查找潜在的优化领域,例如过时帧、应用 GPU 时间和 CPU/GPU 利用率。

如需进一步了解 CPU 和 GPU 时钟级别,请参阅电源管理
平均 FPS (FPS)
以每秒帧数为单位显示帧率。性能出色的应用应以显示器的刷新率为目标。如需了解更多信息,请参阅设置显示器刷新率
可用内存 (A MEM)
指示 Android 报告的可用内存(以 MB 为单位)。在 Android 上,内存以某种不透明的方式处理,使得该值仅能用作一般指导。例如,如果应用进入后台,新进入前台的应用和操作系统操作将占用大量内存,即使 Free 报告称还有可用内存,也可能会导致应用崩溃。

该值最大的用途是监视内存分配速度是否比预期快,或者内存是否未按预期释放。

高级统计数据

本节包含选中高级按钮后会追踪的统计数据。选中该按钮后,仍然会追踪所有基本指标。这些指标主要用来验证行为是否符合预期(基于开发过程中所做的选择)。
统计数据
描述
注视点级别
指示固定注视点渲染 (FFR) 强度的级别。该功能可用来渲染分辨率低于中心的眼睛纹理边缘,可降低观看者周边视觉场景的保真度,并减少 GPU 负载。这个数字会直接影响 GPU 性能,在更高级别时,屏幕边缘会出现明显的可见伪影。选择视觉上最能接受的级别来提高所需的性能。

如需进一步了解相关信息和建议,请参阅固定注视点渲染 (FFR)
视觉缓冲区宽度 (EBW)
视觉缓冲区高度 (EBH)
这是应用所渲染纹理的分辨率。分辨率因设备而异。可通过这些统计数据了解您正在测试的设备的实际值。分辨率可直接影响 GPU 渲染时间,像素越多,意味着片段着色器所花费的时间越长。
提前帧数量 (EARLY)
显示提前帧的数量。这表示在需要帧之前传送的帧数。使用额外延迟模式时,可能会出现提前帧。
提前帧数量较少时可以将其忽略,但如果数量一直很高,请确保设置的 CPU 和 GPU 级别不要高于必要水平。如果提前帧的数量与 FPS 相同,建议关闭额外延迟模式,或通过增加分辨率或着色器复杂性来善用余量。
连续过时帧最大帧数
此项指的是连续出现的过时帧的最大数量。当系统准备显示新的一帧但尚未收到它时,就会显示一个旧帧,导致出现一个过时帧。连续出现过时帧会导致明显的卡顿或卡死,严重影响用户体验。OVR 指标工具用于追踪这些指标,以帮助发现和解决可能导致用户眩晕或不适的性能问题。
空间扭曲 FPS
指启用应用程序空间扭曲 (AppSW) 之后的每秒帧数 (FPS) 指标。应用程序空间扭曲技术使得应用程序以显示器刷新率的一半帧率来进行渲染,同时仍然为用户提供全帧率体验。这是通过使用运动矢量和深度缓冲器合成新帧的方式来实现的,此方法可通过以最小的可感知拖影为代价来解锁额外的计算能力,从而大大提高性能。当空间扭曲激活后,会对包含 CPU 和 GPU 在内的多项指标的目标 FPS 进行调整,以适应性能提升。
时间扭曲 GPU 时间 (TW T)
显示异步时间扭曲 GPU 时间(单位:μs,即 1/1000ms),这是异步时间扭曲所花费的渲染时间。这个时间与使用的层数及其复杂性直接相关,等距图层和圆柱体图层在 GPU 上的开销比四边形图层和投影层更高。

ATW 持续时间过长可能会导致播放画面撕裂,因此,该值对于视频应用十分有益。
VrShell + 边界 GPU 时间
指与在 VrShell 环境中的渲染操作相关的 GPU 时间,特别是当系统不运行任何特定应用程序时。此指标是性能分析的一部分,用于确保 GPU 时间保持稳定,不会波动过大(波动较大表明存在性能问题)。边界 GPU 时间是一个不会频繁变化的指标,应预期保持稳定,即便在某些条件下可能保持为零。

其他实用统计数据

除了基本高级按钮追踪的数据之外,本节中的统计数据也可为开发者提供实用的帮助。
统计数据
描述
画面撕裂次数
显示画面撕裂的次数。异步时间扭曲 (ATW) 花费的时间过长并导致画面撕裂时会报告该数据。

除非使用的图层过多,否则 Meta Quest 应用不应出现画面撕裂问题。在使用四边形图层或圆柱体图层来显示用户界面元素时,或显示多重叠加的等距视频图层时,可能会出现这种情况。
扭曲间隔 (SWAP)
显示扭曲间隔,它指示应用在渲染下一帧之前应跳过多少帧。该值几乎总是为 1,如果值为 2 的话,可能会导致应用以一半的帧率进行渲染,这在移动方式为 6DOF 时会让人感到不适。

调试时可能会将该值设置为 2,但在已发布的应用中绝对不能使用该设置,否则用户转头时总会感到明显的不适。
显示器刷新率 (DRR)
显示显示器当前设置的刷新率。如需了解更多信息,请参阅设置显示器刷新率
电池电量 (BAT)
显示剩余电池电量百分比。

其他统计数据

本节介绍的统计数据主要与较早期基于手机的 VR 硬件相关。功率水平和频率统计数据在当前的 Meta Quest 设备上仍具备实用参考价值。
统计数据
描述
传感器温度
显示传感器温度(以摄氏度为单位)。这对基于手机的 VR 开发尤为重要。对于当前头戴设备的温度问题,可使用功率水平来指示温度何时会对头戴设备性能产生影响。
功率水平 (POW L)
指示头戴设备当前的功率水平。报告的功率水平为 0(正常)、1(安全)、2(危险)。随着头戴设备升温,功率水平会自动从“正常”变为“安全”,直至最终变为“危险”。一旦达到“危险”,就会显示过热对话框。

应用程序应监控功率水平,并在进入省电模式后改变其行为,以降低渲染成本。有关该主题的更多信息,请参阅电源管理
CPU 频率 (CPU F)
GPU 频率 (GPU F)
内存频率 (MEM F)
这些指标显示 CPU、GPU 和内存的时钟速度。每当 CPU 级别和 GPU 级别发生变化,CPU 和 GPU 的速度就会随之变化,这让它们可以直接进行调整和更改,从而在监控方面发挥更大的作用。与这些级别相关的时钟速度因 SoC 而异,且其频率无法更改。
电池温度 (B TEM)
显示电池温度(以摄氏度为单位)。这对基于手机的 VR 开发尤为重要。对于当前头戴设备的温度问题,可使用功率水平来指示温度何时会对头戴设备性能产生影响。
当前电池电量 (BAT C)
显示来自电池的电流(以毫安为单位)。开发者应根据 CPU 和 GPU 级别进行优化,而不是试图使用该指标来确定电池的消耗量。
电源电压 (POW V)
指示电源电压(以毫伏为单位)。
电源电流 (POW C)
显示头戴设备的电源电流(以毫安为单位)。开发者应根据 CPU 和 GPU 级别进行优化,而不是试图使用该指标来确定功耗。
左控制器温度 (LC TM)
右控制器温度 (RC TM)
这些指标显示左右控制器的温度。
最大旋转速度 (M ROT)
规定头戴设备旋转的最快速度。

另请参阅