aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2021-07-11 18:19:28 +0200
committerCrozet Sébastien <developer@crozet.re>2021-07-11 18:20:01 +0200
commit71519b72deefa9c0b564d7f790d6c7c564d58a5e (patch)
tree15525a9b1f779174435482ff6c60c13e519d19ff
parent62d6b0651b35b5b354c18b386d8a4e2c9669fd2f (diff)
downloadrapier-71519b72deefa9c0b564d7f790d6c7c564d58a5e.tar.gz
rapier-71519b72deefa9c0b564d7f790d6c7c564d58a5e.tar.bz2
rapier-71519b72deefa9c0b564d7f790d6c7c564d58a5e.zip
Various broken performance experiments
-rw-r--r--src/geometry/broad_phase_multi_sap/broad_phase_pair_event.rs1
-rw-r--r--src/geometry/narrow_phase.rs29
-rw-r--r--src/pipeline/physics_pipeline.rs6
-rw-r--r--src_testbed/harness/mod.rs17
-rw-r--r--src_testbed/objects/node.rs2
-rw-r--r--src_testbed/testbed.rs12
6 files changed, 49 insertions, 18 deletions
diff --git a/src/geometry/broad_phase_multi_sap/broad_phase_pair_event.rs b/src/geometry/broad_phase_multi_sap/broad_phase_pair_event.rs
index fdc9bfd..b08814b 100644
--- a/src/geometry/broad_phase_multi_sap/broad_phase_pair_event.rs
+++ b/src/geometry/broad_phase_multi_sap/broad_phase_pair_event.rs
@@ -27,6 +27,7 @@ impl ColliderPair {
}
}
+#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum BroadPhasePairEvent {
AddPair(ColliderPair),
DeletePair(ColliderPair),
diff --git a/src/geometry/narrow_phase.rs b/src/geometry/narrow_phase.rs
index bbabc95..843015e 100644
--- a/src/geometry/narrow_phase.rs
+++ b/src/geometry/narrow_phase.rs
@@ -654,23 +654,31 @@ impl NarrowPhase {
+ ComponentSet<ColliderFlags>
+ ComponentSetOption<ColliderParent>,
{
+ let mut num_delete = 0;
for event in broad_phase_events {
match event {
BroadPhasePairEvent::AddPair(pair) => {
self.add_pair(colliders, pair);
}
BroadPhasePairEvent::DeletePair(pair) => {
- self.remove_pair(
- islands.as_deref_mut(),
- colliders,
- bodies,
- pair,
- events,
- PairRemovalMode::Auto,
- );
+ num_delete += 1;
+ // self.remove_pair(
+ // islands.as_deref_mut(),
+ // colliders,
+ // bodies,
+ // pair,
+ // events,
+ // PairRemovalMode::Auto,
+ // );
}
}
}
+
+ println!(
+ "Delete events: {}, add events: {}",
+ num_delete,
+ broad_phase_events.len() - num_delete
+ );
}
pub(crate) fn compute_intersections<Bodies, Colliders>(
@@ -818,6 +826,9 @@ impl NarrowPhase {
}
let query_dispatcher = &*self.query_dispatcher;
+ println!("num threads: {}", rayon::current_num_threads());
+ let t0 = instant::now();
+ println!("Num contacts: {}", self.contact_graph.graph.edges.len());
// TODO: don't iterate on all the edges.
par_iter_mut!(&mut self.contact_graph.graph.edges).for_each(|edge| {
@@ -1021,6 +1032,8 @@ impl NarrowPhase {
pair.has_any_active_contact = has_any_active_contact;
}
});
+
+ println!("NF time: {}", instant::now() - t0);
}
/// Retrieve all the interactions with at least one contact point, happening between two active bodies.
diff --git a/src/pipeline/physics_pipeline.rs b/src/pipeline/physics_pipeline.rs
index 80d75eb..0ac734a 100644
--- a/src/pipeline/physics_pipeline.rs
+++ b/src/pipeline/physics_pipeline.rs
@@ -124,6 +124,7 @@ impl PhysicsPipeline {
self.counters.cd.narrow_phase_time.resume();
// Update narrow-phase.
+ let t0 = instant::now();
if handle_user_changes {
narrow_phase.handle_user_changes(
Some(islands),
@@ -134,6 +135,9 @@ impl PhysicsPipeline {
events,
);
}
+ println!("A time: {}", instant::now() - t0);
+ let t0 = instant::now();
+ println!("Num BF events: {}", self.broad_phase_events.len());
narrow_phase.register_pairs(
Some(islands),
colliders,
@@ -141,6 +145,8 @@ impl PhysicsPipeline {
&self.broad_phase_events,
events,
);
+ println!("B time: {}", instant::now() - t0);
+
narrow_phase.compute_contacts(
integration_parameters.prediction_distance,
bodies,
diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs
index c85fbc4..f8e553c 100644
--- a/src_testbed/harness/mod.rs
+++ b/src_testbed/harness/mod.rs
@@ -150,6 +150,13 @@ impl Harness {
pub fn step_with_graphics(&mut self, mut graphics: Option<&mut TestbedGraphics>) {
#[cfg(feature = "parallel")]
{
+ if self.state.thread_pool.current_num_threads() != self.state.num_threads {
+ self.state.thread_pool = rapier::rayon::ThreadPoolBuilder::new()
+ .num_threads(self.state.num_threads)
+ .build()
+ .unwrap();
+ }
+
let physics = &mut self.physics;
let event_handler = &self.event_handler;
self.state.thread_pool.install(|| {
@@ -184,11 +191,11 @@ impl Harness {
&self.event_handler,
);
- self.physics.query_pipeline.update(
- &self.physics.islands,
- &self.physics.bodies,
- &self.physics.colliders,
- );
+ // self.physics.query_pipeline.update(
+ // &self.physics.islands,
+ // &self.physics.bodies,
+ // &self.physics.colliders,
+ // );
for plugin in &mut self.plugins {
plugin.step(&mut self.physics, &self.state)
diff --git a/src_testbed/objects/node.rs b/src_testbed/objects/node.rs
index 9acc62e..f1a1dea 100644
--- a/src_testbed/objects/node.rs
+++ b/src_testbed/objects/node.rs
@@ -185,7 +185,7 @@ impl EntityWithGraphics {
// Ball mesh
//
let ball = Mesh::from(shape::Icosphere {
- subdivisions: 2,
+ subdivisions: 0,
radius: 1.0,
});
out.insert(ShapeType::Ball, meshes.add(ball));
diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs
index 6f022f2..dbe2415 100644
--- a/src_testbed/testbed.rs
+++ b/src_testbed/testbed.rs
@@ -396,7 +396,7 @@ impl TestbedApp {
..Default::default()
})
.insert_resource(ClearColor(Color::rgb(0.85, 0.85, 0.85)))
- .insert_resource(Msaa { samples: 2 })
+ // .insert_resource(Msaa { samples: 2 })
.insert_resource(WgpuOptions {
features: WgpuFeatures {
// The Wireframe requires NonFillPolygonMode feature
@@ -487,6 +487,10 @@ impl<'a, 'b, 'c, 'd> Testbed<'a, 'b, 'c, 'd> {
&mut self.harness.physics.integration_parameters
}
+ pub fn pause(&mut self) {
+ self.state.running = RunMode::Stop;
+ }
+
pub fn physics_state_mut(&mut self) -> &mut PhysicsState {
&mut self.harness.physics
}
@@ -783,9 +787,9 @@ fn draw_contacts(_nf: &NarrowPhase, _colliders: &ColliderSet) {
fn setup_graphics_environment(mut commands: Commands) {
let lights = [
Vec3::new(100.0, 100.0, 100.0),
- Vec3::new(100.0, 100.0, -100.0),
- Vec3::new(-100.0, 100.0, -100.0),
- Vec3::new(-100.0, 100.0, 100.0),
+ // Vec3::new(100.0, 100.0, -100.0),
+ // Vec3::new(-100.0, 100.0, -100.0),
+ // Vec3::new(-100.0, 100.0, 100.0),
];
for light in lights.iter() {