From c6e04869ead72b20ef8da0ca82b4b30d5eb4ec5b Mon Sep 17 00:00:00 2001 From: Bruno Dilly Date: Thu, 4 Oct 2012 22:40:52 +0000 Subject: [PATCH] ephysics: don't send a msg per sub step Only send one msg at the end of the simulation step. SVN revision: 77471 --- legacy/ephysics/src/lib/ephysics_world.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/legacy/ephysics/src/lib/ephysics_world.cpp b/legacy/ephysics/src/lib/ephysics_world.cpp index e7655588db..c0e1b04a94 100644 --- a/legacy/ephysics/src/lib/ephysics_world.cpp +++ b/legacy/ephysics/src/lib/ephysics_world.cpp @@ -64,6 +64,7 @@ struct _EPhysics_World { Eina_Lock mutex; Eina_Condition condition; Eina_Bool running:1; + Eina_Bool ticked:1; Eina_Bool active:1; Eina_Bool deleted:1; Eina_Bool outside_autodel:1; @@ -244,19 +245,29 @@ body_del: } static void -_ephysics_world_tick_cb(btDynamicsWorld *dynamics_world, btScalar timeStep __UNUSED__) +_ephysics_world_tick_dispatch(EPhysics_World *world) { - EPhysics_World *world; Simulation_Msg *msg; + if (!world->ticked) + return; + + world->ticked = EINA_FALSE; + world->pending_ticks++; + msg = (Simulation_Msg *) calloc(1, sizeof(Simulation_Msg)); msg->tick = EINA_TRUE; - - world = (EPhysics_World *) dynamics_world->getWorldUserInfo(); - world->pending_ticks++; ecore_thread_feedback(world->cur_th, msg); } +static void +_ephysics_world_tick_cb(btDynamicsWorld *dynamics_world, btScalar timeStep __UNUSED__) +{ + EPhysics_World *world; + world = (EPhysics_World *) dynamics_world->getWorldUserInfo(); + world->ticked = EINA_TRUE; +} + static void _ephysics_world_body_del(EPhysics_World *world, EPhysics_Body *body) { @@ -564,6 +575,7 @@ _th_simulate(void *data, Ecore_Thread *th) ((btDiscreteDynamicsWorld *)world->dynamics_world)->stepSimulation( delta, world->max_sub_steps, world->fixed_time_step); + _ephysics_world_tick_dispatch(world); world->pending_ticks--; eina_lock_release(&world->mutex); }