fix: set correct poll interval by default, enforce minimum value (#802)

This commit is contained in:
Ilya Zlobintsev
2025-11-20 22:08:48 +02:00
committed by GitHub
parent f319c3f50f
commit 56d789e304
2 changed files with 28 additions and 4 deletions
+2 -1
View File
@@ -5,6 +5,7 @@ pub mod profile_rule_window;
use crate::{
app::{header::profile_rule_window::ProfileEditParams, msg::AppMsg, APP_BROKER},
config::{MAX_STATS_POLL_INTERVAL_MS, MIN_STATS_POLL_INTERVAL_MS},
CONFIG, I18N,
};
use glib::clone;
@@ -217,7 +218,7 @@ impl Component for Header {
},
gtk::SpinButton {
set_range: (250.0, 5000.0),
set_range: (MIN_STATS_POLL_INTERVAL_MS as f64, MAX_STATS_POLL_INTERVAL_MS as f64),
set_increments: (250.0, 500.0),
set_digits: 0,
set_value: CONFIG.read().stats_poll_interval_ms as f64,
+26 -3
View File
@@ -1,9 +1,12 @@
use crate::app::graphs_window::stat::StatType;
use serde::{Deserialize, Serialize};
use serde::{Deserialize, Deserializer, Serialize};
use std::{collections::HashMap, env, fs, path::PathBuf};
use tracing::{debug, error};
#[derive(Default, Serialize, Deserialize)]
pub const MIN_STATS_POLL_INTERVAL_MS: i64 = 250;
pub const MAX_STATS_POLL_INTERVAL_MS: i64 = 5000;
#[derive(Serialize, Deserialize)]
pub struct UiConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub selected_gpu: Option<String>,
@@ -11,12 +14,27 @@ pub struct UiConfig {
pub plots_time_period: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub plots_per_row: Option<u64>,
#[serde(default = "default_stats_poll_interval")]
#[serde(
default = "default_stats_poll_interval",
deserialize_with = "deserialize_poll_interval"
)]
pub stats_poll_interval_ms: i64,
#[serde(default)]
pub gpus: HashMap<String, UiGpuConfig>,
}
impl Default for UiConfig {
fn default() -> Self {
Self {
selected_gpu: None,
plots_time_period: None,
plots_per_row: None,
stats_poll_interval_ms: default_stats_poll_interval(),
gpus: HashMap::new(),
}
}
}
#[derive(Default, Serialize, Deserialize)]
pub struct UiGpuConfig {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
@@ -79,3 +97,8 @@ fn config_path() -> PathBuf {
fn default_stats_poll_interval() -> i64 {
500
}
fn deserialize_poll_interval<'de, D: Deserializer<'de>>(deserializer: D) -> Result<i64, D::Error> {
let value = i64::deserialize(deserializer)?;
Ok(value.clamp(MIN_STATS_POLL_INTERVAL_MS, MAX_STATS_POLL_INTERVAL_MS))
}