From: <he...@us...> - 2009-07-29 12:18:49
|
Revision: 78 http://simspark.svn.sourceforge.net/simspark/?rev=78&view=rev Author: hedayat Date: 2009-07-29 12:18:34 +0000 (Wed, 29 Jul 2009) Log Message: ----------- Server will run in multi-threaded mode by default some fixes related to multi-threaded running. Modified Paths: -------------- trunk/spark/ChangeLog trunk/spark/lib/oxygen/simulationserver/simulationserver.cpp trunk/spark/lib/oxygen/simulationserver/simulationserver.h trunk/spark/spark/spark.rb Modified: trunk/spark/ChangeLog =================================================================== --- trunk/spark/ChangeLog 2009-07-27 09:36:56 UTC (rev 77) +++ trunk/spark/ChangeLog 2009-07-29 12:18:34 UTC (rev 78) @@ -1,3 +1,12 @@ +2009-07-29 Hedayat Vatankhah <he...@gr...> + + * lib/oxygen/simulationserver/simulationserver.h: + * lib/oxygen/simulationserver/simulationserver.cpp: + - fixed some issues in multi-threaded code + + * spark/spark.rb: + - making multi-threaded mode the default mode for running server + 2009-07-27 Hedayat Vatankhah <he...@gr...> * lib/zeitgeist/scriptserver/scriptserver.cpp: Modified: trunk/spark/lib/oxygen/simulationserver/simulationserver.cpp =================================================================== --- trunk/spark/lib/oxygen/simulationserver/simulationserver.cpp 2009-07-27 09:36:56 UTC (rev 77) +++ trunk/spark/lib/oxygen/simulationserver/simulationserver.cpp 2009-07-29 12:18:34 UTC (rev 78) @@ -221,7 +221,7 @@ { mSceneServer->PrePhysicsUpdate(mSimStep); mSceneServer->PhysicsUpdate(mSimStep); - UpdateDeltaTimeAfterStep(); + UpdateDeltaTimeAfterStep(mSumDeltaTime); finalStep += mSimStep; } mSceneServer->PostPhysicsUpdate(); @@ -421,28 +421,30 @@ shared_ptr<SimControlNode> renderControl = GetControlNode("RenderControl"); + float initDelta, finalDelta; while (true) { ++mCycle; mThreadBarrier->wait(); mSceneServer->PrePhysicsUpdate(mSimStep); mThreadBarrier->wait(); - mSceneServer->PhysicsUpdate(mSimStep); - if (mAutoTime) - AdvanceTime(mSimStep); - mThreadBarrier->wait(); if (mExit) // this check should be here so that all threads will quit break; + finalDelta = initDelta = mSumDeltaTime; - UpdateDeltaTimeAfterStep(); + mSceneServer->PhysicsUpdate(mSimStep); + if (mAutoTime) + AdvanceTime(mSimStep); + UpdateDeltaTimeAfterStep(finalDelta); + float finalStep = mSimStep; - while (int(mSumDeltaTime*100) >= int(mSimStep*100)) + while (int(finalDelta*100) >= int(mSimStep*100)) { mSceneServer->PhysicsUpdate(mSimStep); - UpdateDeltaTimeAfterStep(); + UpdateDeltaTimeAfterStep(finalDelta); finalStep += mSimStep; } mSceneServer->PostPhysicsUpdate(); @@ -452,6 +454,7 @@ && renderControl->GetTime() - mSimTime < 0.005f ) renderControl->EndCycle(); mThreadBarrier->wait(); + mSumDeltaTime -= initDelta - finalDelta; } // wait for threads @@ -485,14 +488,16 @@ controlNode->ActAgent(); controlNode->SetSimTime(mSimTime); } + mThreadBarrier->wait(); + if (mExit) + break; + if (isInputControl) { while (int(mSumDeltaTime*100) < int(mSimStep*100)) controlNode->StartCycle(); // advance the time } - mThreadBarrier->wait(); - if (mExit) - break; + // wait for physics update mThreadBarrier->wait(); if (!isRenderControl && newCycle) @@ -515,16 +520,16 @@ mMaxStepsPerCycle = max; } -inline void SimulationServer::UpdateDeltaTimeAfterStep() +inline void SimulationServer::UpdateDeltaTimeAfterStep(float &deltaTime) { - if (mAdjustSpeed && mSumDeltaTime > mMaxStepsPerCycle + if (mAdjustSpeed && deltaTime > mMaxStepsPerCycle * mSimStep) { GetLog()->Debug() << "(SimulationServer) Warning: Skipping remaining time: " - << mSumDeltaTime - mSimStep << '\n'; - mSumDeltaTime = 0; + << deltaTime - mSimStep << '\n'; + deltaTime = 0; } else - mSumDeltaTime -= mSimStep; + deltaTime -= mSimStep; } Modified: trunk/spark/lib/oxygen/simulationserver/simulationserver.h =================================================================== --- trunk/spark/lib/oxygen/simulationserver/simulationserver.h 2009-07-27 09:36:56 UTC (rev 77) +++ trunk/spark/lib/oxygen/simulationserver/simulationserver.h 2009-07-29 12:18:34 UTC (rev 78) @@ -174,7 +174,7 @@ void SimControlThread(boost::shared_ptr<SimControlNode> controlNode); /** updates mSumDeltaTime after a step in descreet simulations */ - void UpdateDeltaTimeAfterStep(); + void UpdateDeltaTimeAfterStep(float &deltaTime); protected: /** the argc parameter passed to Run() */ Modified: trunk/spark/spark/spark.rb =================================================================== --- trunk/spark/spark/spark.rb 2009-07-27 09:36:56 UTC (rev 77) +++ trunk/spark/spark/spark.rb 2009-07-29 12:18:34 UTC (rev 78) @@ -279,7 +279,7 @@ simulationServer = sparkGetSimulationServer() if (simulationServer != nil) - simulationServer.setMultiThreads(false); + simulationServer.setMultiThreads(true); simulationServer.initControlNode('oxygen/AgentControl','AgentControl') # set auto speed adjust mode. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |