|
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.
|