Oculus Quest: Changing the Display Refresh Rate

On Oculus Quest and Quest 2 devices, you can select and change between different display refresh rates.

Overview

Oculus Quest and Quest 2 deal with issues of excess heat and power consumption in a similar way to mobile devices such as phones and tablets: the system slows down the device temporarily to reduce power consumption and help cool the device. This slowing down approach generally leads to a reduction in the frame rate and display refresh rate.

For example, a 90 Hz Quest 2 app might temporarily have its display refresh rate reduced to 72 Hz.

80 Hz and 90 Hz Display Refresh Rates on Quest 2

Quest 2 apps may target 80 Hz and 90 Hz refresh rates with the following conditions:

  • The app must declare specific support for Quest 2 in the manifest file. For example: <meta-data android:name="com.oculus.supportedDevices" android:value="quest|quest2"/>

  • If an 80 Hz or 90 Hz Quest 2 app experiences thermal events, dynamic throttling may reduce the refresh rate to 72 Hz as a first step. If thermal conditions worsen, dynamic throttling may take an additional step and reduce the frame rate to 36 FPS while keeping the refresh rate at 72 Hz (the equivalent of minVsyncs=2).

  • While most apps don’t need to change anything about their behavior if they are throttled, apps that want to be kept aware of refresh rate changes can hook to a new event for Display Refresh Rate Change. The event contains information about the refresh rates the device has switched to and from.

Testing how an app handles dynamic throttling

You may test the 90 Hz to 72 Hz refresh rate change while your app is running by broadcasting an intent through the adb shell activity manager. For example, this command simulates throttling for 10 seconds:

adb shell am broadcast -a com.oculus.vrruntimeservice.COMPOSITOR_SIMULATE_THERMAL --es subsystem refresh --ei seconds_throttled 10

If you aren’t able to see a visible change in your app, you can verify the refresh rate change by looking in the logcat for VrApi events that show an FPS value pair. The first value is the frame rate. The second value is the display refresh rate. For example:

VrApi   : FPS=90/90,Prd=33ms,Tear=0,Early=0...
VrApi   : FPS=87/72,Prd=33ms,Tear=0,Early=0...

Declaring Quest 2 Support in the Manifest File

To indicate in the app manifest that your application supports Quest 2, see Set Target Device and Get Device at Runtime in Unreal Engine: Add Quest 2 to the Manifest.

Blueprints to Manage Display Refresh Frequencies

These Blueprints are provided to help you manage display refresh rate frequency:

Get Available Display Frequencies

This Blueprint retrieves an array of floats that represent the available refresh rates in Hz. For example, the following array represents the available display frequencies for an Oculus Quest 2.

Array IndexFrequency in Hz
060
172
280
390

For more information, see Get Available Display Frequencies.

Switching display refresh rate blueprint

Get Current Display Frequency

This Blueprint retrieves a float value that represents the current refresh rate in Hz. For more information, see Get Current Display Frequency.

Get current display frequency blueprint

Set Display Frequency

This Blueprint accepts a display frequency in Hz as float value, and then if the value is a valid display frequency for the headset, sets the current refresh rate to that value. For more information, see Set Display Frequency.

You should set the refresh rate based on what Get Available Display Frequencies returns. And you should check the returned array length before accessing element 1 in the array.

The following Blueprints sample sets the refresh rate to 72 Hz for the Oculus Quest: Example of best practices for setting display frequency

Oculus Display Refresh Rate Change Event

The blueprint for the Oculus Display Refresh Rate Change event gives your app the option to take action if the system changes the refresh rate. The refresh rate the system has changed from and the rate it has changed to are exposed as float values.

Display refresh rate change event blueprint example