ovrgpuprofiler is a performance monitoring CLI tool for Meta Quest headsets that developers can use to access a range of real-time GPU metrics and perform render stage traces. ovrgpuprofiler is included with the Meta Quest runtime and does not need to be manually installed.ovrgpuprofiler. If not using a shell, precede all commands in this topic with 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 provides the same list with more verbose descriptions for each metric.ovrgpuprofiler -r<metric ID number>
ovrgpuprofiler -r4 and the console prints data every second until you press Ctrl-C.ovrgpuprofiler -r"4,5,6". The following shows output from 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 supports render stage GPU tracing on a tile-per-tile level. Unlike direct-mode GPUs, which execute draw calls sequentially, tile-based renderers batch draw calls for an entire surface. That surface is then split into tiles that are computed sequentially, where each tile executes all the draw calls that touched that tile. ovrgpuprofiler can tell you how much time was spent in each rendering stage for each surface rendered during a trace’s duration.ovrgpuprofiler -e
ovrgpuprofiler -i shows whether detailed GPU profiling mode is currently enabled. Use ovrgpuprofiler -d to disable it.ovrgpuprofiler may require the <uses-permission android:name="android.permission.INTERNET" /> permission in their manifest.ovrgpuprofiler -t
-t argument. For example, ovrgpuprofiler -t1.2 would run a trace for 1.2 seconds.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 outputs one surface line per slice for multiview apps. This means that there is one surface for each eye. You must add the render times of two eye surfaces for the total frame time.ovrgpuprofiler outputs one surface line for both views of the surface, due to how the Adreno 650v3 GPU processes multiview commands (Hardware Multiview). On Meta Quest 2, bins of multiview surfaces are shared between both views. Therefore, the following output:135 96x176 bins
135 96x176x2 bins
ovrgpuprofiler outputs one surface line per eye (as on Meta Quest) or one surface line for both views (as on Meta Quest 2 with Hardware Multiview) has not been verified for these devices. Refer to the release notes for your runtime version or contact developer support for confirmation.ovrgpuprofiler:Argument | Description |
-r/--realtime | Prints the value of the real-time metrics every second. Accepts an optional comma-separated list of metrics IDs to track. |
-m/--metrics | Prints the list of available real-time metrics IDs, their name, and their description. |
-v/--verbose | Adds more detailed information to most other commands. |
-e/--enable-detailed | Enables detailed profiling mode on the GPU driver; required for render stage tracing. Only applies to applications started after this mode is started. |
-d/--disable-detailed | Disables detailed profiling mode on the GPU driver. |
-i/--is-detailed | Queries if the GPU driver is in detailed profiling mode. |
-t/--trace | Executes a render stage trace, with an optional trace length as argument in seconds. |
-c/--continuous | If you specify this along with -t/--trace, the results of the render stage trace are polled periodically to reduce memory pressure. |
-l/--low-overhead | If you specify this along with -t/--trace, the render stage trace is performed in low-overhead mode, which omits many details in exchange for a more accurate measurement. |