diff options
author | Simei Yin | 2018-05-27 22:11:16 +0200 |
---|---|---|
committer | Simei Yin | 2018-05-27 22:11:38 +0200 |
commit | 881c94636162fc56ea9f409bce6390e959bbd6a1 (patch) | |
tree | 6d5e7130ba284186853c5e6b5c1121b3d4aa7d7d /engines/sludge/timing.cpp | |
parent | bf3084df0eff1f21c9bc94d4254dff11e71b31bc (diff) | |
download | scummvm-rg350-881c94636162fc56ea9f409bce6390e959bbd6a1.tar.gz scummvm-rg350-881c94636162fc56ea9f409bce6390e959bbd6a1.tar.bz2 scummvm-rg350-881c94636162fc56ea9f409bce6390e959bbd6a1.zip |
SLUDGE: Move global variable lastFramesPerSecond to class Timer
Diffstat (limited to 'engines/sludge/timing.cpp')
-rw-r--r-- | engines/sludge/timing.cpp | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/engines/sludge/timing.cpp b/engines/sludge/timing.cpp index 2e3865498a..c291f57a6b 100644 --- a/engines/sludge/timing.cpp +++ b/engines/sludge/timing.cpp @@ -25,31 +25,63 @@ namespace Sludge { +Timer::Timer(){ + reset(); +} + +void Timer::reset(void) { + _desiredFPS = 300; + _startTime = 0; + _endTime = 0; + _desiredFrameTime = 0; + _addNextTime = 0; + + // FPS stats + _lastFPS = -1; + _thisFPS = -1; + _lastSeconds = 0; +} + void Timer::init(void) { - _desired_frame_time = 1000 / _desiredfps; - _starttime = g_system->getMillis(); + _desiredFrameTime = 1000 / _desiredFPS; + _startTime = g_system->getMillis(); } void Timer::initSpecial(int t) { - _desired_frame_time = 1000 / t; - _starttime = g_system->getMillis(); + _desiredFrameTime = 1000 / t; + _startTime = g_system->getMillis(); +} + +void Timer::updateFpsStats() { + uint32 currentSeconds = g_system->getMillis() / 1000; + if (_lastSeconds != currentSeconds) { + _lastSeconds = currentSeconds; + _lastFPS = _thisFPS; + _thisFPS = 1; + } else { + ++_thisFPS; + } } void Timer::waitFrame(void) { - static uint32 addNextTime = 0; uint32 timetaken; for (;;) { - _endtime = g_system->getMillis(); - timetaken = addNextTime + _endtime - _starttime; - if (timetaken >= _desired_frame_time) break; + _endTime = g_system->getMillis(); + timetaken = _addNextTime + _endTime - _startTime; + if (timetaken >= _desiredFrameTime) + break; g_system->delayMillis(1); } - addNextTime = timetaken - _desired_frame_time; - if (addNextTime > _desired_frame_time) addNextTime = _desired_frame_time; + _addNextTime = timetaken - _desiredFrameTime; + if (_addNextTime > _desiredFrameTime) + _addNextTime = _desiredFrameTime; + + _startTime = _endTime; - _starttime = _endtime; + // Stats + updateFpsStats(); } } // End of namespace Sludge |