From 5e232a891c45d84d89f814eee84faeb12df0f052 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 13 Oct 2024 21:57:35 +0200 Subject: feat(engine): add extension logging frame time --- engine/src/lib.rs | 1 + engine/src/performance.rs | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 engine/src/performance.rs (limited to 'engine') diff --git a/engine/src/lib.rs b/engine/src/lib.rs index c87f7f7..36e9285 100644 --- a/engine/src/lib.rs +++ b/engine/src/lib.rs @@ -34,6 +34,7 @@ pub mod lighting; pub mod material; pub mod math; pub mod mesh; +pub mod performance; pub mod projection; pub mod renderer; pub mod shader; diff --git a/engine/src/performance.rs b/engine/src/performance.rs new file mode 100644 index 0000000..ffc5c27 --- /dev/null +++ b/engine/src/performance.rs @@ -0,0 +1,59 @@ +use std::time::Instant; + +use ecs::component::local::Local; +use ecs::system::{Into, System}; +use ecs::Component; + +use crate::event::PostPresent as PostPresentEvent; + +#[derive(Debug, Default)] +#[non_exhaustive] +pub struct Extension {} + +impl ecs::extension::Extension for Extension +{ + fn collect(self, mut collector: ecs::extension::Collector<'_>) + { + collector.add_system( + PostPresentEvent, + log_perf.into_system().initialize((State::default(),)), + ); + } +} + +#[cfg(feature = "debug")] +macro_rules! log_perf { + ($($tt: tt)*) => { + tracing::info!($($tt)*); + }; +} + +#[cfg(not(feature = "debug"))] +macro_rules! log_perf { + ($($tt: tt)*) => { + println!($($tt)*); + }; +} + +fn log_perf(mut state: Local) +{ + let Some(last_time) = state.last_time else { + state.last_time = Some(Instant::now()); + return; + }; + + let time_now = Instant::now(); + + state.last_time = Some(time_now); + + log_perf!( + "Frame time: {}us", + time_now.duration_since(last_time).as_micros() + ); +} + +#[derive(Debug, Default, Component)] +struct State +{ + last_time: Option, +} -- cgit v1.2.3-18-g5258