1
0
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:
Andrei Kortunov 2019-01-07 14:27:31 +04:00
parent 91ec1d1c2c
commit ab0841cc3d
4 changed files with 29 additions and 5 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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();

View File

@ -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;