API Trace 可让您在一个帧中查看应用程序进行的所有 API 调用。如果您的应用程序使用了 Direct3D 标记,API Trace 将会使用这些标记来创建一个导航树,以帮助您探索跟踪信息。
API Trace 功能
- 显示时间线,直观地显示帧中进行的每次调用的开始时间和持续时间。
- 显示每个线程在渲染帧时所进行的调用的顺序列表。
- 支持时间线和调用列表之间的一键双向导航。
- 支持多线程应用程序,为每个线程显示独立的 API Trace。
- 支持将 API Trace 数据以 XML 或 TXT 格式保存到磁盘。
- 支持搜索 API Trace 以查找给定字符串
- 与 Frame Debugger 的绘图调用滑块进行双向集成

帧时间线
帧时间线显示在 API Trace 窗口的上半部分。它提供了渲染当前帧所进行的函数调用的可视化表示。时间线顶部是时间网格,显示渲染帧所需的总经过时间(毫秒,1000 毫秒等于 1 秒)。计时从帧开始到最后一个函数调用完成。在时间网格下方,列出了为渲染帧做出贡献的每个应用程序线程。对于每个线程,函数调用会沿时间网格绘制,显示每个调用的开始时间和持续时间。函数调用根据其与管线相关联的部分进行着色。对于使用性能标记或延迟上下文的 Direct3D 应用程序,时间线将在一个行中显示性能标记和命令列表,而由性能标记或命令列表包装的实际调用将显示在正下方的行中。
导航帧时间线
帧时间线支持缩放、导航和展开/折叠,提供了多种查看和分析 API Trace 的方式。
缩放
首次打开时,时间线视图会完全缩小,以便整个帧时间线都显示在时间线中。为了更好地理解帧时间线数据,放大到时间线的特定部分可能很有用。在放大和缩小时,顶部的时间网格会更改以显示当前显示的时间线子部分的的时间戳。
- 手动缩放 – 要手动放大和缩小,请使用位于时间线左侧的垂直滑轨。当前的缩放枢轴点(显示为跨越整个时间线的垂直线)代表了视图将要缩放到的时间线中的点。您可以通过单击时间线中的任何位置来更改缩放枢轴点的位置。您还可以使用鼠标滚轮手动放大和缩小。
- 缩放到特定函数调用 – 要放大到特定函数调用,您可以双击 API Trace 列表中的该函数调用。
- 缩放到指定区域 – 要放大到时间线的特定区域,请按住 Control 键并拖动鼠标以突出显示特定区域。当您释放鼠标按钮时,时间线将放大到突出显示的区域。
- 缩放到特定块 – 要放大到时间线中显示的特定块,请按住键盘上的 Control 键并右键单击一个块。
导航
当时间线被放大时,您可以导航到时间线的不同部分。您可以使用时间线底部的水平滚动条,或者通过单击并拖动鼠标来在可视区域内平移时间线。要快速跳转到时间线中的特定调用,您可以单击 API Trace 列表中的该函数调用。这将把当前的缩放枢轴点移动到所选函数的条形图块,并在必要时平移时间线以将该块滚动到视图中。
展开和折叠时间线树
首次显示时间线时,其树状结构是完全展开的。折叠树状结构的某些部分以限制显示的数据量可能很有用。使用时间线中的树状视图控件来折叠或展开时间线树状结构的某些部分。
查看时间线项详细信息
有几种方法可以查看有关时间线视图中显示项的更多信息。
- 工具提示提示 – 将鼠标悬停在时间线中显示的块上,将出现一个工具提示,提供有关该块的更多详细信息。
- 导航到 API Trace – 单击时间线中的任何函数块,该块对应的函数将在 API Trace 中被选中,其中将显示该特定函数调用的更多详细信息。
帧 API Trace
帧 API Trace 显示在 API Trace 窗口的下半部分。它提供了渲染当前帧所进行的函数调用的列表。为渲染帧做出贡献的每个应用程序线程都在单独的选项卡中列出。每个选项卡都包含该特定线程进行的所有函数调用的列表。
对于每个函数调用,将显示以下信息
- 索引 – 指示函数调用进行的顺序
- 接口 – 调用函数所在的接口或结构
- 调用 – 函数的名称
- 参数 – 传递给函数的参数
- 结果 – 函数调用返回的值
为了帮助识别和区分函数调用,它们会根据其与管线相关联的部分进行着色。
如果您启用 D3D 调试运行时,调试运行时消息也将出现在 API Trace 中,位于生成这些消息的函数调用下方。
- 您可以使用 GPU PerfServer 命令行选项,或在创建设备时添加 D3D10_CREATE_DEVICE_DEBUG 或 D3D11_CREATE_DEVICE_DEBUG 标志来启用调试运行时。
对于失败的 OpenGL 函数,将在 API Trace 中直接位于失败的函数调用下方显示附加的错误信息。
如果应用程序使用了 Direct3D 性能标记或延迟上下文,则“树”列将显示一个树状结构,其中树节点代表性能标记或命令列表。您可以展开树节点以查看由性能标记或命令列表包装的函数调用。
您可以使用 API 列表下方的“查找”控件搜索 API Trace 中的文本。在搜索框中输入要搜索的文本,API Trace 将自动开始搜索该文本。搜索完成后,将显示找到的匹配项数量,并且每个匹配项都会在 API Trace 中高亮显示。您可以通过单击“下一个”按钮或按“Enter”键导航到下一个找到的匹配项。您可以通过单击“上一个”按钮或按键盘上的“Shift-Enter”来导航到上一个找到的匹配项。您还可以指定是否要执行区分大小写的搜索,或者是否要在搜索文本中使用正则表达式。
多线程应用程序

在多线程应用程序中,API Trace 会显示每个线程的计时数据。请参阅下面的截图,并注意时间线中以及每个线程的 API Trace 选项卡中都有一个行。
请注意以下几点
此应用程序如何使用 5 个工作线程来构建命令列表,然后由主线程执行这些命令列表。
主线程如何等待 5 个工作线程构建命令列表,然后按顺序执行这 5 个命令列表。
构成命令列表的调用如何显示在时间线中,位于代表命令列表的绿色块下方。
保存 API Trace 数据
- 可以使用主文件菜单中的“文件”->“另存为”选项来保存 API Trace 数据。
- 可以将其保存为 CSV 文件或 TXT 文件。
- 无法将数据加载回 API Trace 窗口。
与 Frame Debugger 的双向集成
- 当您更改 Frame Debugger 中的选定绘图调用时,API Trace 视图将自动在帧时间线中显示选定的绘图调用,并在帧 API Trace 中选择该绘图调用。
- 当您单击帧时间线中的函数块时,Frame Debugger 将自动选择相应的绘图调用(如果选定的函数块不代表绘图调用,则选择上一个绘图调用)。
- 当您在帧 API Trace 中选择一个绘图调用时,Frame Debugger 将自动将其设为选定的绘图调用。
- 请注意,与 Frame Debugger 的双向集成仅适用于应用程序主线程执行的绘图调用。您可以使用“设置”对话框中的“展平命令列表”选项来使用与其他线程中的绘图调用的双向集成。