Galactica/crates/util/src/timing.rs

66 lines
1.5 KiB
Rust
Raw Normal View History

2024-01-10 18:53:19 -08:00
//! Keep track of the time we spent in each part of the game loop.
2024-01-11 20:21:07 -08:00
use std::time::{Duration, Instant};
2024-01-10 18:53:19 -08:00
/// Utility struct.
/// Keeps track of the time we spent in each part of the game loop.
2024-01-11 20:21:07 -08:00
#[derive(Debug, Clone)]
2024-01-10 18:53:19 -08:00
pub struct Timing {
2024-01-11 20:21:07 -08:00
/// The time we spent on all frame computations
pub frame: Duration,
2024-01-10 19:47:30 -08:00
frame_timer: Instant,
2024-01-10 18:53:19 -08:00
/// The time we spent simulating physics
2024-01-11 20:21:07 -08:00
pub physics_sim: Duration,
2024-01-10 19:47:30 -08:00
physics_sim_timer: Instant,
/// The time we spent updating physics ships
2024-01-11 20:21:07 -08:00
pub physics_ship: Duration,
2024-01-10 19:47:30 -08:00
physics_ship_timer: Instant,
2024-01-10 18:53:19 -08:00
}
2024-01-10 19:47:30 -08:00
// TODO: document each duration
2024-01-10 18:53:19 -08:00
impl Timing {
/// Create a new timing struct
pub fn new() -> Self {
Self {
2024-01-11 20:21:07 -08:00
frame: Duration::ZERO,
physics_sim: Duration::ZERO,
physics_ship: Duration::ZERO,
2024-01-10 19:47:30 -08:00
physics_sim_timer: Instant::now(),
physics_ship_timer: Instant::now(),
frame_timer: Instant::now(),
2024-01-10 18:53:19 -08:00
}
}
2024-01-10 19:47:30 -08:00
/// Start frame timer
pub fn start_frame(&mut self) {
self.frame_timer = Instant::now();
}
/// Start physics sim timer
pub fn start_physics_sim(&mut self) {
self.physics_sim_timer = Instant::now();
}
/// Start physics ship timer
pub fn start_physics_ships(&mut self) {
self.physics_ship_timer = Instant::now();
}
2024-01-11 22:28:02 -08:00
/// Record total frame compute time
2024-01-10 19:47:30 -08:00
pub fn mark_frame(&mut self) {
2024-01-11 20:21:07 -08:00
self.frame = self.frame_timer.elapsed();
2024-01-10 18:53:19 -08:00
}
2024-01-10 19:47:30 -08:00
/// Record physics simulation time
pub fn mark_physics_sim(&mut self) {
2024-01-11 20:21:07 -08:00
self.physics_sim = self.physics_sim_timer.elapsed();
2024-01-10 19:47:30 -08:00
}
/// Record physics ship update time
pub fn mark_physics_ships(&mut self) {
2024-01-11 20:21:07 -08:00
self.physics_ship = self.physics_ship_timer.elapsed();
2024-01-10 18:53:19 -08:00
}
}