dwipe 0.1.4

Fast, cross-platform disk cleanup tool with interactive UI
Documentation
use std::time::Instant;

use crate::config::EVENT_INTERVAL;

#[derive(Debug)]
pub struct FPSCounter {
    pub frame_count: u64,
    pub last_frame_time: Instant,
    pub skipped_frames: f64,
}

impl Default for FPSCounter {
    fn default() -> Self {
        Self::new()
    }
}

impl FPSCounter {
    fn new() -> FPSCounter {
        FPSCounter {
            frame_count: 0,
            last_frame_time: Instant::now(),
            skipped_frames: 0.0,
        }
    }

    pub fn update(&mut self) -> f64 {
        self.frame_count += 1;
        let now = Instant::now();
        let elapsed = now.duration_since(self.last_frame_time);
        let seconds = elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1_000_000_000.0;
        let fps = self.frame_count as f64 / seconds;
        let target_fps = (1000 / EVENT_INTERVAL) as f64;
        let diff = target_fps - fps;
        if diff >= 1.0 {
            self.skipped_frames += diff;
        }
        self.last_frame_time = now;
        self.frame_count = 0;
        fps
    }
}