Skip to content

Commit 9003e9f

Browse files
committed
Clean up diagnostics
1 parent 255a24f commit 9003e9f

File tree

9 files changed

+79
-68
lines changed

9 files changed

+79
-68
lines changed

src/collider_tree/diagnostics.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use bevy::{
2+
diagnostic::DiagnosticPath,
3+
prelude::{ReflectResource, Resource},
4+
reflect::Reflect,
5+
};
6+
use core::time::Duration;
7+
8+
use crate::diagnostics::{PhysicsDiagnostics, impl_diagnostic_paths};
9+
10+
/// Diagnostics for [collider trees](crate::collider_tree).
11+
#[derive(Resource, Debug, Default, Reflect)]
12+
#[reflect(Resource, Debug)]
13+
pub struct ColliderTreeDiagnostics {
14+
/// Time spent optimizing [collider trees](crate::collider_tree).
15+
pub optimize: Duration,
16+
/// Time spent updating AABBs and BVH nodes.
17+
pub update: Duration,
18+
}
19+
20+
impl PhysicsDiagnostics for ColliderTreeDiagnostics {
21+
fn timer_paths(&self) -> Vec<(&'static DiagnosticPath, Duration)> {
22+
vec![(Self::OPTIMIZE, self.optimize), (Self::UPDATE, self.update)]
23+
}
24+
}
25+
26+
impl_diagnostic_paths! {
27+
impl ColliderTreeDiagnostics {
28+
OPTIMIZE: "avian/collider_tree/optimize",
29+
UPDATE: "avian/collider_tree/update",
30+
}
31+
}

src/collider_tree/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
//! [`SpatialQuery`]: crate::spatial_query::SpatialQuery
2222
//! [`BvhBroadPhasePlugin`]: crate::collision::broad_phase::bvh::BvhBroadPhasePlugin
2323
24+
mod diagnostics;
2425
mod optimization;
2526
mod proxy_key;
2627
mod tree;
2728
mod update;
2829

30+
pub use diagnostics::ColliderTreeDiagnostics;
2931
pub use optimization::{ColliderTreeOptimization, TreeOptimizationMode};
3032
pub use proxy_key::{ColliderTreeProxyKey, ColliderTreeType, ProxyId};
3133
pub use tree::{ColliderTree, ColliderTreeProxy, ColliderTreeProxyFlags, ColliderTreeWorkspace};
@@ -85,6 +87,11 @@ impl<C: AnyCollider> Plugin for ColliderTreePlugin<C> {
8587
ColliderTreeSystems::EndOptimize.in_set(PhysicsStepSystems::Finalize),
8688
);
8789
}
90+
91+
fn finish(&self, app: &mut App) {
92+
// Register timer diagnostics for collider trees.
93+
app.register_physics_diagnostics::<ColliderTreeDiagnostics>();
94+
}
8895
}
8996

9097
/// System sets for managing [`ColliderTrees`].

