From 36466b2c7db02159facbe9be217820513dd9cf98 Mon Sep 17 00:00:00 2001 From: Ilya Zlobintsev Date: Sat, 4 Mar 2023 13:11:05 +0200 Subject: [PATCH] feat: gui for enabling overclocking --- lact-client/src/lib.rs | 1 + lact-daemon/src/server/mod.rs | 2 + lact-gui/src/app/mod.rs | 41 +++++++++++++++++++++ lact-gui/src/app/root_stack/oc_page/mod.rs | 43 ++++++++++++++++++---- 4 files changed, 79 insertions(+), 8 deletions(-) diff --git a/lact-client/src/lib.rs b/lact-client/src/lib.rs index 8ebd514..9ca52b2 100644 --- a/lact-client/src/lib.rs +++ b/lact-client/src/lib.rs @@ -89,6 +89,7 @@ impl DaemonClient { } request_plain!(get_system_info, SystemInfo, SystemInfo); + request_plain!(enable_overdrive, EnableOverdrive, ()); request_with_id!(get_device_info, DeviceInfo, DeviceInfo); request_with_id!(get_device_stats, DeviceStats, DeviceStats); request_with_id!(get_device_clocks_info, DeviceClocksInfo, ClocksInfo); diff --git a/lact-daemon/src/server/mod.rs b/lact-daemon/src/server/mod.rs index a642654..5bda86e 100644 --- a/lact-daemon/src/server/mod.rs +++ b/lact-daemon/src/server/mod.rs @@ -14,6 +14,8 @@ use tokio::{ }; use tracing::{debug, error, instrument}; +pub use system::MODULE_CONF_PATH; + pub struct Server { pub handler: Handler, listener: UnixListener, diff --git a/lact-gui/src/app/mod.rs b/lact-gui/src/app/mod.rs index b53e972..1b8e999 100644 --- a/lact-gui/src/app/mod.rs +++ b/lact-gui/src/app/mod.rs @@ -11,6 +11,7 @@ use header::Header; use lact_client::schema::request::SetClocksCommand; use lact_client::schema::DeviceStats; use lact_client::DaemonClient; +use lact_daemon::MODULE_CONF_PATH; use root_stack::RootStack; use std::sync::{Arc, RwLock}; use std::thread; @@ -127,6 +128,12 @@ impl App { app.set_initial(&gpu_id) })); + if let Some(ref button) = app.root_stack.oc_page.enable_overclocking_button { + button.connect_clicked(clone!(@strong app => move |_| { + app.enable_overclocking(); + })); + } + app.start_stats_update_loop(current_gpu_id); app.window.show(); @@ -339,6 +346,40 @@ impl App { Ok(()) } + + fn enable_overclocking(&self) { + let text = format!("This will enable the overdrive feature of the amdgpu driver by creating a file at {MODULE_CONF_PATH}. Are you sure you want to do this?"); + let dialog = MessageDialog::builder() + .title("Enable Overclocking") + .use_markup(true) + .text(text) + .message_type(MessageType::Question) + .buttons(ButtonsType::OkCancel) + .transient_for(&self.window) + .build(); + + dialog.run_async(clone!(@strong self as app => move |diag, response| { + if response == ResponseType::Ok { + match app.daemon_client.enable_overdrive().and_then(|buffer| buffer.inner()) { + Ok(_) => { + let success_dialog = MessageDialog::builder() + .title("Success") + .text("Overclocking successfully enabled. A system reboot is required to apply the changes") + .message_type(MessageType::Info) + .buttons(ButtonsType::Ok) + .build(); + success_dialog.run_async(move |diag, _| { + diag.hide(); + }); + } + Err(err) => { + show_error(&app.window, err); + } + } + } + diag.hide(); + })); + } } enum GuiUpdateMsg { diff --git a/lact-gui/src/app/root_stack/oc_page/mod.rs b/lact-gui/src/app/root_stack/oc_page/mod.rs index ec7856a..9642bdd 100644 --- a/lact-gui/src/app/root_stack/oc_page/mod.rs +++ b/lact-gui/src/app/root_stack/oc_page/mod.rs @@ -15,6 +15,9 @@ use power_cap_frame::PowerCapFrame; use stats_frame::StatsFrame; use tracing::warn; +const OVERCLOCKING_DISABLED_TEXT: &str = "Overclocking support is not enabled! \ +You can still change basic settings, but the more advanced clocks and voltage control will not be available."; + #[derive(Clone)] pub struct OcPage { pub container: Box, @@ -22,6 +25,7 @@ pub struct OcPage { pub performance_frame: PerformanceFrame, power_cap_frame: PowerCapFrame, pub clocks_frame: ClocksFrame, + pub enable_overclocking_button: Option