开发
开发
选择平台

使用 OVR 指标工具监控性能

更新时间: 2025年12月5日
OVR 指标工具是监控 Meta Quest 头戴设备性能的解决方案,可提供各种性能指标,包括帧率、温度、GPU 和 CPU 节流值,以及每秒屏幕撕裂次数和每秒失效帧数。除了内置系统指标外,应用开发者还可自定义指标,用于追踪特定于应用的性能或调试信息。各项指标可通过屏幕叠加层进行实时可视化展示,也可以自动记录在 CSV 报告中,供后续分析使用。OVR 指标工具还提供远程设备管理功能,该工具可从 Meta Horizon 商店获取。
有关 OVR 指标工具的更多信息,请参阅 OVR 指标工具 - 最佳实践(适用于非工程师)

概览

OVR 指标工具是一个 Meta Quest 工具,可提供一个运行中应用的性能信息。其中很多性能信息类似于 VrApi Logcat 日志提供的性能信息。OVR 指标工具通过一个设备端应用(而不是命令行)来提供这些信息的访问权限。有关使用 Logcat 的信息,请参阅 Logcat 主题。
OVR 指标工具有两种模式。在报告模式中,该工具会记录一个 VR 会话相关的性能报告,该报告在完成后便可读取。可以轻松将报告数据导出为一个带 PNG 图片的 CSV 文件。在性能 HUD 模式中,该工具会在运行中的应用上方显示一个 HUD 叠加层,该层会提供实时性能图表和信息。性能 HUD 上显示的信息可以根据个人偏好进行定制。
应用开发者可以直接在应用程序中定义和报告自定义指标,提供有针对性的洞察分析,用于开发过程的调试和优化。这些指标可在 HUD 叠加层上进行实时监控,也可以记录在 CSV 文件中,供后续分析使用。通过追踪特定于应用的性能指标和标准系统指标,开发者可以更深入地洞察应用运行状态,从而更快速地识别并解决问题。
OVR 指标工具有很多额外的 GPU 统计数据,要访问这些数据,您需要使用已连接的 Shell 启用 ovrgpuprofiler 分析工具。有关启用该工具的信息,请参阅 ovrgpuprofiler
有关 OVR 指标工具可追踪的所有统计数据的信息,请参阅 OVR 指标工具和 VrApi 统计数据指南

使用 OVR 指标工具收集性能数据

以下各部分介绍如何安装 OVR 指标工具并使用该工具在报告模式性能 HUD 模式下收集应用的性能信息。

安装

请通过 Meta Horizon 商店安装最新版本。或者,在头戴设备上的应用商店中搜索 OVR 指标工具,并下载该应用。

OVR 指标工具用法

“OVR 指标工具”应用可以从头戴设备的应用中启动,也可以通过使用 ADB 将头戴设备连接到电脑,并发出以下命令来启动:
adb shell am start omms://app
OVR 指标工具在头戴设备上启动时,主屏幕显示如下:
OVR Metrics Tool main screen
从主屏幕上,您可以启用和配置该工具的功能。

报告模式

报告模式可记录来自一个 VR 会话的性能数据。报告中的数据可以从头戴设备中检索,或在头戴设备中查看。
如要启用报告模式,请启用标为将所有收集的指标都记录到 csv 文件的切换开关。您还可以通过发出以下 ADB 命令启用报告模式:
adb shell setprop debug.oculus.omms.enableOverlay true
启用后,您必须在统计数据选项卡上或通过使用预设选项按钮之一,来手动选择要收集的指标:
  • 基本包括以下指标:
    • 电池电量
    • CPU 级别
    • GPU 级别
    • FPS 平均值
    • 失效帧数量
    • CPU 利用率
    • GPU 利用率
    • 应用 GPU 时间
  • 高级包括基本中的所有指标以及以下指标:
    • 注视点等级
    • 早期帧数量
    • 视觉缓冲区宽度
    • 视觉缓冲区高度
    • 时间扭曲 GPU 时间
    • VrShell + 边界 GPU 时间
    • 空间扭曲 FPS
    • 最大连续失效帧数