src/collider_tree/optimization.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::{
2-
collider_tree::{ColliderTree, ColliderTreeSystems, ColliderTrees, MovedProxies},
3-
collision::broad_phase::BroadPhaseDiagnostics,
2+
collider_tree::{
3+
ColliderTree, ColliderTreeDiagnostics, ColliderTreeSystems, ColliderTrees, MovedProxies,
4+
},
45
prelude::*,
56
};
67
use bevy::{
@@ -158,7 +159,7 @@ fn optimize_trees(
158159
mut optimization: ResMut<OptimizationTask>,
159160
optimization_settings: Res<ColliderTreeOptimization>,
160161
moved_proxies: ResMut<MovedProxies>,
161-
mut diagnostics: ResMut<BroadPhaseDiagnostics>,
162+
mut diagnostics: ResMut<ColliderTreeDiagnostics>,
162163
) {
163164
let start = crate::utils::Instant::now();
164165

@@ -244,7 +245,7 @@ fn block_on_optimize_trees(
244245
mut commands: Commands,
245246
mut collider_trees: ResMut<ColliderTrees>,
246247
mut optimization: ResMut<OptimizationTask>,
247-
mut diagnostics: ResMut<BroadPhaseDiagnostics>,
248+
mut diagnostics: ResMut<ColliderTreeDiagnostics>,
248249
) {
249250
let start = crate::utils::Instant::now();
250251

src/collider_tree/update.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ use core::marker::PhantomData;
44

55
use crate::{
66
collider_tree::{
7-
ColliderTreeProxy, ColliderTreeProxyKey, ColliderTreeSystems, ColliderTreeType,
8-
ColliderTrees, ProxyId, tree::ColliderTreeProxyFlags,
7+
ColliderTreeDiagnostics, ColliderTreeProxy, ColliderTreeProxyKey, ColliderTreeSystems,
8+
ColliderTreeType, ColliderTrees, ProxyId, tree::ColliderTreeProxyFlags,
99
},
10-
collision::{broad_phase::BroadPhaseDiagnostics, collider::EnlargedAabb},
10+
collision::collider::EnlargedAabb,
1111
data_structures::bit_vec::BitVec,
1212
dynamics::solver::solver_body::SolverBody,
1313
prelude::*,
@@ -602,7 +602,7 @@ fn update_dynamic_kinematic_aabbs<C: AnyCollider>(
602602
mut enlarged_proxies: ResMut<EnlargedProxies>,
603603
time: Res<Time>,
604604
collider_context: StaticSystemParam<C::Context>,
605-
mut diagnostics: ResMut<BroadPhaseDiagnostics>,
605+
mut diagnostics: ResMut<ColliderTreeDiagnostics>,
606606
mut last_tick: ResMut<LastDynamicKinematicAabbUpdate>,
607607
system_tick: SystemChangeTick,
608608
) {
@@ -827,7 +827,7 @@ fn update_static_aabbs<C: AnyCollider>(
827827
narrow_phase_config: Res<NarrowPhaseConfig>,
828828
length_unit: Res<PhysicsLengthUnit>,
829829
mut collider_trees: ResMut<ColliderTrees>,
830-
mut diagnostics: ResMut<BroadPhaseDiagnostics>,
830+
mut diagnostics: ResMut<ColliderTreeDiagnostics>,
831831
collider_context: StaticSystemParam<C::Context>,
832832
) {
833833
let start = crate::utils::Instant::now();
@@ -892,7 +892,7 @@ fn update_standalone_aabbs<C: AnyCollider>(
892892
narrow_phase_config: Res<NarrowPhaseConfig>,
893893
length_unit: Res<PhysicsLengthUnit>,
894894
mut collider_trees: ResMut<ColliderTrees>,
895-
mut diagnostics: ResMut<BroadPhaseDiagnostics>,
895+
mut diagnostics: ResMut<ColliderTreeDiagnostics>,
896896
collider_context: StaticSystemParam<C::Context>,
897897
) {
898898
let start = crate::utils::Instant::now();

src/collision/broad_phase/bvh_broad_phase.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::{
55
ColliderTree, ColliderTreeProxy, ColliderTreeProxyFlags, ColliderTreeProxyKey,
66
ColliderTreeType, ColliderTrees, MovedProxies, ProxyId,
77
},
8-
collision::broad_phase::BroadPhaseDiagnostics,
8+
collision::CollisionDiagnostics,
99
data_structures::pair_key::PairKey,
1010
dynamics::solver::joint_graph::JointGraph,
1111
prelude::*,
@@ -55,7 +55,7 @@ fn collect_collision_pairs<H: CollisionHooks>(
5555
par_commands: ParallelCommands,
5656
mut contact_graph: ResMut<ContactGraph>,
5757
joint_graph: Res<JointGraph>,
58-
mut diagnostics: ResMut<BroadPhaseDiagnostics>,
58+
mut diagnostics: ResMut<CollisionDiagnostics>,
5959
) where
6060
for<'w, 's> SystemParamItem<'w, 's, H>: CollisionHooks,
6161
{
@@ -181,7 +181,7 @@ fn collect_collision_pairs<H: CollisionHooks>(
181181
});
182182
}
183183

184-
diagnostics.find_pairs += start.elapsed();
184+
diagnostics.broad_phase += start.elapsed();
185185
}
186186

187187
#[inline]

src/collision/broad_phase/diagnostics.rs

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/collision/broad_phase/mod.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,12 @@
148148
//! # }
149149
//! ```
150150
151-
mod diagnostics;
152-
pub use diagnostics::BroadPhaseDiagnostics;
153-
154151
mod bvh_broad_phase;
155152
pub use bvh_broad_phase::BvhBroadPhasePlugin;
156153

157-
use crate::{dynamics::solver::joint_graph::JointGraph, prelude::*};
154+
use crate::{
155+
collision::CollisionDiagnostics, dynamics::solver::joint_graph::JointGraph, prelude::*,
156+
};
158157
use bevy::prelude::*;
159158

160159
/// The core [broad phase](crate::collision::broad_phase) plugin that sets up the
@@ -187,8 +186,8 @@ impl Plugin for BroadPhaseCorePlugin {
187186
}
188187

189188
fn finish(&self, app: &mut App) {
190-
// Register timer diagnostics for the broad phase.
191-
app.register_physics_diagnostics::<BroadPhaseDiagnostics>();
189+
// Register timer diagnostics for collision detection.
190+
app.register_physics_diagnostics::<CollisionDiagnostics>();
192191
}
193192
}
194193

src/collision/diagnostics.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,20 @@ use crate::diagnostics::{PhysicsDiagnostics, impl_diagnostic_paths};
1111
#[derive(Resource, Debug, Default, Reflect)]
1212
#[reflect(Resource, Debug)]
1313
pub struct CollisionDiagnostics {
14-
/// Time spent updating contacts in the narrow phase.
14+
/// Time spent finding potential collision pairs in the [broad phase](crate::collision::broad_phase).
15+
pub broad_phase: Duration,
16+
/// Time spent updating contacts in the [narrow phase](crate::collision::narrow_phase).
1517
pub narrow_phase: Duration,
1618
/// The number of contacts.
1719
pub contact_count: u32,
1820
}
1921

2022
impl PhysicsDiagnostics for CollisionDiagnostics {
2123
fn timer_paths(&self) -> Vec<(&'static DiagnosticPath, Duration)> {
22-
vec![(Self::NARROW_PHASE, self.narrow_phase)]
24+
vec![
25+
(Self::BROAD_PHASE, self.broad_phase),
26+
(Self::NARROW_PHASE, self.narrow_phase),
27+
]
2328
}
2429

2530
fn counter_paths(&self) -> Vec<(&'static DiagnosticPath, u32)> {
@@ -29,6 +34,7 @@ impl PhysicsDiagnostics for CollisionDiagnostics {
2934

3035
impl_diagnostic_paths! {
3136
impl CollisionDiagnostics {
37+
BROAD_PHASE: "avian/collision/broad_phase",
3238
NARROW_PHASE: "avian/collision/update_contacts",
3339
CONTACT_COUNT: "avian/collision/contact_count",
3440
}

src/diagnostics/ui.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@
33
//!
44
//! See [`PhysicsDiagnosticsPlugin`] for more information.
55
6+
use crate::collider_tree::ColliderTreeDiagnostics;
67
use crate::dynamics::solver::constraint_graph::ConstraintGraph;
7-
use crate::{
8-
collision::{CollisionDiagnostics, broad_phase::BroadPhaseDiagnostics},
9-
dynamics::solver::SolverDiagnostics,
10-
};
8+
use crate::{collision::CollisionDiagnostics, dynamics::solver::SolverDiagnostics};
119
use crate::{diagnostics::*, prelude::*};
1210
use bevy::color::palettes::tailwind::{GREEN_400, RED_400};
1311
use bevy::diagnostic::{DiagnosticPath, DiagnosticsStore, FrameTimeDiagnosticsPlugin};
@@ -239,12 +237,11 @@ fn build_diagnostic_texts(cmd: &mut RelatedSpawnerCommands<ChildOf>) {
239237
});
240238

241239
// Collision detection and solver timers
240+
type Collision = CollisionDiagnostics;
242241
type Solver = SolverDiagnostics;
243242
let collision_timers = vec![
244-
("Find Pairs", BroadPhaseDiagnostics::FIND_PAIRS),
245-
("Update AABBs", BroadPhaseDiagnostics::UPDATE),
246-
("Rebuild BVH", BroadPhaseDiagnostics::OPTIMIZE),
247-
("Narrow Phase", CollisionDiagnostics::NARROW_PHASE),
243+
("Broad Phase", Collision::BROAD_PHASE),
244+
("Narrow Phase", Collision::NARROW_PHASE),
248245
];
249246
let solver_timers = vec![
250247
("Prepare Constraints", Solver::PREPARE_CONSTRAINTS),
@@ -282,6 +279,15 @@ fn build_diagnostic_texts(cmd: &mut RelatedSpawnerCommands<ChildOf>) {
282279
cmd.timer_texts(spatial_query_timers, AdaptiveTextSettings::new(0.0, 4.0));
283280
});
284281

282+
// Collider tree timers
283+
let collider_tree_timers = vec![
284+
("Update AABBs", ColliderTreeDiagnostics::UPDATE),
285+
("Optimize Trees", ColliderTreeDiagnostics::OPTIMIZE),
286+
];
287+
cmd.diagnostic_group("Collider Trees").with_children(|cmd| {
288+
cmd.timer_texts(collider_tree_timers, AdaptiveTextSettings::new(0.0, 4.0));
289+
});
290+
285291
cmd.diagnostic_group("Other").with_children(|cmd| {
286292
cmd.timer_text(
287293
"Other",

0 commit comments

Comments
 (0)