Files
rapier/src/counters/collision_detection_counters.rs
Sébastien Crozet 48de83817e feat: persistent islands + manifold reduction (#895)
* feat: initial implementation of contact manifold reduction

* feat: try bepu-like manifold reduction

* feat: simplification of the constraints counting and indexing logic

* feat: add concept of incremental islands with a single awake island

More islands manager fixes

* feat: start adding support for multiple awake islands

* feat: add more timings

* feat: implement incremental island split & merge

* chore: refactor islands manager into multiple files

* chore: refactor manifold reduction to its own file + add naive reduction method

* feat: add islands manager validation checks

* fix various bugs in the new islands system

* chore: remove redundant active_set_offset field
2026-01-09 17:04:02 +01:00

46 lines
1.6 KiB
Rust

use crate::counters::Timer;
use std::fmt::{Display, Formatter, Result};
/// Performance counters related to collision detection.
#[derive(Default, Clone, Copy)]
pub struct CollisionDetectionCounters {
/// Number of contact pairs detected.
pub ncontact_pairs: usize,
/// Time spent for the broad-phase of the collision detection.
pub broad_phase_time: Timer,
/// Time spent by the final broad-phase AABB update after body movement to keep
/// user scene queries valid.
pub final_broad_phase_time: Timer,
/// Time spent for the narrow-phase of the collision detection.
pub narrow_phase_time: Timer,
}
impl CollisionDetectionCounters {
/// Creates a new counter initialized to zero.
pub fn new() -> Self {
CollisionDetectionCounters {
ncontact_pairs: 0,
broad_phase_time: Timer::new(),
final_broad_phase_time: Timer::new(),
narrow_phase_time: Timer::new(),
}
}
/// Resets all the counters and timers.
pub fn reset(&mut self) {
self.ncontact_pairs = 0;
self.broad_phase_time.reset();
self.final_broad_phase_time.reset();
self.narrow_phase_time.reset();
}
}
impl Display for CollisionDetectionCounters {
fn fmt(&self, f: &mut Formatter) -> Result {
writeln!(f, "Number of contact pairs: {}", self.ncontact_pairs)?;
writeln!(f, "Broad-phase time: {}", self.broad_phase_time)?;
writeln!(f, "Final broad-phase time: {}", self.final_broad_phase_time)?;
writeln!(f, "Narrow-phase time: {}", self.narrow_phase_time)
}
}