From d4609f20b2a62f87b7da5af223c367f0801f96f6 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 21:20:09 +0100 Subject: [PATCH 01/21] Set CPU performance level --- alvr/client_openxr/src/lib.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index e49c7cee8a..aadf96b5a0 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -261,6 +261,16 @@ pub fn entry_point() { .unwrap(); } + if let Some(ext_performance_settings)= xr_instance.exts().ext_performance_settings { + let set_performance_level = ext_performance_settings.perf_settings_set_performance_level; + let domain: xr::PerfSettingsDomainEXT = xr::PerfSettingsDomainEXT::CPU; + let level: xr::PerfSettingsLevelEXT = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + let raw_session: xr::sys::Session = xr_session.as_raw(); + unsafe { + set_performance_level(raw_session, domain, level); + } + } + let capabilities = ClientCapabilities { default_view_resolution, refresh_rates, From e73ce223362f993692b101dd1cda607008855778 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 21:33:34 +0100 Subject: [PATCH 02/21] CPU and GPU perf levels --- alvr/client_openxr/src/lib.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index aadf96b5a0..c4fdce74c4 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -261,13 +261,15 @@ pub fn entry_point() { .unwrap(); } + alvr_common::info!("OpenXR checking performance setting availability."); if let Some(ext_performance_settings)= xr_instance.exts().ext_performance_settings { let set_performance_level = ext_performance_settings.perf_settings_set_performance_level; - let domain: xr::PerfSettingsDomainEXT = xr::PerfSettingsDomainEXT::CPU; - let level: xr::PerfSettingsLevelEXT = xr::PerfSettingsLevelEXT::POWER_SAVINGS; - let raw_session: xr::sys::Session = xr_session.as_raw(); + let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + let raw_session = xr_session.as_raw(); + alvr_common::info!("OpenXR setting performance level."); unsafe { - set_performance_level(raw_session, domain, level); + set_performance_level(raw_session, xr::PerfSettingsDomainEXT::CPU, level); + set_performance_level(raw_session, xr::PerfSettingsDomainEXT::GPU, level); } } From f1ab7419dab5f83b6d9d1483e8d2a3f8a5ccf517 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 23:03:12 +0100 Subject: [PATCH 03/21] Class migration and enable the required functions for performance control --- .../client_openxr/src/extra_extensions/mod.rs | 2 + .../extra_extensions/performance_settings.rs | 48 +++++++++++++++++++ alvr/client_openxr/src/lib.rs | 29 ++++++----- 3 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 alvr/client_openxr/src/extra_extensions/performance_settings.rs diff --git a/alvr/client_openxr/src/extra_extensions/mod.rs b/alvr/client_openxr/src/extra_extensions/mod.rs index d0b833b3dc..cbeb3d4485 100644 --- a/alvr/client_openxr/src/extra_extensions/mod.rs +++ b/alvr/client_openxr/src/extra_extensions/mod.rs @@ -9,6 +9,7 @@ mod motion_tracking_bd; mod multimodal_input; mod passthrough_fb; mod passthrough_htc; +mod performance_settings; pub use body_tracking_bd::*; pub use body_tracking_fb::*; @@ -21,6 +22,7 @@ pub use motion_tracking_bd::*; pub use multimodal_input::*; pub use passthrough_fb::*; pub use passthrough_htc::*; +pub use performance_settings::*; use std::ffi::CString; use std::mem; diff --git a/alvr/client_openxr/src/extra_extensions/performance_settings.rs b/alvr/client_openxr/src/extra_extensions/performance_settings.rs new file mode 100644 index 0000000000..7e568cdd24 --- /dev/null +++ b/alvr/client_openxr/src/extra_extensions/performance_settings.rs @@ -0,0 +1,48 @@ +use openxr::{self as xr, sys}; + +pub const PERFORMANCE_SETTINGS_EXTENSION_NAME: &str = "XR_EXT_performance_settings"; + +pub struct PerformanceSettings { + session: xr::Session, + ext_set_performance_level: sys::pfn::PerfSettingsSetPerformanceLevelEXT, +} + +impl PerformanceSettings { + pub fn new(session: xr::Session) -> xr::Result { + let ext_performance_settings = session + .instance() + .exts() + .ext_performance_settings + .ok_or(sys::Result::ERROR_EXTENSION_NOT_PRESENT)?; + + Ok(Self { + session: session.into_any_graphics(), + ext_set_performance_level: ext_performance_settings.perf_settings_set_performance_level, + }) + } + + pub fn set_performance_level(&self, domain: xr::PerfSettingsDomainEXT, level: xr::PerfSettingsLevelEXT) { + // let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + alvr_common::info!("OpenXR setting performance level for domain domain to level level."); + unsafe { + (self.ext_set_performance_level)(self.session.as_raw(), domain, level); + } + } + + pub fn set_cpu_level(&self, level: xr::PerfSettingsLevelEXT) { + self.set_performance_level(xr::PerfSettingsDomainEXT::CPU, level); + } + + pub fn set_gpu_level(&self, level: xr::PerfSettingsLevelEXT) { + self.set_performance_level(xr::PerfSettingsDomainEXT::GPU, level); + } + + pub fn set_level(&self, level: xr::PerfSettingsLevelEXT) { + self.set_cpu_level(level); + self.set_gpu_level(level); + } + + pub fn enable_power_saving(&self) { + self.set_level(xr::PerfSettingsLevelEXT::POWER_SAVINGS); + } +} diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index c4fdce74c4..c6294d2ef3 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -6,7 +6,7 @@ mod lobby; mod passthrough; mod stream; -use crate::stream::ParsedStreamConfig; +use crate::{extra_extensions::PerformanceSettings, stream::ParsedStreamConfig}; use alvr_client_core::{ClientCapabilities, ClientCoreContext, ClientCoreEvent}; use alvr_common::{ Fov, HAND_LEFT_ID, Pose, error, @@ -22,6 +22,7 @@ use extra_extensions::{ META_BODY_TRACKING_FIDELITY_EXTENSION_NAME, META_BODY_TRACKING_FULL_BODY_EXTENSION_NAME, META_DETACHED_CONTROLLERS_EXTENSION_NAME, META_SIMULTANEOUS_HANDS_AND_CONTROLLERS_EXTENSION_NAME, PICO_CONFIGURATION_EXTENSION_NAME, + PERFORMANCE_SETTINGS_EXTENSION_NAME }; use interaction::{InteractionContext, InteractionSourcesConfig}; use lobby::Lobby; @@ -198,6 +199,7 @@ pub fn entry_point() { BD_BODY_TRACKING_EXTENSION_NAME, BD_MOTION_TRACKING_EXTENSION_NAME, PICO_CONFIGURATION_EXTENSION_NAME, + PERFORMANCE_SETTINGS_EXTENSION_NAME, ] .contains(&ext.as_str()) }) @@ -261,16 +263,21 @@ pub fn entry_point() { .unwrap(); } - alvr_common::info!("OpenXR checking performance setting availability."); - if let Some(ext_performance_settings)= xr_instance.exts().ext_performance_settings { - let set_performance_level = ext_performance_settings.perf_settings_set_performance_level; - let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; - let raw_session = xr_session.as_raw(); - alvr_common::info!("OpenXR setting performance level."); - unsafe { - set_performance_level(raw_session, xr::PerfSettingsDomainEXT::CPU, level); - set_performance_level(raw_session, xr::PerfSettingsDomainEXT::GPU, level); - } + // alvr_common::info!("OpenXR checking performance setting availability."); + // if let Some(ext_performance_settings) = xr_instance.exts().ext_performance_settings { + // let set_performance_level = ext_performance_settings.perf_settings_set_performance_level; + // let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + // let raw_session = xr_session.as_raw(); + // alvr_common::info!("OpenXR setting performance level."); + // unsafe { + // set_performance_level(raw_session, xr::PerfSettingsDomainEXT::CPU, level); + // set_performance_level(raw_session, xr::PerfSettingsDomainEXT::GPU, level); + // } + // } + + + if let Some(performance_settings) = PerformanceSettings::new(xr_session.clone()).ok() { + performance_settings.enable_power_saving(); } let capabilities = ClientCapabilities { From 7f21de2748bb2b5ef9514bc0f8f216112fc0e736 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 23:03:46 +0100 Subject: [PATCH 04/21] Remove old performance settings code --- alvr/client_openxr/src/lib.rs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index c6294d2ef3..21c2f61270 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -263,19 +263,6 @@ pub fn entry_point() { .unwrap(); } - // alvr_common::info!("OpenXR checking performance setting availability."); - // if let Some(ext_performance_settings) = xr_instance.exts().ext_performance_settings { - // let set_performance_level = ext_performance_settings.perf_settings_set_performance_level; - // let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; - // let raw_session = xr_session.as_raw(); - // alvr_common::info!("OpenXR setting performance level."); - // unsafe { - // set_performance_level(raw_session, xr::PerfSettingsDomainEXT::CPU, level); - // set_performance_level(raw_session, xr::PerfSettingsDomainEXT::GPU, level); - // } - // } - - if let Some(performance_settings) = PerformanceSettings::new(xr_session.clone()).ok() { performance_settings.enable_power_saving(); } From 97a98d6736bf5215749546bb871b488f8ce9de36 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 23:16:05 +0100 Subject: [PATCH 05/21] Add log --- .../client_openxr/src/extra_extensions/performance_settings.rs | 3 +-- alvr/client_openxr/src/lib.rs | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/alvr/client_openxr/src/extra_extensions/performance_settings.rs b/alvr/client_openxr/src/extra_extensions/performance_settings.rs index 7e568cdd24..fd40d9f6bb 100644 --- a/alvr/client_openxr/src/extra_extensions/performance_settings.rs +++ b/alvr/client_openxr/src/extra_extensions/performance_settings.rs @@ -22,8 +22,7 @@ impl PerformanceSettings { } pub fn set_performance_level(&self, domain: xr::PerfSettingsDomainEXT, level: xr::PerfSettingsLevelEXT) { - // let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; - alvr_common::info!("OpenXR setting performance level for domain domain to level level."); + alvr_common::info!("OpenXR setting performance level for domain {:?} to level {:?}.", domain, level); unsafe { (self.ext_set_performance_level)(self.session.as_raw(), domain, level); } diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 21c2f61270..ab058a9710 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -263,6 +263,7 @@ pub fn entry_point() { .unwrap(); } + alvr_common::info!("OpenXR trying to set performance level."); if let Some(performance_settings) = PerformanceSettings::new(xr_session.clone()).ok() { performance_settings.enable_power_saving(); } From 4188a14d074d8756adf033e02603771696c4dd1c Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 23:28:01 +0100 Subject: [PATCH 06/21] Fix extension activation --- alvr/client_openxr/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index ab058a9710..e6ee503bed 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -181,6 +181,7 @@ pub fn entry_point() { exts.htc_passthrough = available_extensions.htc_passthrough; exts.htc_vive_focus3_controller_interaction = available_extensions.htc_vive_focus3_controller_interaction; + exts.ext_performance_settings = available_extensions.ext_performance_settings; #[cfg(target_os = "android")] { exts.khr_android_create_instance = true; @@ -199,7 +200,6 @@ pub fn entry_point() { BD_BODY_TRACKING_EXTENSION_NAME, BD_MOTION_TRACKING_EXTENSION_NAME, PICO_CONFIGURATION_EXTENSION_NAME, - PERFORMANCE_SETTINGS_EXTENSION_NAME, ] .contains(&ext.as_str()) }) From 9165b8bc75b4cc7b536a34f86630652c908249d7 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 23:46:10 +0100 Subject: [PATCH 07/21] Remove dedicated class for performance level settings --- .../extra_extensions/performance_settings.rs | 47 ------------------- alvr/client_openxr/src/lib.rs | 13 +++-- 2 files changed, 9 insertions(+), 51 deletions(-) delete mode 100644 alvr/client_openxr/src/extra_extensions/performance_settings.rs diff --git a/alvr/client_openxr/src/extra_extensions/performance_settings.rs b/alvr/client_openxr/src/extra_extensions/performance_settings.rs deleted file mode 100644 index fd40d9f6bb..0000000000 --- a/alvr/client_openxr/src/extra_extensions/performance_settings.rs +++ /dev/null @@ -1,47 +0,0 @@ -use openxr::{self as xr, sys}; - -pub const PERFORMANCE_SETTINGS_EXTENSION_NAME: &str = "XR_EXT_performance_settings"; - -pub struct PerformanceSettings { - session: xr::Session, - ext_set_performance_level: sys::pfn::PerfSettingsSetPerformanceLevelEXT, -} - -impl PerformanceSettings { - pub fn new(session: xr::Session) -> xr::Result { - let ext_performance_settings = session - .instance() - .exts() - .ext_performance_settings - .ok_or(sys::Result::ERROR_EXTENSION_NOT_PRESENT)?; - - Ok(Self { - session: session.into_any_graphics(), - ext_set_performance_level: ext_performance_settings.perf_settings_set_performance_level, - }) - } - - pub fn set_performance_level(&self, domain: xr::PerfSettingsDomainEXT, level: xr::PerfSettingsLevelEXT) { - alvr_common::info!("OpenXR setting performance level for domain {:?} to level {:?}.", domain, level); - unsafe { - (self.ext_set_performance_level)(self.session.as_raw(), domain, level); - } - } - - pub fn set_cpu_level(&self, level: xr::PerfSettingsLevelEXT) { - self.set_performance_level(xr::PerfSettingsDomainEXT::CPU, level); - } - - pub fn set_gpu_level(&self, level: xr::PerfSettingsLevelEXT) { - self.set_performance_level(xr::PerfSettingsDomainEXT::GPU, level); - } - - pub fn set_level(&self, level: xr::PerfSettingsLevelEXT) { - self.set_cpu_level(level); - self.set_gpu_level(level); - } - - pub fn enable_power_saving(&self) { - self.set_level(xr::PerfSettingsLevelEXT::POWER_SAVINGS); - } -} diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index e6ee503bed..8ad40b1dce 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -6,7 +6,7 @@ mod lobby; mod passthrough; mod stream; -use crate::{extra_extensions::PerformanceSettings, stream::ParsedStreamConfig}; +use crate::{stream::ParsedStreamConfig}; use alvr_client_core::{ClientCapabilities, ClientCoreContext, ClientCoreEvent}; use alvr_common::{ Fov, HAND_LEFT_ID, Pose, error, @@ -22,7 +22,6 @@ use extra_extensions::{ META_BODY_TRACKING_FIDELITY_EXTENSION_NAME, META_BODY_TRACKING_FULL_BODY_EXTENSION_NAME, META_DETACHED_CONTROLLERS_EXTENSION_NAME, META_SIMULTANEOUS_HANDS_AND_CONTROLLERS_EXTENSION_NAME, PICO_CONFIGURATION_EXTENSION_NAME, - PERFORMANCE_SETTINGS_EXTENSION_NAME }; use interaction::{InteractionContext, InteractionSourcesConfig}; use lobby::Lobby; @@ -264,8 +263,14 @@ pub fn entry_point() { } alvr_common::info!("OpenXR trying to set performance level."); - if let Some(performance_settings) = PerformanceSettings::new(xr_session.clone()).ok() { - performance_settings.enable_power_saving(); + if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { + alvr_common::info!("OpenXR setting performance level to power save."); + let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + let set_performance_level = performance_settings.perf_settings_set_performance_level; + unsafe { + set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, level); + set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::GPU, level); + } } let capabilities = ClientCapabilities { From 9fe4c44571a9f7cc8c5992a1c278be9506a138a4 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 27 Oct 2025 23:56:15 +0100 Subject: [PATCH 08/21] Remove comments --- alvr/client_openxr/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 8ad40b1dce..08fa27e642 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -262,10 +262,9 @@ pub fn entry_point() { .unwrap(); } - alvr_common::info!("OpenXR trying to set performance level."); if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { - alvr_common::info!("OpenXR setting performance level to power save."); let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + let set_performance_level = performance_settings.perf_settings_set_performance_level; unsafe { set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, level); From 27dcfa3609140f18fbc3221106f4690fb0be88e9 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Tue, 28 Oct 2025 00:02:54 +0100 Subject: [PATCH 09/21] Move power saving setting location and remove unused imports --- .../client_openxr/src/extra_extensions/mod.rs | 2 -- alvr/client_openxr/src/lib.rs | 22 +++++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/alvr/client_openxr/src/extra_extensions/mod.rs b/alvr/client_openxr/src/extra_extensions/mod.rs index cbeb3d4485..d0b833b3dc 100644 --- a/alvr/client_openxr/src/extra_extensions/mod.rs +++ b/alvr/client_openxr/src/extra_extensions/mod.rs @@ -9,7 +9,6 @@ mod motion_tracking_bd; mod multimodal_input; mod passthrough_fb; mod passthrough_htc; -mod performance_settings; pub use body_tracking_bd::*; pub use body_tracking_fb::*; @@ -22,7 +21,6 @@ pub use motion_tracking_bd::*; pub use multimodal_input::*; pub use passthrough_fb::*; pub use passthrough_htc::*; -pub use performance_settings::*; use std::ffi::CString; use std::mem; diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 08fa27e642..9401ee89bb 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -6,7 +6,7 @@ mod lobby; mod passthrough; mod stream; -use crate::{stream::ParsedStreamConfig}; +use crate::stream::ParsedStreamConfig; use alvr_client_core::{ClientCapabilities, ClientCoreContext, ClientCoreEvent}; use alvr_common::{ Fov, HAND_LEFT_ID, Pose, error, @@ -262,16 +262,6 @@ pub fn entry_point() { .unwrap(); } - if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { - let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; - - let set_performance_level = performance_settings.perf_settings_set_performance_level; - unsafe { - set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, level); - set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::GPU, level); - } - } - let capabilities = ClientCapabilities { default_view_resolution, refresh_rates, @@ -326,6 +316,16 @@ pub fn entry_point() { .write() .select_sources(&lobby_interaction_sources); + if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { + let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; + + let set_performance_level = performance_settings.perf_settings_set_performance_level; + unsafe { + set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, level); + set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::GPU, level); + } + } + let mut session_running = false; let mut stream_context = None::; let mut passthrough_layer = None; From 574b0c10201b70f18442f02927ceac4ae880979b Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Tue, 28 Oct 2025 21:23:09 +0100 Subject: [PATCH 10/21] Alphabetically order requested extensions. --- alvr/client_openxr/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 9401ee89bb..756f059dc9 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -166,6 +166,7 @@ pub fn entry_point() { exts.ext_eye_gaze_interaction = available_extensions.ext_eye_gaze_interaction; exts.ext_hand_tracking = available_extensions.ext_hand_tracking; exts.ext_local_floor = available_extensions.ext_local_floor; + exts.ext_performance_settings = available_extensions.ext_performance_settings; exts.fb_body_tracking = available_extensions.fb_body_tracking; exts.fb_color_space = available_extensions.fb_color_space; exts.fb_composition_layer_settings = available_extensions.fb_composition_layer_settings; @@ -180,7 +181,6 @@ pub fn entry_point() { exts.htc_passthrough = available_extensions.htc_passthrough; exts.htc_vive_focus3_controller_interaction = available_extensions.htc_vive_focus3_controller_interaction; - exts.ext_performance_settings = available_extensions.ext_performance_settings; #[cfg(target_os = "android")] { exts.khr_android_create_instance = true; From 8115b7088d0ce4cd7d4a33ef1b3ce44ef274e337 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 10 Nov 2025 10:31:12 +0100 Subject: [PATCH 11/21] Add performance level setting --- alvr/session/src/settings.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index fe686fb2aa..9a50771559 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -878,6 +878,13 @@ pub enum HeadsetEmulationMode { }, } +#[derive(SettingsSchema, Serialize, Deserialize, Clone)] +pub enum PerformanceLevel { + PowerSavings, + SustainedLow, + SustainedHigh, +} + #[derive(SettingsSchema, Serialize, Deserialize, Clone, PartialEq)] pub enum FaceTrackingSourcesConfig { PreferEyeTrackingOnly, @@ -1274,6 +1281,9 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef #[schema(flag = "steamvr-restart")] pub emulation_mode: HeadsetEmulationMode, + #[schema(flag = "real-time")] + pub performance_level: PerformanceLevel, + #[schema(flag = "steamvr-restart")] #[schema(strings(display_name = "Extra OpenVR properties"))] pub extra_openvr_props: Vec, @@ -1919,6 +1929,10 @@ pub fn session_settings_default() -> SettingsDefault { }, variant: HeadsetEmulationModeDefaultVariant::Quest2, }, + performance_level: PerformanceLevelDefault { + cpu_level: PerformanceLevel::SustainedLow, + gpu_level: PerformanceLevel::SustainedLow, + }, extra_openvr_props: default_custom_openvr_props.clone(), tracking_ref_only: false, enable_vive_tracker_proxy: false, From 71897e3179b63e4212e594bdf6c38bcc2ffdeb21 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 10 Nov 2025 11:08:18 +0100 Subject: [PATCH 12/21] Update text and default config --- alvr/session/src/settings.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index 9a50771559..b5e2471654 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -1282,7 +1282,12 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef pub emulation_mode: HeadsetEmulationMode, #[schema(flag = "real-time")] - pub performance_level: PerformanceLevel, + #[schema(strings(display_name = "CPU Performance Level"))] + pub cpu_performance_level: PerformanceLevel, + + #[schema(flag = "real-time")] + #[schema(strings(display_name = "GPU Performance Level"))] + pub gpu_performance_level: PerformanceLevel, #[schema(flag = "steamvr-restart")] #[schema(strings(display_name = "Extra OpenVR properties"))] @@ -1929,9 +1934,11 @@ pub fn session_settings_default() -> SettingsDefault { }, variant: HeadsetEmulationModeDefaultVariant::Quest2, }, - performance_level: PerformanceLevelDefault { - cpu_level: PerformanceLevel::SustainedLow, - gpu_level: PerformanceLevel::SustainedLow, + cpu_performance_level: PerformanceLevelDefault { + variant: PerformanceLevelDefaultVariant::SustainedLow, + }, + gpu_performance_level: PerformanceLevelDefault { + variant: PerformanceLevelDefaultVariant::SustainedLow, }, extra_openvr_props: default_custom_openvr_props.clone(), tracking_ref_only: false, From c095fc78a4a356b798288fc6dfd04d58202beb89 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 10 Nov 2025 12:53:48 +0100 Subject: [PATCH 13/21] Add realtime power mode setting and add boost level --- alvr/client_openxr/src/lib.rs | 36 +++++++++++++++++++++++++- alvr/packets/src/lib.rs | 4 ++- alvr/session/src/settings.rs | 48 ++++++++++++++++++++++++++--------- 3 files changed, 74 insertions(+), 14 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 756f059dc9..3284177ffa 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -15,7 +15,7 @@ use alvr_common::{ parking_lot::RwLock, }; use alvr_graphics::GraphicsContext; -use alvr_session::{BodyTrackingBDConfig, BodyTrackingSourcesConfig}; +use alvr_session::{BodyTrackingBDConfig, BodyTrackingSourcesConfig, PerformanceLevel}; use alvr_system_info::Platform; use extra_extensions::{ BD_BODY_TRACKING_EXTENSION_NAME, BD_MOTION_TRACKING_EXTENSION_NAME, @@ -95,6 +95,27 @@ fn to_xr_time(timestamp: Duration) -> xr::Time { xr::Time::from_nanos(timestamp.as_nanos() as _) } +fn set_performance_level( + xr_session: &xr::Session, + domain: xr::PerfSettingsDomainEXT, + level: PerformanceLevel, +) { + if let Some(performance_settings) = xr_session.exts().ext_performance_settings { + let set_performance_level = performance_settings.perf_settings_set_performance_level; + + let xr_level = match level { + PerformanceLevel::PowerSavings => xr::PerfSettingsLevelEXT::POWER_SAVINGS, + PerformanceLevel::SustainedLow => xr::PerfSettingsLevelEXT::SUSTAINED_LOW, + PerformanceLevel::SustainedHigh => xr::PerfSettingsLevelEXT::SUSTAINED_HIGH, + PerformanceLevel::Boost => xr::PerfSettingsLevelEXT::BOOST, + }; + + unsafe { + set_performance_level(xr_session.as_raw(), domain, xr_level); + } + } +} + fn default_view() -> xr::View { xr::View { pose: xr::Posef { @@ -466,6 +487,19 @@ pub fn entry_point() { passthrough_layer = None; } + if let Some(performance_level) = &config.perfromance_level { + set_performance_level( + &xr_session, + xr::PerfSettingsDomainEXT::CPU, + performance_level.cpu.clone(), + ); + set_performance_level( + &xr_session, + xr::PerfSettingsDomainEXT::GPU, + performance_level.gpu.clone(), + ); + } + if let Some(stream) = &mut stream_context { stream.update_real_time_config(&config); } diff --git a/alvr/packets/src/lib.rs b/alvr/packets/src/lib.rs index e3f4537830..b51b59b0d6 100644 --- a/alvr/packets/src/lib.rs +++ b/alvr/packets/src/lib.rs @@ -5,7 +5,7 @@ use alvr_common::{ semver::Version, }; use alvr_session::{ - ClientsidePostProcessingConfig, CodecType, PassthroughMode, SessionConfig, Settings, + ClientsidePostProcessingConfig, CodecType, PassthroughMode, PerformanceLevelConfig, SessionConfig, Settings }; use serde::{Deserialize, Serialize}; use serde_json as json; @@ -322,6 +322,7 @@ pub enum FirewallRulesAction { pub struct RealTimeConfig { pub passthrough: Option, pub clientside_post_processing: Option, + pub perfromance_level: Option, pub ext_str: String, } @@ -334,6 +335,7 @@ impl RealTimeConfig { .clientside_post_processing .clone() .into_option(), + perfromance_level: settings.headset.performance_level.clone().into_option(), ext_str: String::new(), // No extensions for now } } diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index b5e2471654..743063d2a0 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -878,11 +878,22 @@ pub enum HeadsetEmulationMode { }, } -#[derive(SettingsSchema, Serialize, Deserialize, Clone)] +#[derive(SettingsSchema, Serialize, Deserialize, PartialEq, Clone)] pub enum PerformanceLevel { PowerSavings, SustainedLow, SustainedHigh, + Boost, +} + +#[derive(SettingsSchema, Serialize, Deserialize, PartialEq, Clone)] +pub struct PerformanceLevelConfig { + #[schema(flag = "real-time")] + #[schema(strings(display_name = "CPU"))] + pub cpu: PerformanceLevel, + #[schema(flag = "real-time")] + #[schema(strings(display_name = "GPU"))] + pub gpu: PerformanceLevel, } #[derive(SettingsSchema, Serialize, Deserialize, Clone, PartialEq)] @@ -1281,13 +1292,15 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef #[schema(flag = "steamvr-restart")] pub emulation_mode: HeadsetEmulationMode, - #[schema(flag = "real-time")] - #[schema(strings(display_name = "CPU Performance Level"))] - pub cpu_performance_level: PerformanceLevel, + // #[schema(flag = "real-time")] + // #[schema(strings(display_name = "CPU Performance Level"))] + // pub cpu_performance_level: PerformanceLevel, - #[schema(flag = "real-time")] - #[schema(strings(display_name = "GPU Performance Level"))] - pub gpu_performance_level: PerformanceLevel, + // #[schema(flag = "real-time")] + // #[schema(strings(display_name = "GPU Performance Level"))] + // pub gpu_performance_level: PerformanceLevel, + + pub performance_level: Switch, #[schema(flag = "steamvr-restart")] #[schema(strings(display_name = "Extra OpenVR properties"))] @@ -1934,11 +1947,22 @@ pub fn session_settings_default() -> SettingsDefault { }, variant: HeadsetEmulationModeDefaultVariant::Quest2, }, - cpu_performance_level: PerformanceLevelDefault { - variant: PerformanceLevelDefaultVariant::SustainedLow, - }, - gpu_performance_level: PerformanceLevelDefault { - variant: PerformanceLevelDefaultVariant::SustainedLow, + // cpu_performance_level: PerformanceLevelDefault { + // variant: PerformanceLevelDefaultVariant::SustainedLow, + // }, + // gpu_performance_level: PerformanceLevelDefault { + // variant: PerformanceLevelDefaultVariant::SustainedLow, + // }, + performance_level: SwitchDefault { + enabled: false, + content: PerformanceLevelConfigDefault { + cpu: PerformanceLevelDefault { + variant: PerformanceLevelDefaultVariant::SustainedLow, + }, + gpu: PerformanceLevelDefault { + variant: PerformanceLevelDefaultVariant::SustainedLow, + }, + }, }, extra_openvr_props: default_custom_openvr_props.clone(), tracking_ref_only: false, From 0e35f07b1d2f52fbf58ea720da5e1630074d518f Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 10 Nov 2025 13:05:07 +0100 Subject: [PATCH 14/21] OpenXR Client performance level --- alvr/client_openxr/src/lib.rs | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 3284177ffa..1b148f85a6 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -95,23 +95,30 @@ fn to_xr_time(timestamp: Duration) -> xr::Time { xr::Time::from_nanos(timestamp.as_nanos() as _) } +fn convert_performance_level(level: PerformanceLevel) -> xr::PerfSettingsLevelEXT { + match level { + PerformanceLevel::PowerSavings => xr::PerfSettingsLevelEXT::POWER_SAVINGS, + PerformanceLevel::SustainedLow => xr::PerfSettingsLevelEXT::SUSTAINED_LOW, + PerformanceLevel::SustainedHigh => xr::PerfSettingsLevelEXT::SUSTAINED_HIGH, + PerformanceLevel::Boost => xr::PerfSettingsLevelEXT::BOOST, + } +} + fn set_performance_level( + xr_instance: &xr::Instance, xr_session: &xr::Session, - domain: xr::PerfSettingsDomainEXT, - level: PerformanceLevel, + cpu_level: PerformanceLevel, + gpu_level: PerformanceLevel, ) { - if let Some(performance_settings) = xr_session.exts().ext_performance_settings { + if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { let set_performance_level = performance_settings.perf_settings_set_performance_level; - let xr_level = match level { - PerformanceLevel::PowerSavings => xr::PerfSettingsLevelEXT::POWER_SAVINGS, - PerformanceLevel::SustainedLow => xr::PerfSettingsLevelEXT::SUSTAINED_LOW, - PerformanceLevel::SustainedHigh => xr::PerfSettingsLevelEXT::SUSTAINED_HIGH, - PerformanceLevel::Boost => xr::PerfSettingsLevelEXT::BOOST, - }; + let xr_cpu_level = convert_performance_level(cpu_level); + let xr_gpu_level = convert_performance_level(gpu_level); unsafe { - set_performance_level(xr_session.as_raw(), domain, xr_level); + set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, xr_cpu_level); + set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::GPU, xr_gpu_level); } } } @@ -489,13 +496,9 @@ pub fn entry_point() { if let Some(performance_level) = &config.perfromance_level { set_performance_level( + &xr_instance, &xr_session, - xr::PerfSettingsDomainEXT::CPU, performance_level.cpu.clone(), - ); - set_performance_level( - &xr_session, - xr::PerfSettingsDomainEXT::GPU, performance_level.gpu.clone(), ); } From 18faa673896a4593239781af7a83caff5928f6a7 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 10 Nov 2025 13:12:29 +0100 Subject: [PATCH 15/21] Formatting --- alvr/client_openxr/src/lib.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 88ad4948e9..25aa16b978 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -117,8 +117,16 @@ fn set_performance_level( let xr_gpu_level = convert_performance_level(gpu_level); unsafe { - set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, xr_cpu_level); - set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::GPU, xr_gpu_level); + set_performance_level( + xr_session.as_raw(), + xr::PerfSettingsDomainEXT::CPU, + xr_cpu_level, + ); + set_performance_level( + xr_session.as_raw(), + xr::PerfSettingsDomainEXT::GPU, + xr_gpu_level, + ); } } } From b85f2248eb3169ad5dcea9cca6ace74ace4f9f95 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Mon, 10 Nov 2025 13:18:30 +0100 Subject: [PATCH 16/21] Remove commented code --- alvr/packets/src/lib.rs | 3 ++- alvr/session/src/settings.rs | 14 -------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/alvr/packets/src/lib.rs b/alvr/packets/src/lib.rs index 6144e16448..66d0489204 100644 --- a/alvr/packets/src/lib.rs +++ b/alvr/packets/src/lib.rs @@ -5,7 +5,8 @@ use alvr_common::{ semver::Version, }; use alvr_session::{ - ClientsidePostProcessingConfig, CodecType, PassthroughMode, PerformanceLevelConfig, SessionConfig, Settings + ClientsidePostProcessingConfig, CodecType, PassthroughMode, PerformanceLevelConfig, + SessionConfig, Settings, }; use serde::{Deserialize, Serialize}; use serde_json as json; diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index 743063d2a0..90c694ea2f 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -1292,14 +1292,6 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef #[schema(flag = "steamvr-restart")] pub emulation_mode: HeadsetEmulationMode, - // #[schema(flag = "real-time")] - // #[schema(strings(display_name = "CPU Performance Level"))] - // pub cpu_performance_level: PerformanceLevel, - - // #[schema(flag = "real-time")] - // #[schema(strings(display_name = "GPU Performance Level"))] - // pub gpu_performance_level: PerformanceLevel, - pub performance_level: Switch, #[schema(flag = "steamvr-restart")] @@ -1947,12 +1939,6 @@ pub fn session_settings_default() -> SettingsDefault { }, variant: HeadsetEmulationModeDefaultVariant::Quest2, }, - // cpu_performance_level: PerformanceLevelDefault { - // variant: PerformanceLevelDefaultVariant::SustainedLow, - // }, - // gpu_performance_level: PerformanceLevelDefault { - // variant: PerformanceLevelDefaultVariant::SustainedLow, - // }, performance_level: SwitchDefault { enabled: false, content: PerformanceLevelConfigDefault { From 13612a99bfc46b9224cad59178ac4610c345e162 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Tue, 18 Nov 2025 18:16:24 +0100 Subject: [PATCH 17/21] Performance level refactoring --- alvr/client_openxr/src/lib.rs | 58 ++++++++++++++++++----------------- alvr/packets/src/lib.rs | 10 +++--- alvr/session/src/settings.rs | 27 ++++++++++------ 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 25aa16b978..88e8a562ec 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -95,7 +95,7 @@ fn to_xr_time(timestamp: Duration) -> xr::Time { xr::Time::from_nanos(timestamp.as_nanos() as _) } -fn convert_performance_level(level: PerformanceLevel) -> xr::PerfSettingsLevelEXT { +fn to_perf_settings_level(level: PerformanceLevel) -> xr::PerfSettingsLevelEXT { match level { PerformanceLevel::PowerSavings => xr::PerfSettingsLevelEXT::POWER_SAVINGS, PerformanceLevel::SustainedLow => xr::PerfSettingsLevelEXT::SUSTAINED_LOW, @@ -107,25 +107,15 @@ fn convert_performance_level(level: PerformanceLevel) -> xr::PerfSettingsLevelEX fn set_performance_level( xr_instance: &xr::Instance, xr_session: &xr::Session, - cpu_level: PerformanceLevel, - gpu_level: PerformanceLevel, + domain: xr::PerfSettingsDomainEXT, + level: PerformanceLevel, ) { if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { - let set_performance_level = performance_settings.perf_settings_set_performance_level; - - let xr_cpu_level = convert_performance_level(cpu_level); - let xr_gpu_level = convert_performance_level(gpu_level); - unsafe { - set_performance_level( - xr_session.as_raw(), - xr::PerfSettingsDomainEXT::CPU, - xr_cpu_level, - ); - set_performance_level( + (performance_settings.perf_settings_set_performance_level)( xr_session.as_raw(), - xr::PerfSettingsDomainEXT::GPU, - xr_gpu_level, + domain, + to_perf_settings_level(level), ); } } @@ -369,15 +359,18 @@ pub fn entry_point() { .write() .select_sources(&lobby_interaction_sources); - if let Some(performance_settings) = xr_instance.exts().ext_performance_settings { - let level = xr::PerfSettingsLevelEXT::POWER_SAVINGS; - - let set_performance_level = performance_settings.perf_settings_set_performance_level; - unsafe { - set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::CPU, level); - set_performance_level(xr_session.as_raw(), xr::PerfSettingsDomainEXT::GPU, level); - } - } + set_performance_level( + &xr_instance, + &xr_session, + xr::PerfSettingsDomainEXT::CPU, + PerformanceLevel::PowerSavings, + ); + set_performance_level( + &xr_instance, + &xr_session, + xr::PerfSettingsDomainEXT::GPU, + PerformanceLevel::PowerSavings, + ); let mut session_running = false; let mut stream_context = None::; @@ -527,12 +520,21 @@ pub fn entry_point() { passthrough_layer = None; } - if let Some(performance_level) = &config.perfromance_level { + if let Some(cpu_performance_level) = &config.cpu_performance_level { + set_performance_level( + &xr_instance, + &xr_session, + xr::PerfSettingsDomainEXT::CPU, + cpu_performance_level.clone(), + ); + } + + if let Some(gpu_performance_level) = &config.gpu_performance_level { set_performance_level( &xr_instance, &xr_session, - performance_level.cpu.clone(), - performance_level.gpu.clone(), + xr::PerfSettingsDomainEXT::GPU, + gpu_performance_level.clone(), ); } diff --git a/alvr/packets/src/lib.rs b/alvr/packets/src/lib.rs index 66d0489204..87beb627db 100644 --- a/alvr/packets/src/lib.rs +++ b/alvr/packets/src/lib.rs @@ -5,8 +5,8 @@ use alvr_common::{ semver::Version, }; use alvr_session::{ - ClientsidePostProcessingConfig, CodecType, PassthroughMode, PerformanceLevelConfig, - SessionConfig, Settings, + ClientsidePostProcessingConfig, CodecType, PassthroughMode, PerformanceLevel, SessionConfig, + Settings, }; use serde::{Deserialize, Serialize}; use serde_json as json; @@ -328,7 +328,8 @@ pub enum FirewallRulesAction { pub struct RealTimeConfig { pub passthrough: Option, pub clientside_post_processing: Option, - pub perfromance_level: Option, + pub cpu_performance_level: Option, + pub gpu_performance_level: Option, pub ext_str: String, } @@ -341,7 +342,8 @@ impl RealTimeConfig { .clientside_post_processing .clone() .into_option(), - perfromance_level: settings.headset.performance_level.clone().into_option(), + cpu_performance_level: settings.headset.performance_level.clone().cpu.into_option(), + gpu_performance_level: settings.headset.performance_level.clone().gpu.into_option(), ext_str: String::new(), // No extensions for now } } diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index 90c694ea2f..766cd78094 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -890,10 +890,10 @@ pub enum PerformanceLevel { pub struct PerformanceLevelConfig { #[schema(flag = "real-time")] #[schema(strings(display_name = "CPU"))] - pub cpu: PerformanceLevel, + pub cpu: Switch, #[schema(flag = "real-time")] #[schema(strings(display_name = "GPU"))] - pub gpu: PerformanceLevel, + pub gpu: Switch, } #[derive(SettingsSchema, Serialize, Deserialize, Clone, PartialEq)] @@ -1292,7 +1292,11 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef #[schema(flag = "steamvr-restart")] pub emulation_mode: HeadsetEmulationMode, - pub performance_level: Switch, + #[schema(strings(help = r#"Power Savings: Level 0 to 4. + Sustained Low: Level 2 to 4. + Sustained High: Level 4 to 6 (varies depending on model). + Boost: 4 to 8 (varies depending on model)."#))] + pub performance_level: PerformanceLevelConfig, #[schema(flag = "steamvr-restart")] #[schema(strings(display_name = "Extra OpenVR properties"))] @@ -1939,14 +1943,17 @@ pub fn session_settings_default() -> SettingsDefault { }, variant: HeadsetEmulationModeDefaultVariant::Quest2, }, - performance_level: SwitchDefault { - enabled: false, - content: PerformanceLevelConfigDefault { - cpu: PerformanceLevelDefault { - variant: PerformanceLevelDefaultVariant::SustainedLow, + performance_level: PerformanceLevelConfigDefault { + cpu: SwitchDefault { + enabled: false, + content: PerformanceLevelDefault { + variant: PerformanceLevelDefaultVariant::PowerSavings, }, - gpu: PerformanceLevelDefault { - variant: PerformanceLevelDefaultVariant::SustainedLow, + }, + gpu: SwitchDefault { + enabled: false, + content: PerformanceLevelDefault { + variant: PerformanceLevelDefaultVariant::PowerSavings, }, }, }, From e63da053d6a96fdda8f53edc92f98f60bc18cc7e Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Tue, 25 Nov 2025 16:24:17 +0100 Subject: [PATCH 18/21] Remove powersavings performance level for lobby --- alvr/client_openxr/src/lib.rs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/alvr/client_openxr/src/lib.rs b/alvr/client_openxr/src/lib.rs index 88e8a562ec..02d6fd93e2 100644 --- a/alvr/client_openxr/src/lib.rs +++ b/alvr/client_openxr/src/lib.rs @@ -359,19 +359,6 @@ pub fn entry_point() { .write() .select_sources(&lobby_interaction_sources); - set_performance_level( - &xr_instance, - &xr_session, - xr::PerfSettingsDomainEXT::CPU, - PerformanceLevel::PowerSavings, - ); - set_performance_level( - &xr_instance, - &xr_session, - xr::PerfSettingsDomainEXT::GPU, - PerformanceLevel::PowerSavings, - ); - let mut session_running = false; let mut stream_context = None::; let mut passthrough_layer = None; From 8dfe1c99e4fb771afc5ca6d0508b31befe72ee69 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Tue, 25 Nov 2025 21:11:38 +0100 Subject: [PATCH 19/21] More accurate performance level help strings and hide Boost level. --- alvr/session/src/settings.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index 766cd78094..d6aed36e07 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -880,9 +880,13 @@ pub enum HeadsetEmulationMode { #[derive(SettingsSchema, Serialize, Deserialize, PartialEq, Clone)] pub enum PerformanceLevel { + #[schema(strings(display_name = "Power Saving"))] PowerSavings, + #[schema(strings(display_name = "Sustained Low"))] SustainedLow, + #[schema(strings(display_name = "Sustained High"))] SustainedHigh, + #[schema(flag = "hidden")] Boost, } @@ -890,9 +894,15 @@ pub enum PerformanceLevel { pub struct PerformanceLevelConfig { #[schema(flag = "real-time")] #[schema(strings(display_name = "CPU"))] + #[schema(strings( + help = "When disabling this, the client needs to be restarted for the change to be applied." + ))] pub cpu: Switch, #[schema(flag = "real-time")] #[schema(strings(display_name = "GPU"))] + #[schema(strings( + help = "When disabling this, the client needs to be restarted for the change to be applied." + ))] pub gpu: Switch, } @@ -1292,10 +1302,11 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef #[schema(flag = "steamvr-restart")] pub emulation_mode: HeadsetEmulationMode, - #[schema(strings(help = r#"Power Savings: Level 0 to 4. - Sustained Low: Level 2 to 4. - Sustained High: Level 4 to 6 (varies depending on model). - Boost: 4 to 8 (varies depending on model)."#))] + #[schema(strings( + help = r#"Power Savings might increase latency or reduce framerate consistency but decreases temperatures and improves battery life. + Sustained Low provides consistent framerates but might increase latency if necessary. + Sustained High provides consistent framerates but increases temperature."# + ))] pub performance_level: PerformanceLevelConfig, #[schema(flag = "steamvr-restart")] From eaecf8f4d8f730fde57d622db2ea395f611dcdc8 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Tue, 25 Nov 2025 21:16:38 +0100 Subject: [PATCH 20/21] Combine duplicate strings. --- alvr/session/src/settings.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index d6aed36e07..451ee23fa1 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -893,14 +893,14 @@ pub enum PerformanceLevel { #[derive(SettingsSchema, Serialize, Deserialize, PartialEq, Clone)] pub struct PerformanceLevelConfig { #[schema(flag = "real-time")] - #[schema(strings(display_name = "CPU"))] #[schema(strings( + display_name = "CPU", help = "When disabling this, the client needs to be restarted for the change to be applied." ))] pub cpu: Switch, #[schema(flag = "real-time")] - #[schema(strings(display_name = "GPU"))] #[schema(strings( + display_name = "GPU", help = "When disabling this, the client needs to be restarted for the change to be applied." ))] pub gpu: Switch, From 38b34c15cfe63979402c17bf8803003158e627f4 Mon Sep 17 00:00:00 2001 From: Lasse Lauwerys Date: Wed, 10 Dec 2025 06:56:51 +0100 Subject: [PATCH 21/21] Update help string for performance level config --- alvr/session/src/settings.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/alvr/session/src/settings.rs b/alvr/session/src/settings.rs index 451ee23fa1..71bc177e77 100644 --- a/alvr/session/src/settings.rs +++ b/alvr/session/src/settings.rs @@ -1304,8 +1304,9 @@ Tilted: the world gets tilted when long pressing the oculus button. This is usef #[schema(strings( help = r#"Power Savings might increase latency or reduce framerate consistency but decreases temperatures and improves battery life. - Sustained Low provides consistent framerates but might increase latency if necessary. - Sustained High provides consistent framerates but increases temperature."# +Sustained Low provides consistent framerates but might increase latency if necessary. +Sustained High provides consistent framerates but increases temperature. +This is mainly for Quest headsets, mileage may vary on other devices."# ))] pub performance_level: PerformanceLevelConfig,