mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-25 16:43:33 +00:00
Split physics update from world update in the profiler
This commit is contained in:
parent
91ec1d1c2c
commit
ab0841cc3d
@ -154,14 +154,23 @@ bool OMW::Engine::frame(float frametime)
|
|||||||
mEnvironment.getStateManager()->endGame();
|
mEnvironment.getStateManager()->endGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update physics
|
||||||
|
osg::Timer_t beforePhysicsTick = osg::Timer::instance()->tick();
|
||||||
|
if (mEnvironment.getStateManager()->getState()!=
|
||||||
|
MWBase::StateManager::State_NoGame)
|
||||||
|
{
|
||||||
|
mEnvironment.getWorld()->updatePhysics(frametime, guiActive);
|
||||||
|
}
|
||||||
|
osg::Timer_t afterPhysicsTick = osg::Timer::instance()->tick();
|
||||||
|
|
||||||
// update world
|
// update world
|
||||||
osg::Timer_t beforePhysicsTick = osg::Timer::instance()->tick();;
|
osg::Timer_t beforeWorldTick = osg::Timer::instance()->tick();
|
||||||
if (mEnvironment.getStateManager()->getState()!=
|
if (mEnvironment.getStateManager()->getState()!=
|
||||||
MWBase::StateManager::State_NoGame)
|
MWBase::StateManager::State_NoGame)
|
||||||
{
|
{
|
||||||
mEnvironment.getWorld()->update(frametime, guiActive);
|
mEnvironment.getWorld()->update(frametime, guiActive);
|
||||||
}
|
}
|
||||||
osg::Timer_t afterPhysicsTick = osg::Timer::instance()->tick();
|
osg::Timer_t afterWorldTick = osg::Timer::instance()->tick();
|
||||||
|
|
||||||
// update GUI
|
// update GUI
|
||||||
mEnvironment.getWindowManager()->onFrame(frametime);
|
mEnvironment.getWindowManager()->onFrame(frametime);
|
||||||
@ -180,6 +189,10 @@ bool OMW::Engine::frame(float frametime)
|
|||||||
stats->setAttribute(frameNumber, "physics_time_taken", osg::Timer::instance()->delta_s(beforePhysicsTick, afterPhysicsTick));
|
stats->setAttribute(frameNumber, "physics_time_taken", osg::Timer::instance()->delta_s(beforePhysicsTick, afterPhysicsTick));
|
||||||
stats->setAttribute(frameNumber, "physics_time_end", osg::Timer::instance()->delta_s(mStartTick, afterPhysicsTick));
|
stats->setAttribute(frameNumber, "physics_time_end", osg::Timer::instance()->delta_s(mStartTick, afterPhysicsTick));
|
||||||
|
|
||||||
|
stats->setAttribute(frameNumber, "world_time_begin", osg::Timer::instance()->delta_s(mStartTick, beforeWorldTick));
|
||||||
|
stats->setAttribute(frameNumber, "world_time_taken", osg::Timer::instance()->delta_s(beforeWorldTick, afterWorldTick));
|
||||||
|
stats->setAttribute(frameNumber, "world_time_end", osg::Timer::instance()->delta_s(mStartTick, afterWorldTick));
|
||||||
|
|
||||||
if (stats->collectStats("resource"))
|
if (stats->collectStats("resource"))
|
||||||
{
|
{
|
||||||
mResourceSystem->reportStats(frameNumber, stats);
|
mResourceSystem->reportStats(frameNumber, stats);
|
||||||
@ -667,10 +680,12 @@ void OMW::Engine::go()
|
|||||||
|
|
||||||
statshandler->addUserStatsLine("Script", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
statshandler->addUserStatsLine("Script", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
||||||
"script_time_taken", 1000.0, true, false, "script_time_begin", "script_time_end", 10000);
|
"script_time_taken", 1000.0, true, false, "script_time_begin", "script_time_end", 10000);
|
||||||
statshandler->addUserStatsLine("Mechanics", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
statshandler->addUserStatsLine("Mech", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
||||||
"mechanics_time_taken", 1000.0, true, false, "mechanics_time_begin", "mechanics_time_end", 10000);
|
"mechanics_time_taken", 1000.0, true, false, "mechanics_time_begin", "mechanics_time_end", 10000);
|
||||||
statshandler->addUserStatsLine("Physics", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
statshandler->addUserStatsLine("Phys", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
||||||
"physics_time_taken", 1000.0, true, false, "physics_time_begin", "physics_time_end", 10000);
|
"physics_time_taken", 1000.0, true, false, "physics_time_begin", "physics_time_end", 10000);
|
||||||
|
statshandler->addUserStatsLine("World", osg::Vec4f(1.f, 1.f, 1.f, 1.f), osg::Vec4f(1.f, 1.f, 1.f, 1.f),
|
||||||
|
"world_time_taken", 1000.0, true, false, "world_time_begin", "world_time_end", 10000);
|
||||||
|
|
||||||
mViewer->addEventHandler(statshandler);
|
mViewer->addEventHandler(statshandler);
|
||||||
|
|
||||||
|
@ -371,6 +371,7 @@ namespace MWBase
|
|||||||
/// \return pointer to created record
|
/// \return pointer to created record
|
||||||
|
|
||||||
virtual void update (float duration, bool paused) = 0;
|
virtual void update (float duration, bool paused) = 0;
|
||||||
|
virtual void updatePhysics (float duration, bool paused) = 0;
|
||||||
|
|
||||||
virtual void updateWindowManager () = 0;
|
virtual void updateWindowManager () = 0;
|
||||||
|
|
||||||
|
@ -1817,7 +1817,6 @@ namespace MWWorld
|
|||||||
|
|
||||||
if (!paused)
|
if (!paused)
|
||||||
{
|
{
|
||||||
doPhysics (duration);
|
|
||||||
updateNavigator();
|
updateNavigator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1837,6 +1836,14 @@ namespace MWWorld
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::updatePhysics (float duration, bool paused)
|
||||||
|
{
|
||||||
|
if (!paused)
|
||||||
|
{
|
||||||
|
doPhysics (duration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void World::updatePlayer()
|
void World::updatePlayer()
|
||||||
{
|
{
|
||||||
MWWorld::Ptr player = getPlayerPtr();
|
MWWorld::Ptr player = getPlayerPtr();
|
||||||
|
@ -480,6 +480,7 @@ namespace MWWorld
|
|||||||
/// \return pointer to created record
|
/// \return pointer to created record
|
||||||
|
|
||||||
void update (float duration, bool paused) override;
|
void update (float duration, bool paused) override;
|
||||||
|
void updatePhysics (float duration, bool paused) override;
|
||||||
|
|
||||||
void updateWindowManager () override;
|
void updateWindowManager () override;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user