FrameTimingManager 是一个 API,可捕获应用程序中各个帧期间性能的详细时序数据。您可以使用此类数据对帧进行评估,以了解应用程序未达到性能目标的原因。
如果满足以下条件,请使用 FrameTimingManager:
帧时序不会取代性能分析器中的数据;在对应用程序进行高级性能分析后,请使用 FrameTimingManager 调查特定细节。FrameTimingManager 在记录数据时会降低性能,因此无法准确衡量应用程序的性能。
| 属性 | 描述 | 受支持 | 注释 | | :————— | :—— | :——- | :—————————– | | Windows | DirectX 11 | 是 | | | | DirectX 12 | 是 | | | | OpenGL | 是 | | | | Vulkan | 是 | | | macOS | Metal | 是 | 由于基于图块的延迟渲染 GPU 的行为,可能会报告比总帧时间更长的 GPU 时间测量结果。 | | Linux | OpenGL | 部分支持 | 不支持 GPU 时间测量。 | | | Vulkan | 是 | | | Android | OpenGL ES | 是 | | | | Vulkan | 是 | | | iOS | Metal | 是 | 由于基于图块的延迟渲染 GPU 的行为,可能会报告比总帧时间更长的 GPU 时间测量结果。 | | tvOS | Metal | 是 | 由于基于图块的延迟渲染 GPU 的行为,可能会报告比总帧时间更长的 GPU 时间测量结果。 | | WebGL | WebGL | 部分支持 | 不支持 GPU 时间测量。 |
FrameTimingManager 提供的结果存在四帧延时。这是因为每帧结束时不会立即获得时序结果,因此 FrameTimingManager 会等待获取帧的 CPU 和 GPU 数据。
延时不能保证准确的时序结果,因为 GPU 可能没有任何可用资源来返回结果,或者可能无法正确返回结果。
FrameTimingManger 在某些情况下会变更其生成 FrameTimeComplete 时间戳的方式: