use std::time::Duration;
use clap::{Parser, ValueEnum};
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum BackendChoice {
Auto,
Nvml,
NvidiaSmi,
Amdgpu,
Apple,
}
#[derive(Debug, Parser)]
#[command(
name = "gpu-histop",
version,
about = "High-resolution GPU history monitor"
)]
pub struct Args {
#[arg(long, value_enum, default_value_t = BackendChoice::Auto)]
pub backend: BackendChoice,
#[arg(long, default_value_t = 100)]
pub sample_ms: u64,
#[arg(long, default_value_t = 100)]
pub frame_ms: u64,
#[arg(long, default_value_t = 600)]
pub history_seconds: u64,
#[arg(long, default_value_t = 60)]
pub window_seconds: u64,
}
impl Args {
pub fn sample_interval(&self) -> Duration {
Duration::from_millis(self.sample_ms.max(10))
}
pub fn frame_interval(&self) -> Duration {
Duration::from_millis(self.frame_ms.max(16))
}
pub fn history_retention(&self) -> Duration {
Duration::from_secs(self.history_seconds.max(10))
}
pub fn window(&self) -> Duration {
Duration::from_secs(self.window_seconds.max(5))
}
}