OVR 指标工具可提供各种性能指标,可以在 HUD 上进行显示。用户可以使用“统计数据”选项卡,手动选择在 HUD 叠加层中显示的指标,以查看实时文字读取数据,并使用“图表”选项卡查看这些指标的短期历史趋势。借助该工具,用户可按需定制 HUD 界面,以显示与自身应用或分析需求高度相关的特定性能数据。一些高级 GPU 统计数据需要先通过已连接的 Shell 启用分析工具 ovrgpuprofiler,然后才能被选中。详情请参阅使用 ovrgpuprofiler 分析 GPU
这些统计数据包括:
  • 边界 GPU 时间
  • CPU 利用率核心 0-7
  • 应用程序 VSS、RSS 和 Dalvik PSS
ovrgpuprofiler 指标
  • 每帧平均顶点数
  • 每只眼睛平均填充百分比
  • 每个片段平均指示数
  • 每个顶点平均指示数
  • 每个片段平均纹理数
  • 片段着色占用时间百分比
  • 顶点着色占用时间百分比
  • 顶点数据获取停滞时钟周期百分比
  • 纹理数据获取停滞时钟周期百分比
  • L1 纹理缺失百分比
  • L2 纹理缺失百分比
  • 使用邻近过滤的纹理采样百分比
  • 使用线性过滤的纹理采样百分比
  • 使用各向异性过滤的纹理采样百分比
请参阅通过 ovrgpuprofiler 启用的统计数据,详细了解这些数据点。
选择指标后,运行一个应用并展开会话,以便收集数据。请注意,每次运行应用,系统都会记录数据。会话结束后,打开 OVR 指标工具,点击右上角的下拉菜单,选择查看记录的会话。选择与您的会话对应的条目,查看描述性能的一系列图表。当设备连接到电脑时,可以从 /OVRMonitorMetricsService/CapturedMetrics/ 检索 CSV 文件格式的已记录会话。Meta Quest 开发者中心可用于从文件管理器检索指标。

性能 HUD 模式

性能 HUD 模式会在某个运行中的应用上方显示一个实时图表,其中会展示选定的指标。如要启用性能 HUD 模式,请在主屏幕上开启启用持续叠加(可能需要重启)。您还可以通过发出以下 ADB 命令来启用 HUD:
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_OVERLAY
启用 HUD 后,您可能必须重启头戴设备,HUD 才能显示。HUD 显示内容与下图类似(具体取决于所选的指标):
Performance HUD over app
默认情况下,尽管存在 FPS 图表,HUD 上也不会显示任何指标。您必须在统计数据选项卡上或通过使用报告模式部分中描述的基本高级按钮,手动选择显示的指标。图表选项卡用于配置哪些图表将显示在叠加层上。
按钮下方有更多此叠加层可用的选项。该图表上的统计数据和指标可以切换(默认为启用)。使用 GPU 渲染叠加层选项可切换渲染此叠加层的硬件,并且默认为启用。
将叠加层锁定到顶层默认为启用。禁用此功能会解锁 HUD,使其不可见而置于空间中。但是,此操作无法预测结果,因此不推荐使用。此切换开关下方是 HUD 的缩放和位置选项。
主屏幕底部是丢帧截图选项。如果丢帧数量超过指定时间内的设定限制,启用此选项后,系统将执行截图操作。
HUD 的很多选项可通过以下命令行进行控制:

启用叠加

adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_OVERLAY
此命令可采用以下非必要参数:
--eb headlocked (true|false) // whether the overlay should be locked to view
--ef pitch (-90.0 to 90.0) // the pitch of the overlay (negative is down)
--ef yaw (-180.0 to 180.0) // the yaw of the overlay (negative is left)
--ei scale (1, 2, or 3) // the scale of the overlay
--ef distance (0.1+) // the distance the overlay appears (headlocked only)

禁用叠加

adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_OVERLAY

启用/禁用所有图表或统计数据

adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_GRAPH // enable all graphs
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_STATS // enable all stats
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_GRAPH // disable all graphs
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_STATS // disable all stats

启用/禁用单个图表或统计数据

adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_GRAPH --es stat <stat> // add graph for <stat> to overlay
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_STAT --es stat <stat> // add <stat> to overlay
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_GRAPH --es stat <stat> // disable graph for <stat>
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_STATS --es stat <stat> // remove <stat> from overlay
下方列出了 <stat> 的有效值。OVR 指标工具和 VrApi 统计数据指南中介绍了各指标所表示的统计数据。
"available_memory_MB",
"app_pss_MB",
"battery_level_percentage",
"battery_temperature_celcius",
"battery_current_now_milliamps",
"sensor_temperature_celcius",
"power_current",
"power_level_state",
"power_voltage",
"power_wattage",
"cpu_level",
"gpu_level",
"cpu_frequency_MHz",
"gpu_frequency_MHz",
"mem_frequency_MHz",
"minimum_vsyncs",
"extra_latency_mode",
"average_frame_rate",
"display_refresh_rate",
"average_prediction_milliseconds",
"screen_tear_count",
"early_frame_count",
"stale_frame_count",
"maximum_rotational_speed_degrees_per_second",
"foveation_level",
"eye_buffer_width",
"eye_buffer_height",
"app_gpu_time_microseconds",
"timewarp_gpu_time_microseconds",
"guardian_gpu_time_microseconds",
"cpu_utilization_percentage",
"cpu_utilization_percentage_core0",
"cpu_utilization_percentage_core1",
"cpu_utilization_percentage_core2",
"cpu_utilization_percentage_core3",
"cpu_utilization_percentage_core4",
"cpu_utilization_percentage_core5",
"cpu_utilization_percentage_core6",
"cpu_utilization_percentage_core7",
"gpu_utilization_percentage",
"spacewarp_motion_vector_type",
"spacewarped_frames_per_second",
"app_vss_MB",
"app_rss_MB",
"app_dalvik_pss_MB",
"app_private_dirty_MB",
"app_private_clean_MB",
"app_uss_MB",
"stale_frames_consecutive",
"avg_vertices_per_frame",
"avg_fill_percentage",
"avg_inst_per_frag",
"avg_inst_per_vert",
"avg_textures_per_frag",
"percent_time_shading_frags",
"percent_time_shading_verts",
"percent_time_compute",
"percent_vertex_fetch_stall",
"percent_texture_fetch_stall",
"percent_texture_l1_miss",
"percent_texture_l2_miss",
"percent_texture_nearest_filtered",
"percent_texture_linear_filtered",
"percent_texture_anisotropic_filtered",
"vrshell_average_frame_rate",
"vrshell_gpu_time_microseconds",
"vrshell_and_guardian_gpu_time_microseconds"

更多 adb 配置选项

adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_CSV // records all metrics to CSV files in /sdcard/OVRMontorMetricsService/CapturedMetrics/
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_CSV // disables writing metrics to disk
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.ENABLE_DROPPED_FRAME_SCREENSHOT --ei count <count> --ei time <time> // enables functionality that will take a screenshot if <count> frames are missed within a window of <time>
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.DISABLE_DROPPED_FRAME_SCREENSHOT // disables automatic screenshot functionality
adb shell am broadcast -n com.oculus.ovrmonitormetricsservice/.SettingsBroadcastReceiver -a com.oculus.ovrmonitormetricsservice.LOG_STATE // prints a json blob to logcat with the current configuration state of OVR Metrics Tool, useful for automated tooling

Unity 专用 OVR 指标工具包

该 OVR 指标工具包具备将 OVR 指标数据集成到您应用程序的功能,并允许您的应用程序将数据添加到 OVR 指标工具的报告和叠加层中。

下载工具包

  • 此页面下载工具包。
  • 从下载的工具包中提取 Unity/OVRMetricsToolSDK.unitypackage 文件。
  • 在 Unity 中,前往 Assets(素材)> Import Package(导入包)> Custom Package(自定义包),导入包。

访问指标数据

指标数据可以 OVRMetricsToolSDK.MetricsSnapshot 的结构形式来访问,其中包含时间戳和上面列出的 <stat> 的所有值的字段。
以下片段展示了在您的 Unity 应用中显示 OVR 指标数据的一种可行方法:
    void Update()
    {
        var metrics = OVRMetricsToolSDK.Instance.GetLatestMetricsSnapshot();
        GetComponent<TMP_Text>().text = metrics?.cpu_utilization_percentage.ToString() ?? "";
    }

附加 CSV 调试字符串

