gpu-histop 0.1.0

High-resolution GPU history monitor for NVIDIA, AMDGPU, and Apple Silicon
Documentation
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))
    }
}