From 87bf44241b7cebac2b52a2503590c27576fc3edf Mon Sep 17 00:00:00 2001 From: Imbris Date: Sun, 12 Mar 2023 17:02:47 -0400 Subject: [PATCH] Add metrics for timing subsections of State::tick --- client/src/lib.rs | 1 + common/base/src/lib.rs | 2 - common/state/src/state.rs | 58 ++++++++++++++++++++++--- common/systems/tests/character_state.rs | 1 + common/systems/tests/phys/basic.rs | 1 + common/systems/tests/phys/utils.rs | 1 + server/src/lib.rs | 8 ++++ server/src/metrics.rs | 11 +++++ 8 files changed, 76 insertions(+), 7 deletions(-) diff --git a/client/src/lib.rs b/client/src/lib.rs index 34812b897b..f691919b4c 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -1787,6 +1787,7 @@ impl Client { add_foreign_systems(dispatch_builder); }, true, + None, ); // TODO: avoid emitting these in the first place let _ = self diff --git a/common/base/src/lib.rs b/common/base/src/lib.rs index 098d881849..6e9b2771a7 100644 --- a/common/base/src/lib.rs +++ b/common/base/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(fundamental)] - pub mod userdata_dir; pub use userdata_dir::userdata_dir; diff --git a/common/state/src/state.rs b/common/state/src/state.rs index 96ac72f74e..6c151736ea 100644 --- a/common/state/src/state.rs +++ b/common/state/src/state.rs @@ -35,7 +35,7 @@ use specs::{ storage::{MaskedStorage as EcsMaskedStorage, Storage as EcsStorage}, Component, DispatcherBuilder, Entity as EcsEntity, WorldExt, }; -use std::sync::Arc; +use std::{sync::Arc, time::Instant}; use timer_queue::TimerQueue; use vek::*; @@ -587,8 +587,19 @@ impl State { dt: Duration, add_systems: impl Fn(&mut DispatcherBuilder), update_terrain_and_regions: bool, + mut metrics: Option<&mut StateTickMetrics>, ) { span!(_guard, "tick", "State::tick"); + + // Timing code for server metrics + macro_rules! section_span { + ($guard:ident, $label:literal) => { + span!(span_guard, $label); + let metrics_guard = metrics.as_mut().map(|m| MetricsGuard::new($label, m)); + let $guard = (span_guard, metrics_guard); + }; + } + // Change the time accordingly. self.ecs.write_resource::().0 += dt.as_secs_f64() * DAY_CYCLE_FACTOR; self.ecs.write_resource::