summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@jollamobile.com>2014-04-06 20:00:07 -0500
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-08 10:57:56 +0200
commit5fe98ebb376bcbc8728e4ce64b697637404a55e1 (patch)
tree683e61c3628eee9e269a038a79d9843af84c7433
parentf41418aeb20ddc190892216a09feb564d2cef5b4 (diff)
Prevent QUnifiedTimer from ticking backwards.
This could happen in the following situation: * a custom animation driver with fixed delta * a triple-buffering scheme (rendering ahead a frame) * a second animation timer starting while a first was active This would cause QUnifiedTimer::startTimers() to trigger QUnifiedTimer::updateAnimationTimers(-1), and use the current time from the QElapsedTimer rather than the animation driver. This time could be less than the last reported time from the animation driver. Change-Id: Ibf1796fcb99f288d4946b30e5e7225695aa61781 Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
-rw-r--r--src/corelib/animation/qabstractanimation.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 139876de3a..f7bb1e91bd 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -277,10 +277,12 @@ void QUnifiedTimer::updateAnimationTimers(qint64 currentTick)
lastTick = totalElapsed;
- //we make sure we only call update time if the time has actually changed
- //it might happen in some cases that the time doesn't change because events are delayed
- //when the CPU load is high
- if (delta) {
+ //we make sure we only call update time if the time has actually advanced
+ //* it might happen in some cases that the time doesn't change because events are delayed
+ // when the CPU load is high
+ //* it might happen in some cases that the delta is negative because the animation driver
+ // advances faster than time.elapsed()
+ if (delta > 0) {
insideTick = true;
if (profilerCallback)
profilerCallback(delta);