diff options
author | HampusM <hampus@hampusmat.com> | 2024-10-13 21:57:35 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2024-10-13 21:57:35 +0200 |
commit | 5e232a891c45d84d89f814eee84faeb12df0f052 (patch) | |
tree | 31db2efa2febc663cfcfe024edee6a4682a0cca3 /engine/src/performance.rs | |
parent | 04ea6ebc3f0f0f5277b402fab1557da617e273ea (diff) |
feat(engine): add extension logging frame time
Diffstat (limited to 'engine/src/performance.rs')
-rw-r--r-- | engine/src/performance.rs | 59 |
1 files changed, 59 insertions, 0 deletions
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<State>) +{ + 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<Instant>, +} |