diff options
author | Filippos Karapetis | 2010-08-29 00:39:33 +0000 |
---|---|---|
committer | Filippos Karapetis | 2010-08-29 00:39:33 +0000 |
commit | 9096848e4b0411daa3cd54a677bafc13e2312082 (patch) | |
tree | 6127a59517ec107d95b16cefed109710a234673f /engines/sci/event.cpp | |
parent | 3f1f894e8eeb091153963b8b936b533f78f17e4a (diff) | |
download | scummvm-rg350-9096848e4b0411daa3cd54a677bafc13e2312082.tar.gz scummvm-rg350-9096848e4b0411daa3cd54a677bafc13e2312082.tar.bz2 scummvm-rg350-9096848e4b0411daa3cd54a677bafc13e2312082.zip |
SCI: Throttle the invocations of Engine::shouldQuit()
SCI constantly invoked Engine::shouldQuit(), which in
turn called 2 virtual functions. This added a significant
overhead, as this was called constantly without any
throttling whatsoever. Now, the invocation of shouldQuit()
is throttled to be on each frame update (i.e. at a rate of
60fps). Thanks to wjp for profiling this.
svn-id: r52431
Diffstat (limited to 'engines/sci/event.cpp')
-rw-r--r-- | engines/sci/event.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp index acd2e9f735..5d469eda7b 100644 --- a/engines/sci/event.cpp +++ b/engines/sci/event.cpp @@ -351,9 +351,17 @@ SciEvent EventManager::getScummVMEvent() { void EventManager::updateScreen() { // Update the screen here, since it's called very often. // Throttle the screen update rate to 60fps. - if (g_system->getMillis() - g_sci->getEngineState()->_screenUpdateTime >= 1000 / 60) { + EngineState *s = g_sci->getEngineState(); + if (g_system->getMillis() - s->_screenUpdateTime >= 1000 / 60) { g_system->updateScreen(); - g_sci->getEngineState()->_screenUpdateTime = g_system->getMillis(); + s->_screenUpdateTime = g_system->getMillis(); + // Throttle the checking of shouldQuit() to 60fps as well, since + // Engine::shouldQuit() invokes 2 virtual functions + // (EventManager::shouldQuit() and EventManager::shouldRTL()), + // which is very expensive to invoke constantly without any + // throttling at all. + if (g_engine->shouldQuit()) + s->abortScriptProcessing = kAbortQuitGame; } } |