avis-imgv 0.3.1

Image viewer based on egui. Makes use of modern RAM amounts by loading images ahead of time for very fast responsiveness. Minimal UI with heavy use of shortcuts.
Documentation
use eframe::egui;
use std::time::Instant;

pub struct PerfMetrics {
    start_of_frame: Instant,
    longest_frametime: u128,
    longest_recent_frametime: u128,
    current_frametime: u128,
    current_frametime_micros: u128,
}

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

impl PerfMetrics {
    pub fn new() -> PerfMetrics {
        PerfMetrics {
            start_of_frame: Instant::now(),
            longest_frametime: 0,
            longest_recent_frametime: 0,
            current_frametime: 0,
            current_frametime_micros: 0,
        }
    }

    pub fn new_frame(&mut self) {
        self.start_of_frame = Instant::now()
    }

    pub fn end_frame(&mut self) {
        self.current_frametime = self.start_of_frame.elapsed().as_millis();
        self.current_frametime_micros = self.start_of_frame.elapsed().as_micros();

        if self.current_frametime > self.longest_frametime {
            self.longest_frametime = self.current_frametime;
        }

        if self.current_frametime > 0 {
            self.longest_recent_frametime = self.current_frametime;
        }
    }

    pub fn display_metrics(&mut self, ui: &mut egui::Ui) {
        ui.monospace(format!(
            "Current: {}mils • {}mics | Recent: {}mils | Longest: {}mils",
            self.current_frametime,
            self.current_frametime_micros,
            self.longest_recent_frametime,
            self.longest_frametime
        ));

        println!("{}", self.current_frametime);
    }
}