AppendCSVDebugString 用于将自定义开发者数据附加到选择“记录到 CSV”选项时生成的 CSV 中。调试数据将放在该 CSV 文件的最后一列。如果数据输入的频率高于 1 Hz,数据将放在该 CSV 文件的新行中,指标列为空。建议将其用于标记场景切换,以帮助分析 CSV 文件。
可以通过调用以下方法来访问该方法:
OVRMetricsToolSDK.Instance.AppendCsvDebugString(debugString);

设置叠加层调试字符串

SetOverlayDebugString 用于在 OVR 指标工具叠加层上显示自定义信息。如要使这些数据可见,请确保启用显示调试数据。数据将显示在叠加层的底部。叠加层调试字符串每帧可更新一次,而不会保持不变。默认情况下,叠加层调试字符串为白色,但可以通过在该字符串中加入 <color=#{hex value}>...</color> 标签,来自定义颜色。
以下方法用于在原生移动 SDK 中设置此字符串:
OVRMetricsToolSDK.Instance.SetOverlayDebugString(debugString);

定义和提交应用指标

自定义指标以追踪特定于应用的数据,如玩家生命值、敌人数量,或任何游戏特定的性能指标。在初始化期间调用一次此方法,通常在 Start() 中执行:
void Start()
{
    // Player Health Metric
    OVRMetricsToolSDK.Instance.DefineAppMetric(
        name: "player_health",
        displayName: "Player Health",
        group: "Player",
        rangeMin: 0,
        rangeMax: 100,
        graphMin: 0,
        graphMax: 100,
        redPercent: 0.2f,
        greenPercent: 0.7f,
        showGraph: true,
        showStat: true
    );

    // Active Enemies Metric
    OVRMetricsToolSDK.Instance.DefineAppMetric(
        name: "active_enemies",
        displayName: "Active Enemies",
        group: "Gameplay",
        rangeMin: 0,
        rangeMax: 50,
        graphMin: 0,
        graphMax: 50,
        redPercent: 0.8f,
        greenPercent: 0.5f,
        showGraph: true,
        showStat: true
    );
}
指标参数:
  • name:指标的唯一标识符
  • DisplayName:在 OVR 指标工具中显示的直观易懂的名称
  • group:用于归类指标的类别(例如“玩家”、“游戏”)
  • rangeMin/rangeMax:指标的有效值范围
  • graphMin/graphMax:图表显示的范围
  • redPercent:红色警告指示的阈值(0.0 至 1.0)
  • greenPercent:绿色指示的阈值 (0.0 到 1.0)
  • showGraph:以图表视图显示指标
  • showStat:以文字统计信息显示指标
自定义指标后,定期更新指标(通常在 Update() 或数值发生变化时):
void Update()
{
    // Update metrics with current values
    OVRMetricsToolSDK.Instance.UpdateAppMetric("player_health", currentHealth);
    OVRMetricsToolSDK.Instance.UpdateAppMetric("active_enemies", enemyCount);
}
最佳实践:若数值未发生变化,请勿每帧提交指标数据。仅在必要时执行更新操作,以减少性能损耗。

核心指标报告

OVR 指标工具中的核心指标报告组件可以自动追踪 Unity 内置指标并使其可视化。该功能可对关键 Unity 性能数据(包括内存使用情况和渲染统计数据)进行实时监控,助力开发者在开发阶段更轻松地识别性能瓶颈。
要在 Unity 项目中启用核心指标报告功能,请执行以下操作:
  1. 在场景层级结构中选择 GameObject 相机装备
  2. 在 Inspector(检查器)中,点击 Add Component(添加组件),然后搜索 OVR Metrics Manager(OVR 指标管理工具)。
  3. 添加后,组件用户界面会提供配置选项,用于配置要监控的指标:
    • 内存指标:追踪内存分配情况和使用模式
    • 渲染指标:监控渲染性能数据
针对每个指标分类,您可选择对应的可视化格式:
  • 统计数据:在叠加层中以数字文字值的形式显示指标
  • 图表:以实时图表的形式显示指标,展示其随着时间变化的趋势
OVR Metrics Manager component in Unity Editor
这些 Unity 指标可与 OVR 指标工具的叠加层及 CSV 记录功能无缝集成,并与系统级性能数据并列显示。该统一视图支持将 Unity 特定指标与设备性能指标进行关联,以实现全方位的性能分析。
Core Metrics displayed in OVR Metrics Tool overlay

另请参阅