---
title: Analyzing the performance of a foveated streaming session
framework: foveatedstreaming
role: article
role_heading: Article
path: foveatedstreaming/analyzing-the-performance-of-a-foveated-streaming-session
---

# Analyzing the performance of a foveated streaming session

Use the Foveated Streaming Statistics instrument to evaluate the performance of your visionOS streaming client app.

## Overview

Overview Maintaining a high frame rate while minimizing latency is critical to ensure a comfortable and immersive foveated streaming experience on Apple Vision Pro. The Foveated Streaming framework delivers high-quality immersive content to Apple Vision Pro through a highly-optimized, real-time pipeline: Apple Vision Pro sends its pose and information about the approximate region where the person is looking to a streaming server. The server uses the pose to render a frame. The server foveates that frame for streaming, applying encoding at higher resolution only where necessary. The server sends the foveated frame back to Apple Vision Pro for decoding and display. This intricate, real-time process demands minimal latency to mitigate motion sickness, disorientation, and breaks in immersion that high latency causes. To get useful information specific to foveated streaming, profile your app with the Foveated Streaming Statistics instrument. This instrument helps you identify: Available network bandwidth and streaming rate. Received and reprojected frame rates. End-to-end streaming latency. For more information on how to use Instruments, see Profiling apps using Instruments. Prepare the foveated streaming statistics instrument To set up a new Instruments document from Xcode: Choose Product > Profile; this opens the Instruments app. In Instruments, select the Blank template, then click Choose. In the Instruments selector, click “+ Instrument”. In the filter field, enter “fov” to quickly locate the Foveated Streaming Statistics instrument. Double click the instrument to add the Foveated Streaming Statistics instrument.

tip: You can add additional instruments alongside the Foveated Streaming Statistics instrument to create a more comprehensive performance profile of your app. For more information, see Analyzing the performance of your visionOS app. Capture streaming statistics To collect metrics for a foveated streaming session: Click the Record button at the top left of the window to start capturing profile data. Connect the FoveatedStreamingSession in your app to a streaming endpoint that’s actively streaming content. Click the stop button to stop recording.

The Foveated Streaming Statistics instrument collects metrics on the following: Diagnose performance issues The most common source of foveated streaming performance issues is network limitations. If you observe visual artifacts, stuttering, or a lack of responsiveness, begin by examining the Available Bandwidth and Average Streaming Rate. A significant gap between these two values, or consistently low numbers for either, strongly indicates that your network connection is the limiting factor. This could be due to network congestion, poor Wi-Fi signal strength, or other connectivity problems. Evaluate your app’s performance If the Available Bandwidth and Average Streaming Rate appear reasonable, the next step is to investigate your app’s internal performance. One indicator of your app’s performance is the Pose Rate. For optimal foveated streaming, the Pose Rate should be consistent with the device’s refresh rate; for example, 90 Hz. A Pose Rate significantly below this target suggests that your app isn’t running at its maximum frame rate. This indicates that something within your app’s logic or rendering pipeline is causing slowdowns. In such cases, you can use other Xcode instruments, like Time Profiler, to pinpoint the specific performance bottlenecks within your app. To understand the overall responsiveness and end-to-end latency of the system, monitor the Pose to Frame Submitted Latency metric. This metric measures the total time from when Apple Vision Pro sends a device pose to when decoding and submitting the corresponding streamed frame for display. You want this latency to be as low as possible for a fluid and reactive experience. Consistently high Pose to Frame Submitted Latency — even when initial network and streaming rates seem adequate — can suggest more subtle or intermittent network issues, such as network jitter or packet loss, which might not be immediately obvious from average bandwidth metrics. If this latency is high, focus on optimizing your network environment for stability and consistency, or review your app’s processing and rendering pipeline for any client-side work that could introduce delays before frame submission.

## See Also

### Essentials

- [Streaming a CloudXR application to Apple Vision Pro with foveation](foveatedstreaming/streaming-a-cloudxr-application-to-apple-vision-pro-with-foveation.md)
- [Establishing foveated streaming sessions with Apple Vision Pro](foveatedstreaming/establishing-foveated-streaming-sessions-with-apple-vision-pro.md)
- [Creating a foveated streaming client on visionOS](foveatedstreaming/creating-a-foveated-streaming-client-on-visionos.md)
- [FoveatedStreamingSession](foveatedstreaming/foveatedstreamingsession.md)
- [FoveatedStreamingSpaceContent](foveatedstreaming/foveatedstreamingspacecontent.md)
