Struct FrameStatistics

Frame statistics to do client-side performance assessment. See GraphicsBinding.GetLastFrameStatistics(FrameStatistics).

struct Microsoft::Azure::RemoteRendering::FrameStatistics

Fields

LatencyPoseToReceive

Time between the client's request for a new remote frame and the arrival of the requested frame.

This includes, but is not limited to, the network round-trip latency and delays caused by operations necessary on the server side before sending, and on the client side after receiving (rendering, video encoding/decoding, etc).

float LatencyPoseToReceive{};

LatencyReceiveToPresent

Time between arrival of a new frame and its actual usage.

Gives the latency between the availability of new frame data and its actual use. This contains client-side CPU drawcall time, frame reprojection, etc.

float LatencyReceiveToPresent{};

LatencyPresentToDisplay

The latency until the finished frame is displayed.

This mainly contains aspects like GPU workload and waiting for V-sync but can also encompass overhead introduced by the rendering infrastructure. For example, some game engines introduce a scheduling overhead in this phase.

float LatencyPresentToDisplay{};

TimeSinceLastPresent

The time between subsequent calls to PresentFrame on the CPU.

Values greater than the display duration (for example 16.6 ms on a 60-Hz client device) indicate issues caused by the client application not finishing its CPU workload in time.

float TimeSinceLastPresent{};

VideoFrameReusedCount

Number of received frames since the last update call that were used on the device more than once.

Non-zero values indicate that frames had to be reprojected either due to network jitter or excessive server rendering time.

int32_t VideoFrameReusedCount{};

VideoFramesSkipped

Number of received frames since the last update call that were decoded, but not shown on display because a newer frame has arrived.

Non-zero values indicate that network jitter caused multiple frames to be delayed and then arrived on the client device together in a burst.

int32_t VideoFramesSkipped{};

VideoFramesReceived

The number of frames received from the server since the last update call.

int32_t VideoFramesReceived{};

VideoFramesDiscarded

Very similar to FrameStatistics.VideoFramesSkipped, but the reason for being discarded is that a frame came in so late that it couldn't even be correlated with any pending pose anymore. If this happens, there is some severe network contention.

int32_t VideoFramesDiscarded{};

VideoFrameMinDelta

Minimum amount of time between two consecutive frames arriving since the last update call.

Together with FrameStatistics.VideoFrameMaxDelta this range gives an indication of jitter caused either by the network or video codec.

float VideoFrameMinDelta{};

VideoFrameMaxDelta

Maximum amount of time between two consecutive frames arriving since the last update call.

Together with FrameStatistics.VideoFrameMinDelta this range gives an indication of jitter caused either by the network or video codec.

float VideoFrameMaxDelta{};

LatencyPoseNetworkTransmit

Time in milliseconds it took to transmit the pose via the network.

float LatencyPoseNetworkTransmit{};

PoseArrivalDelta

Time delta in milliseconds between the pose arrival of the current frame and the previous one.

float PoseArrivalDelta{};

LatencyFrameNetworkTransmit

Time in milliseconds it took to transmit the frame via the network.

This includes both color and depth video data.

float LatencyFrameNetworkTransmit{};

FrameArrivalDelta

Time delta in milliseconds between the arrival of the current frame and the previous one.

float FrameArrivalDelta{};

See also