mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-29 13:27:59 +03:00
Profile window manager update
This commit is contained in:
parent
212c7c7f25
commit
2f5adbb083
3 changed files with 54 additions and 42 deletions
|
@ -170,8 +170,6 @@ void OMW::Engine::executeLocalScripts()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OMW::Engine::frame(float frametime)
|
bool OMW::Engine::frame(float frametime)
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
const osg::Timer_t frameStart = mViewer->getStartTick();
|
const osg::Timer_t frameStart = mViewer->getStartTick();
|
||||||
const unsigned int frameNumber = mViewer->getFrameStamp()->getFrameNumber();
|
const unsigned int frameNumber = mViewer->getFrameStamp()->getFrameNumber();
|
||||||
|
@ -180,6 +178,8 @@ bool OMW::Engine::frame(float frametime)
|
||||||
|
|
||||||
mEnvironment.setFrameDuration(frametime);
|
mEnvironment.setFrameDuration(frametime);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
// update input
|
// update input
|
||||||
{
|
{
|
||||||
ScopedProfile<UserStatsType::Input> profile(frameStart, frameNumber, *timer, *stats);
|
ScopedProfile<UserStatsType::Input> profile(frameStart, frameNumber, *timer, *stats);
|
||||||
|
@ -294,6 +294,11 @@ bool OMW::Engine::frame(float frametime)
|
||||||
ScopedProfile<UserStatsType::Gui> profile(frameStart, frameNumber, *timer, *stats);
|
ScopedProfile<UserStatsType::Gui> profile(frameStart, frameNumber, *timer, *stats);
|
||||||
mWindowManager->update(frametime);
|
mWindowManager->update(frametime);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
Log(Debug::Error) << "Error in frame: " << e.what();
|
||||||
|
}
|
||||||
|
|
||||||
const bool reportResource = stats->collectStats("resource");
|
const bool reportResource = stats->collectStats("resource");
|
||||||
|
|
||||||
|
@ -315,11 +320,21 @@ bool OMW::Engine::frame(float frametime)
|
||||||
mWorld->reportStats(frameNumber, *stats);
|
mWorld->reportStats(frameNumber, *stats);
|
||||||
mLuaManager->reportStats(frameNumber, *stats);
|
mLuaManager->reportStats(frameNumber, *stats);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (const std::exception& e)
|
mViewer->eventTraversal();
|
||||||
|
mViewer->updateTraversal();
|
||||||
|
|
||||||
{
|
{
|
||||||
Log(Debug::Error) << "Error in frame: " << e.what();
|
ScopedProfile<UserStatsType::WindowManager> profile(frameStart, frameNumber, *timer, *stats);
|
||||||
|
mWorld->updateWindowManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mLuaWorker->allowUpdate(); // if there is a separate Lua thread, it starts the update now
|
||||||
|
|
||||||
|
mViewer->renderingTraversals();
|
||||||
|
|
||||||
|
mLuaWorker->finishUpdate();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,6 +389,7 @@ OMW::Engine::~Engine()
|
||||||
mSoundManager = nullptr;
|
mSoundManager = nullptr;
|
||||||
mInputManager = nullptr;
|
mInputManager = nullptr;
|
||||||
mStateManager = nullptr;
|
mStateManager = nullptr;
|
||||||
|
mLuaWorker = nullptr;
|
||||||
mLuaManager = nullptr;
|
mLuaManager = nullptr;
|
||||||
|
|
||||||
mScriptContext = nullptr;
|
mScriptContext = nullptr;
|
||||||
|
@ -669,6 +685,9 @@ void OMW::Engine::prepareEngine()
|
||||||
mLuaManager = std::make_unique<MWLua::LuaManager>(mVFS.get(), mResDir / "lua_libs");
|
mLuaManager = std::make_unique<MWLua::LuaManager>(mVFS.get(), mResDir / "lua_libs");
|
||||||
mEnvironment.setLuaManager(*mLuaManager);
|
mEnvironment.setLuaManager(*mLuaManager);
|
||||||
|
|
||||||
|
// starts a separate lua thread if "lua num threads" > 0
|
||||||
|
mLuaWorker = std::make_unique<MWLua::Worker>(*mLuaManager, *mViewer);
|
||||||
|
|
||||||
// Create input and UI first to set up a bootstrapping environment for
|
// Create input and UI first to set up a bootstrapping environment for
|
||||||
// showing a loading screen and keeping the window responsive while doing so
|
// showing a loading screen and keeping the window responsive while doing so
|
||||||
|
|
||||||
|
@ -886,8 +905,6 @@ void OMW::Engine::go()
|
||||||
mWindowManager->executeInConsole(mStartupScript);
|
mWindowManager->executeInConsole(mStartupScript);
|
||||||
}
|
}
|
||||||
|
|
||||||
MWLua::Worker luaWorker(*mLuaManager, *mViewer); // starts a separate lua thread if "lua num threads" > 0
|
|
||||||
|
|
||||||
// Start the main rendering loop
|
// Start the main rendering loop
|
||||||
double simulationTime = 0.0;
|
double simulationTime = 0.0;
|
||||||
Misc::FrameRateLimiter frameRateLimiter = Misc::makeFrameRateLimiter(mEnvironment.getFrameRateLimit());
|
Misc::FrameRateLimiter frameRateLimiter = Misc::makeFrameRateLimiter(mEnvironment.getFrameRateLimit());
|
||||||
|
@ -908,17 +925,6 @@ void OMW::Engine::go()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mViewer->eventTraversal();
|
|
||||||
mViewer->updateTraversal();
|
|
||||||
|
|
||||||
mWorld->updateWindowManager();
|
|
||||||
|
|
||||||
luaWorker.allowUpdate(); // if there is a separate Lua thread, it starts the update now
|
|
||||||
|
|
||||||
mViewer->renderingTraversals();
|
|
||||||
|
|
||||||
luaWorker.finishUpdate();
|
|
||||||
|
|
||||||
bool guiActive = mWindowManager->isGuiMode();
|
bool guiActive = mWindowManager->isGuiMode();
|
||||||
if (!guiActive)
|
if (!guiActive)
|
||||||
simulationTime += dt;
|
simulationTime += dt;
|
||||||
|
@ -940,7 +946,7 @@ void OMW::Engine::go()
|
||||||
frameRateLimiter.limit();
|
frameRateLimiter.limit();
|
||||||
}
|
}
|
||||||
|
|
||||||
luaWorker.join();
|
mLuaWorker->join();
|
||||||
|
|
||||||
// Save user settings
|
// Save user settings
|
||||||
Settings::Manager::saveUser(mCfgMgr.getUserConfigPath() / "settings.cfg");
|
Settings::Manager::saveUser(mCfgMgr.getUserConfigPath() / "settings.cfg");
|
||||||
|
|
|
@ -38,6 +38,7 @@ namespace Compiler
|
||||||
namespace MWLua
|
namespace MWLua
|
||||||
{
|
{
|
||||||
class LuaManager;
|
class LuaManager;
|
||||||
|
class Worker;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Stereo
|
namespace Stereo
|
||||||
|
@ -132,6 +133,7 @@ namespace OMW
|
||||||
std::unique_ptr<MWInput::InputManager> mInputManager;
|
std::unique_ptr<MWInput::InputManager> mInputManager;
|
||||||
std::unique_ptr<MWState::StateManager> mStateManager;
|
std::unique_ptr<MWState::StateManager> mStateManager;
|
||||||
std::unique_ptr<MWLua::LuaManager> mLuaManager;
|
std::unique_ptr<MWLua::LuaManager> mLuaManager;
|
||||||
|
std::unique_ptr<MWLua::Worker> mLuaWorker;
|
||||||
MWBase::Environment mEnvironment;
|
MWBase::Environment mEnvironment;
|
||||||
ToUTF8::FromType mEncoding;
|
ToUTF8::FromType mEncoding;
|
||||||
std::unique_ptr<ToUTF8::Utf8Encoder> mEncoder;
|
std::unique_ptr<ToUTF8::Utf8Encoder> mEncoder;
|
||||||
|
|
|
@ -38,6 +38,7 @@ namespace OMW
|
||||||
Gui,
|
Gui,
|
||||||
Lua,
|
Lua,
|
||||||
LuaSyncUpdate,
|
LuaSyncUpdate,
|
||||||
|
WindowManager,
|
||||||
Number,
|
Number,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -80,6 +81,9 @@ namespace OMW
|
||||||
template <>
|
template <>
|
||||||
inline const UserStats UserStatsValue<UserStatsType::LuaSyncUpdate>::sValue{ " -Sync", "luasyncupdate" };
|
inline const UserStats UserStatsValue<UserStatsType::LuaSyncUpdate>::sValue{ " -Sync", "luasyncupdate" };
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline const UserStats UserStatsValue<UserStatsType::WindowManager>::sValue{ "WindowManager", "windowmanager" };
|
||||||
|
|
||||||
template <UserStatsType type>
|
template <UserStatsType type>
|
||||||
struct ForEachUserStatsValue
|
struct ForEachUserStatsValue
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue