使用 GPU Systrace 进行渲染阶段追踪(停用)
更新时间: 2026年4月17日
GPU Systrace Deprecation
截至 2024 年 12 月 2 日,所有 GPU Systrace 功能不再提供官方支持。等效功能已迁移至 Meta Quest 开发者中心的 Perfetto 集成中。 Systrace 是一个 Android SDK 追踪工具,经修改后可为那些在 Meta Quest 头戴设备上运行的应用提供低级别 GPU 管线数据。该数据包含管线渲染阶段的信息和每个阶段的时序数据。启用 GPU Systrace 功能后,可以从命令行或 Android 设备显示器执行。启用 GPU Systrace 所需的文件可在我们的
下载页面上找到。
GPU Systrace 支持在每个图块级别进行渲染阶段 GPU 追踪。与按顺序执行绘制调用的直接模式 GPU 不同,基于图块的渲染器会为某个完整界面批量执行绘制调用,然后将该界面切分成图块,再按顺序对每个图块进行计算,其中每个图块会执行所有与之相交的绘制调用。GPU Systrace 可以展示追踪期间每个已渲染界面在每个渲染阶段各花费了多少时间。
GPU Systrace 使用的是 Android SDK 自带的 Systrace 安装,位于
<ANDROID_SDK_DIR>/platform-tools/systrace/catapult/systrace/systrace 文件夹中。要使用 GPU Systrace,请
从我们的下载页面下载 GPU Systrace 包,将其中包含的文件放在
<ANDROID_SDK_DIR>/platform-tools/systrace/catapult/systrace/systrace 文件夹中,替换该文件夹中已有的文件(如有)。
使用之前,GPU Systrace 需要执行一个额外步骤,在 Meta Quest 上启用详细分析模式。与 Meta Quest 建立 ADB 连接,然后在命令提示下运行以下命令,为 GPU 分析做好准备:
adb shell ovrgpuprofiler -e
在启动待追踪的应用之前,必须先启用详细分析模式。
使用 GPU Systrace 的应用,其清单中必须具有 <uses-permission android:name="android.permission.INTERNET" /> 权限。
启用详细分析模式后,可以从命令行或 Android 设备显示器执行渲染阶段追踪。
遵循以下步骤,从命令行执行渲染阶段追踪:
注意:Systrace 是一款已停用的工具,仅兼容 Python 2.7。
- 在
<ANDROID_SDK_DIR>/platform-tools/systrace 打开命令行。 - 输入以下命令并找到您的应用名称:
adb shell pm list packages
- 在 Meta Quest 上启动目标应用,运行该命令,开始捕捉:
python2 systrace.py --app="<app name>" app renderstage
新的 renderstage 类别会发起 GPU 追踪。
- 按回车可结束追踪。
包含追踪的输出文件将位于 <ANDROID_SDK_DIR>/platform-tools/systrace/trace.html。
注意:Android 设备显示器 (
monitor.bat) 已从 26.1.1 版本(2017 年发布)的 Android SDK 工具中移除。如果您安装了更新版本的 Android SDK,请改用
命令行方法。
遵循以下步骤可利用 Android 设备显示器来执行渲染阶段追踪:
- 在
<ANDROID_SDK_DIR>/tools/monitor.bat 启动 Android 设备显示器。 - 如果尚未选中,点击 DDMS。
- 在设备列表中找到已连接的 Meta Quest,选择要在该设备上追踪的应用。
- 点击设备列表上方的 Systrace 图标。
- 系统会弹出一个对话框。在高级选项中,选择 GPU RenderStage。

- 点击确定以开始追踪。
包含追踪的输出文件将位于对话框中所选择的位置。
在 Google Chrome 中打开输出文件,您会看到类似下图的内容:
红色方块表示缩放开关的位置。启用缩放开关后,您可以按住鼠标左键并拖动鼠标来放大内容。
红色方块表示平移开关的位置。启用平移开关后,您可以按住鼠标左键来移动视图。
查看 GPU 时间线。平移找到一个界面并加以放大,直到看见它下方界面的渲染阶段为止。您可以点击该界面及其渲染阶段,在屏幕底部查看更详细的信息。追踪顶部的流事件、流程和选项按钮提供各种不同方式,可筛选和突出显示流和数据。
查看追踪时,各种颜色表示的是渲染阶段:
- 黄色 - 分块 - Meta Quest 的 GPU 使用图块架构,意味着帧的所有绘制调用都在多个阶段执行。第一个阶段是分块阶段,在该阶段所有绘制调用的三角形顶点位置都将进行计算并分配到与绘制界面分区对应的分块中。
- 浅绿色 - 渲染 - 这是从分块开始的绘制调用的第二个阶段。此阶段的一个部分代表一个分块所有顶点和片段操作的总成本。顶点着色器的简化版会在分块期间执行,以确定三角形的位置。在这个阶段,顶点着色器的完整版会重新执行,以计算片段着色器所使用的插值。
- 红色 - 存储色彩 - 在执行完一完整分块的像素和片段操作后,系统会将计算出的颜色值从快速内存(专用于该分块渲染操作的内存)复制到慢速内存。
- 橙色 - 位块传输 - 代表慢速内存之间的复制。这可以在多种操作中发生,例如在生成多级渐远纹理时以及在不渲染任何内容的情况下清除界面时。
- 灰色 - 抢占- 合成器是一个操作系统级别的服务,会定期执行,将应用程序提交的图像呈现到屏幕上。为了按正确的节奏呈现图像,GPU 会抢占应用程序的工作负载,以便合成器能及时完成工作。
以下渲染阶段不太常见:
- 淡紫色 - 加载色彩 - 将颜色数据从慢速内存加载到快速内存。此阶段发生的场景可能是系统在不清除某个界面的情况下,开始将图像渲染到该界面。
- 深紫色 - 加载深度模版 - 与加载色彩类似,它能将深度/模版缓冲区的内容加载到高性能内存中,促进深度/模版操作。如果开始渲染时附有深度缓冲区,但却没有清除深度缓冲区,就会发生这种情况。
- 深绿色 - 存储模版深度 - 与存储色彩类似,它会将计算得出的深度/模版值从快速内存移动到慢速内存。但由于合成器不需要这些信息,所以信息会被弃用,不会存储到慢速内存中。
点击个别条片可查看详细信息。
以下信息可用:
- surfaceId - 内部界面标识符
- width - 界面宽度
- height - 界面高度
- colorBPP - 每像素颜色位数
- depthBPP - 每像素深度位数
- stencilBPP - 每像素模版位数
- MSAA - 界面的 MSAA 级别
- MRT - 表示多个渲染目标
- numberOfBins - 该界面的总分块数量
- binWidth - 一个分块的宽度(像素)
- binHeight - 一个分块的高度(像素)
- renderMode - 表示渲染模式可以是以下值之一:
- Direct - 直接渲染到系统内存
- HwVizBinning - 使用可见性投射分块渲染到图块内存
- SwBinning - 使用可见性通道分块渲染到图块内存
- HwVizDirect - 使用可见性投射直接渲染到系统内存
- colorAttributes、depthAttributes、stencilAttributes - 属性标记
- newFrameSurface - 作为该界面使用的第一帧时不得为零
- contextId - 与该界面相关联的环境标识符
- processName - 创建该界面的流程
- startTime、endTime - 开始/结束时间戳,以微秒计算
- numSurfaceStages - 已执行的渲染阶段数量
- numRenderedBins - 绘制的分块数量由于分块合并的原因,该数值可能与 numberOfBins 不同
以下信息可用:
- topLeftX、topLeftY - 分块的左上角
- numBinX、numBinY - 已合并到该个别分块的分块数量
- numFovScaleFactor - 此分块的注视点缩放因子数量
- fovScaleFactorXN、fovScaleFactorYN - 与一个分块相关联的 X/Y 注视点缩放因子
以下信息可用:
- surfaceId - 该渲染阶段所属于的界面
- stageType - 渲染阶段类型
- startTime、endTime - 该渲染阶段的开始/结束时间戳,以微秒计算
- binIndex - 指该渲染阶段工作时所处的分块