mirror of
https://github.com/emilk/egui.git
synced 2026-08-31 05:40:03 -04:00
Much more accurate cpu_usage timing (#3913)
`frame.info.cpu_usage` now includes time for tessellation and rendering, but excludes vsync and context switching.
This commit is contained in:
50
crates/eframe/src/stopwatch.rs
Normal file
50
crates/eframe/src/stopwatch.rs
Normal file
@@ -0,0 +1,50 @@
|
||||
#![allow(dead_code)] // not everything is used on wasm
|
||||
|
||||
use web_time::Instant;
|
||||
|
||||
pub struct Stopwatch {
|
||||
total_time_ns: u128,
|
||||
|
||||
/// None = not running
|
||||
start: Option<Instant>,
|
||||
}
|
||||
|
||||
impl Stopwatch {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
total_time_ns: 0,
|
||||
start: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn start(&mut self) {
|
||||
assert!(self.start.is_none());
|
||||
self.start = Some(Instant::now());
|
||||
}
|
||||
|
||||
pub fn pause(&mut self) {
|
||||
let start = self.start.take().unwrap();
|
||||
let duration = start.elapsed();
|
||||
self.total_time_ns += duration.as_nanos();
|
||||
}
|
||||
|
||||
pub fn resume(&mut self) {
|
||||
assert!(self.start.is_none());
|
||||
self.start = Some(Instant::now());
|
||||
}
|
||||
|
||||
pub fn total_time_ns(&self) -> u128 {
|
||||
if let Some(start) = self.start {
|
||||
// Running
|
||||
let duration = start.elapsed();
|
||||
self.total_time_ns + duration.as_nanos()
|
||||
} else {
|
||||
// Paused
|
||||
self.total_time_ns
|
||||
}
|
||||
}
|
||||
|
||||
pub fn total_time_sec(&self) -> f32 {
|
||||
self.total_time_ns() as f32 * 1e-9
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user