Enabling Phase Sync Adaptive Frame Timing in UE 4.x
Updated: Apr 17, 2026
Legacy guidance: Meta ended support of Unreal Engine 4.27 in
Meta XR SDK v62, and no further updates will be made. Phase Sync was a VrApi-era feature; as of August 31, 2022, the VrApi library is no longer supported. Under the current OpenXR runtime, frame timing is managed automatically. The information on this page is preserved for teams maintaining existing UE4 projects.
Phase Sync is a frame timing technique that reduces latency adaptively. It is available for Meta Quest and Meta Quest 2 apps as an option in Unreal Engine Integration v23 and later.
To activate Phase Sync adaptive frame timing in Unreal Engine, see the
Enable Phase Sync section.
The following section describes how Phase Sync works.
Phase Sync offers an alternative to the fixed-latency mode for managing frame timing in Meta Quest apps. In fixed-latency mode, frames are composited as early as possible to avoid missing the current frame and reusing a stale one. Stale frames can negatively affect the user experience.
Unlike fixed-latency, Phase Sync adapts frame timing based on the app’s workload. Its goal is to complete frame rendering just before the compositor needs it, reducing rendering latency without missing frames.
The following image shows the difference between a fixed latency and when Phase Sync is enabled for a typical multi-threaded VR app.
Note the following when Phase Sync is enabled:
- No additional performance overhead: Phase Sync does not increase an app’s performance demands.
- Sensitive to workload fluctuations: If the app’s workload fluctuates or spikes frequently, Phase Sync might cause more stale frames.
- Complements late-latching: Phase Sync and late-latching often work well together.
- Extra latency mode: If both extra latency mode and Phase Sync are enabled, the extra latency mode will be ignored.
Note: If you are not subscribed to the private EpicGames/UnrealEngine repository and logged in to GitHub, you will receive a 404 error when you click the link. For more information, see
Version Compatibility Reference.
To enable Phase Sync:
- Open your project in Unreal Engine.
- Click Edit > Project Settings, and then go to Plugins > OculusVR.
- In the Mobile section, select the Phase Sync checkbox.
The testing instructions below use VrApi, which was deprecated August 31, 2022. Under the current OpenXR runtime, adb logcat -s VrApi and adb shell setprop debug.oculus.phaseSync have no effect. These instructions apply only to apps running on the legacy VrApi runtime.
After enabling Phase Sync in your app, you can verify that it is active and see how much latency it has saved by examining the logcat logs.
- If Phase Sync is not active, the Lat value is either Lat=0 or Lat=1, indicating extra latency mode.
- If Phase Sync is active, the Lat value is Lat=-1, indicating the latency is managed dynamically.
The Prd value indicates the render latency as measured by the runtime. To calculate how much latency Phase Sync has saved, compare the Prd values between when Phase Sync is active and not active. For example, if the Prd with Phase Sync is 35ms and the Prd without is 45ms, you saved 10ms of latency with Phase Sync.
To more easily compare performance with and without Phase Sync, you can toggle it using an adb shell setprop command. You must restart the app after changing the setprop for the change to have effect.
- Turn off:
adb shell setprop debug.oculus.phaseSync 0 - Turn on:
adb shell setprop debug.oculus.phaseSync 1
These resources reference historical content and may describe deprecated APIs or discontinued products.