You can use the FrameTimingManager class to capture high level timing data about individual frame performance in an application. You can then use this data to assess whether your application meets performance targets.
You can use the FrameTimingManager class in the following situations:
Frame timings don’t replace data from the ProfilerA window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating, or in your game logic. More info
See in Glossary. After you record high level metrics of your application with FrameTimingManager, you can use the Profiler to then investigate specific details.
Note: FrameTimingManager might decrease GPU performance when it records data on OpenGL ES, so it can’t produce an accurate measurement of how your application performs.
To use the data you collect from FrameTimingManager refer to Get frame timing data.
FrameTimingManager provides results with a set delay of four frames. This is for the following reasons:
Note: The four frame delay doesn’t guarantee accurate timing results, because the GPU might not have any available resources to return the results, or might fail to return them correctly.
For a detailed description of available timings, refer to Get frame timing data.
FrameTimingManger changes how it produces a FrameTimeComplete timestamp under the following circumstances:
FrameTimeComplete timestamp.FrameTimingManager calculates a value for gpuFrameTime. The value is the sum of the reported GPU time and the FirstSubmitTimestamp values.FrameTimingManager sets the value of PresentTimestamp as the value of FrameTimeComplete.
FrameTimingManager is supported on the following platforms and graphics APIs:
| Platform | Graphics | Supported |
|---|---|---|
| Android | OpenGL ES | Yes |
| Android | Vulkan | Yes |
| iOS | Metal | Yes |
| Linux | OpenGL | Partial: GPU Frame Time measurement is unsupported. |
| Linux | Vulkan | Yes |
| macOS | Metal | Yes |
| tvOS | Metal | Yes |
| WebGLA JavaScript API that renders 2D and 3D graphics in a web browser. The Unity Web build option allows Unity to publish content as JavaScript programs which use HTML5 technologies and the WebGL rendering API to run Unity content in a web browser. More info See in Glossary |
WebGL | Partial: GPU Frame Time measurement is unsupported. |
| Windows | DirectX 11 | Yes |
| Windows | DirectX 12 | Yes |
| Windows | OpenGL | Yes |
| Windows | Vulkan | Yes |
| XRAn umbrella term encompassing Virtual Reality (VR), Augmented Reality (AR) and Mixed Reality (MR) applications. Devices supporting these forms of interactive applications can be referred to as XR devices. More info See in Glossary |
OpenGL ES | Partial: CPU Render Thread Frame Time and GPU Frame Time measurement is unsupported. |
| XR | Vulkan | Partial: CPU Render Thread Frame Time and GPU Frame Time measurement is unsupported. |
For GPUs that use tile-based deferred rendering architecture, such as Metal GPUs in Apple devices, the reported GPU time might be larger than the reported frame time.
This can happen when the GPU is under heavy load, or when the GPU pipeline is full. In these cases, the GPU might defer execution of some rendering phases. Because FrameTimingManager measures the time between the beginning and end of the frame rendering, any gaps between phases increase the reported GPU time.
In the following example, no GPU resources are available, because the GPU passes a job from the vertex queue to the fragment queue. The GPU’s graphics API therefore defers the execution of the next phase. When this happens, the GPU time measurement includes phase work time and any gap in between. The result is that FrameTimingManager reports a higher GPU time measurement than expected.