Revert "Remove timeStep parameter from QAnimationDrive::advanceAnimation"

This reverts commit f51b690e91bb2d7c8a03c5cef42abca37d97f8bb.

The commit made all animation tests in qtdeclarative on macOS
flaky.

Change-Id: I4ccaa879df7e2ba7e253657de01cbabc9b2c655f
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Lars Knoll 2020-09-11 16:10:37 +02:00
parent e0918af700
commit 7544c242cb
4 changed files with 21 additions and 16 deletions

View File

@ -248,7 +248,7 @@ QUnifiedTimer *QUnifiedTimer::instance()
void QUnifiedTimer::maybeUpdateAnimationsToCurrentTime()
{
if (elapsed() - lastTick > 50)
updateAnimationTimers();
updateAnimationTimers(-1);
}
qint64 QUnifiedTimer::elapsed() const
@ -290,13 +290,13 @@ void QUnifiedTimer::stopAnimationDriver()
driver->stop();
}
void QUnifiedTimer::updateAnimationTimers(qint64)
void QUnifiedTimer::updateAnimationTimers(qint64 currentTick)
{
//setCurrentTime can get this called again while we're the for loop. At least with pauseAnimations
if(insideTick)
return;
const qint64 totalElapsed = elapsed();
qint64 totalElapsed = currentTick > 0 ? currentTick : elapsed();
// ignore consistentTiming in case the pause timer is active
qint64 delta = (consistentTiming && !pauseTimer.isActive()) ?
@ -423,7 +423,7 @@ void QUnifiedTimer::timerEvent(QTimerEvent *event)
if (event->timerId() == pauseTimer.timerId()) {
// update current time on all timers
updateAnimationTimers();
updateAnimationTimers(-1);
restart();
}
}
@ -585,7 +585,7 @@ void QAnimationTimer::ensureTimerUpdate()
QAnimationTimer *inst = QAnimationTimer::instance(false);
QUnifiedTimer *instU = QUnifiedTimer::instance(false);
if (instU && inst && inst->isPaused)
instU->updateAnimationTimers();
instU->updateAnimationTimers(-1);
}
void QAnimationTimer::updateAnimationsTime(qint64 delta)
@ -773,19 +773,23 @@ QAnimationDriver::~QAnimationDriver()
}
/*!
Advances the animation. This function should be continuously called by
the driver subclasses while the animation is running.
Advances the animation based to the specified \a timeStep. This function should
be continuously called by the driver subclasses while the animation is running.
The calculation of the new current time will use elapsed() in combination
with the internal time offsets of the animation system.
If \a timeStep is positive, it will be used as the current time in the
calculations; otherwise, the current clock time will be used.
Since 5.4, the timeStep argument is ignored and elapsed() will be
used instead in combination with the internal time offsets of the
animation system.
*/
void QAnimationDriver::advanceAnimation()
void QAnimationDriver::advanceAnimation(qint64 timeStep)
{
QUnifiedTimer *instance = QUnifiedTimer::instance();
// update current time on all top level animations
instance->updateAnimationTimers();
instance->updateAnimationTimers(timeStep);
instance->restart();
}
@ -798,7 +802,7 @@ void QAnimationDriver::advanceAnimation()
void QAnimationDriver::advance()
{
advanceAnimation();
advanceAnimation(-1);
}

View File

@ -152,7 +152,8 @@ Q_SIGNALS:
void stopped();
protected:
void advanceAnimation();
// ### Qt6: Remove timestep argument
void advanceAnimation(qint64 timeStep = -1);
virtual void start();
virtual void stop();

View File

@ -185,7 +185,7 @@ public:
void restart();
void maybeUpdateAnimationsToCurrentTime();
void updateAnimationTimers(qint64 = -1); // ### Qt 6 - remove parameter once qtdeclarative is fixed
void updateAnimationTimers(qint64 currentTick);
//useful for profiling/debugging
int runningAnimationCount();

View File

@ -115,10 +115,10 @@ public:
static const int interval = 1000/60;
qint64 until = m_elapsed + ms;
while (m_elapsed < until) {
advanceAnimation();
advanceAnimation(m_elapsed);
m_elapsed += interval;
}
advanceAnimation();
advanceAnimation(m_elapsed);
// This is to make sure that animations that were started with DeleteWhenStopped
// will actually delete themselves within the test function.
// Normally, they won't be deleted until the main event loop is processed.