aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/event.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2010-08-29 00:39:33 +0000
committerFilippos Karapetis2010-08-29 00:39:33 +0000
commit9096848e4b0411daa3cd54a677bafc13e2312082 (patch)
tree6127a59517ec107d95b16cefed109710a234673f /engines/sci/event.cpp
parent3f1f894e8eeb091153963b8b936b533f78f17e4a (diff)
downloadscummvm-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.cpp12
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;
}
}