ovrgpuprofiler 是一款为 Meta Quest 头戴设备设计的性能监控 CLI 工具,可供开发者用于访问一系列实时 GPU 指标并执行渲染阶段追踪。ovrgpuprofiler 包含在 Meta Quest 运行时中,无需手动安装。ovrgpuprofiler 之前,通过 ADB 在连接的 Meta Quest 上打开一个 shell。如果不使用 shell,请在本主题中的所有命令前加上 adb shell <command>。ovrgpuprofiler -m
47 metrics supported:
1 Clocks / Second
2 GPU % Bus Busy
3 % Vertex Fetch Stall
4 % Texture Fetch Stall
5 L1 Texture Cache Miss Per Pixel
6 % Texture L1 Miss
7 % Texture L2 Miss
8 % Stalled on System Memory
9 Pre-clipped Polygons/Second
10 % Prims Trivially Rejected
11 % Prims Clipped
ovrgpuprofiler -m -v 可提供同样的列表,并附带每个指标的详细说明。ovrgpuprofiler -r<metric ID number>
ovrgpuprofiler -r4,控制台将每秒打印一次数据,直到您按下 Ctrl-C 为止。ovrgpuprofiler -r"4,5,6")来同时申请检索多个指标。以下显示了 ovrgpuprofiler -r"4,5,6" 的输出:$ ovrgpuprofiler -r"4,5,6" % Texture Fetch Stall : 2.449 L1 Texture Cache Miss Per Pixel : 0.124 % Texture L1 Miss : 20.338 % Texture Fetch Stall : 2.369 L1 Texture Cache Miss Per Pixel : 0.122 % Texture L1 Miss : 20.130 % Texture Fetch Stall : 2.580 L1 Texture Cache Miss Per Pixel : 0.127 % Texture L1 Miss ...
ovrgpuprofiler 支持在每个图块级别进行渲染阶段 GPU 追踪。与按顺序执行绘制调用的直连模式 GPU 不同,基于图块的渲染器会批处理整个界面的绘制调用。然后,将该界面切分成图块,再按顺序对每个图块进行计算,其中每个图块会执行所有与之相交的绘制调用。ovrgpuprofiler 可以展示追踪期间每个已渲染界面在每个渲染阶段各花费了多少时间。ovrgpuprofiler -e
ovrgpuprofiler -i 显示当前是否已启用详细 GPU 分析模式。使用 ovrgpuprofiler -d 禁用该模式。ovrgpuprofiler 进行分析的应用可能需要在其清单中加入 <uses-permission android:name="android.permission.INTERNET" /> 权限。ovrgpuprofiler -t
-t 参数加上一个数字来指定,以秒为单位。例如,ovrgpuprofiler -t1.2 将执行 1.2 秒的追踪。Surface 1 | 1216x1344 | color 32bit, depth 24bit, stencil 0 bit, MSAA 4 | 60 128x224 bins | 5.08 ms | 130 stages : Binning : 0.623ms Render : 1.877ms StoreColor : 0.309ms Blit : 0.002ms Preempt : 1.286ms
ovrgpuprofiler 会为多视图应用界面的每个切片输出一行数据。这意味着每只眼睛对应一个界面。您需要将两只眼睛对应界面的渲染时长累加,以得出帧渲染总时长。ovrgpuprofiler 会为界面的两个视图,输出一行数据。在 Meta Quest 2 上,多视图界面的分块由两个视图共享。因此,以下输出:135 96x176 bins
135 96x176x2 bins
ovrgpuprofiler 是为每只眼睛输出一行数据(如在 Meta Quest 上),还是为两个视图输出一行数据(如在具有硬件多视图模式的 Meta Quest 2 上)。请参阅运行时版本的发布说明或联系开发者支持团队进行确认。ovrgpuprofiler 还可以在每个表面内按单次绘制调用采样 GPU 指标。这有助于识别哪些绘制调用占用了一帧的 GPU 开销,或比较单个绘制调用的相对开销。ovrgpuprofiler -e 并重新启动目标应用。ovrgpuprofiler -x -m
-v 以获取更详细的描述。与实时指标一样,可用的指标集因设备和运行时版本而异。-x(绘制调用)标记与 -t(追踪)标记结合使用,并传入以逗号分隔的单次绘制指标编号列表用于记录:ovrgpuprofiler -t3 -x="1,2,3,4,12,15,16,17,18,22,27,28,29,38,49,50"
-t3 运行 3 秒的追踪(默认追踪时长为 0.1 秒),-x 参数选择 16 个单次绘制指标编号进行采样。Tracing for 3.0 seconds...
Process com.YourApp has 30 commandbuffers
Frame 1 : Draw 1 Label 0xffffffff
LRZ State: TestEnabled, WriteEnabled <0x03>
Clocks : 58912.000
% Vertex Fetch Stall : 0.061
% Shaders Busy : 39.907
Fragments Shaded : 3.203
Frame 1 : Draw 2 Label 0xffffffff
LRZ State: TestEnabled, WriteEnabled <0x03>
Clocks : 44008.000
% Vertex Fetch Stall : 0.000
...
ovrgpuprofiler -d 禁用详细分析模式。ovrgpuprofiler 可使用以下命令行参数:参数 | 描述 |
-r/--realtime | 每秒打印一次实时指标的值。接受一个可选的指标 ID 列表,这些 ID 以逗号分隔,用于指定需要追踪的指标。 |
-m/--metrics | 打印可用实时指标 ID 及其名称和说明的列表。与 -x 结合使用时,改为列出单次绘制指标目录。 |
-v/--verbose | 为大多数其他命令添加更加详细的信息。 |
-e/--enable-detailed | 启用 GPU 驱动程序的详细分析模式;渲染阶段追踪时需要使用此参数。仅适用于在此模式启动后启动的应用。 |
-d/--disable-detailed | 禁用 GPU 驱动程序的详细分析模式。 |
-i/--is-detailed | 查询 GPU 驱动程序是否处于详细分析模式。 |
-t/--trace | 执行渲染阶段追踪,可选择加上以秒为单位的追踪时长参数。 |
-c/--continuous | 如果您在使用 -t/--trace 的同时指定了此参数,渲染阶段追踪的结果将定期轮询以减少内存压力。 |
-l/--low-overhead | 如果您在使用 -t/--trace 的同时指定了此参数,渲染阶段追踪将在低开销模式下运行,通过省略许多细节来获得更精确的测量结果。 |
-x/--drawcall | 将工具切换至单次绘制模式。与 -m 结合以列出单次绘制指标,或与 -t 结合并通过 = 传入以逗号分隔的指标编号列表来记录单次绘制追踪(例如 -x="1,2,3")。 |