diff options
| author | Crozet Sébastien <developer@crozet.re> | 2021-07-11 18:19:28 +0200 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2021-07-11 18:20:01 +0200 |
| commit | 71519b72deefa9c0b564d7f790d6c7c564d58a5e (patch) | |
| tree | 15525a9b1f779174435482ff6c60c13e519d19ff | |
| parent | 62d6b0651b35b5b354c18b386d8a4e2c9669fd2f (diff) | |
| download | rapier-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.rs | 1 | ||||
| -rw-r--r-- | src/geometry/narrow_phase.rs | 29 | ||||
| -rw-r--r-- | src/pipeline/physics_pipeline.rs | 6 | ||||
| -rw-r--r-- | src_testbed/harness/mod.rs | 17 | ||||
| -rw-r--r-- | src_testbed/objects/node.rs | 2 | ||||
| -rw-r--r-- | src_testbed/testbed.rs | 12 |
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() { |
