Skip to main content

gpu_histop/
config.rs

1use std::time::Duration;
2
3use clap::{Parser, ValueEnum};
4
5#[derive(Debug, Clone, Copy, ValueEnum)]
6pub enum BackendChoice {
7    Auto,
8    Nvml,
9    NvidiaSmi,
10    Amdgpu,
11    Apple,
12}
13
14#[derive(Debug, Parser)]
15#[command(
16    name = "gpu-histop",
17    version,
18    about = "High-resolution GPU history monitor"
19)]
20pub struct Args {
21    #[arg(long, value_enum, default_value_t = BackendChoice::Auto)]
22    pub backend: BackendChoice,
23
24    #[arg(long, default_value_t = 100)]
25    pub sample_ms: u64,
26
27    #[arg(long, default_value_t = 100)]
28    pub frame_ms: u64,
29
30    #[arg(long, default_value_t = 600)]
31    pub history_seconds: u64,
32
33    #[arg(long, default_value_t = 60)]
34    pub window_seconds: u64,
35}
36
37impl Args {
38    pub fn sample_interval(&self) -> Duration {
39        Duration::from_millis(self.sample_ms.max(10))
40    }
41
42    pub fn frame_interval(&self) -> Duration {
43        Duration::from_millis(self.frame_ms.max(16))
44    }
45
46    pub fn history_retention(&self) -> Duration {
47        Duration::from_secs(self.history_seconds.max(10))
48    }
49
50    pub fn window(&self) -> Duration {
51        Duration::from_secs(self.window_seconds.max(5))
52    }
53}