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}