From 9a3b339e1c3aea4e92149706357e988979593b4d Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Wed, 7 Dec 2016 14:41:38 +0100 Subject: QQuickSpriteEngine: Optimistic speedup for updateSprites Switch from QList to QVector, and avoid using pop_front -- remove all in one operation instead. The idea here was to provide some gain to sprite-sequence in qmlbench, but any possible gain is pretty miniscule due to the lack of batching that example suffers. Still, we end up with less CPU time taken, which is a win of sorts. Change-Id: Ib7c101afa71ee617c3c4506b14701d6a4143ed3a Reviewed-by: Gunnar Sletta --- src/quick/items/qquickspriteengine.cpp | 11 ++++++----- src/quick/items/qquickspriteengine_p.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/quick/items/qquickspriteengine.cpp b/src/quick/items/qquickspriteengine.cpp index 10e0d51709..b1905f2cc5 100644 --- a/src/quick/items/qquickspriteengine.cpp +++ b/src/quick/items/qquickspriteengine.cpp @@ -664,13 +664,14 @@ uint QQuickStochasticEngine::updateSprites(uint time)//### would returning a lis //Sprite State Update; m_timeOffset = time; m_addAdvance = false; - while (!m_stateUpdates.isEmpty() && time >= m_stateUpdates.constFirst().first){ - const auto copy = m_stateUpdates.constFirst().second; + int i = 0; + for (; i < m_stateUpdates.count() && time >= m_stateUpdates.at(i).first; ++i) { + const auto copy = m_stateUpdates.at(i).second; for (int idx : copy) advance(idx); - m_stateUpdates.pop_front(); } + m_stateUpdates.remove(0, i); m_advanceTime.start(); m_addAdvance = true; if (m_stateUpdates.isEmpty()) @@ -760,13 +761,13 @@ void QQuickStochasticEngine::addToUpdateList(uint t, int idx) m_stateUpdates[i].second << idx; return; } else if (m_stateUpdates.at(i).first > t) { - QList tmpList; + QVector tmpList; tmpList << idx; m_stateUpdates.insert(i, qMakePair(t, tmpList)); return; } } - QList tmpList; + QVector tmpList; tmpList << idx; m_stateUpdates << qMakePair(t, tmpList); } diff --git a/src/quick/items/qquickspriteengine_p.h b/src/quick/items/qquickspriteengine_p.h index cf50cd2d84..3b7fcfb1f1 100644 --- a/src/quick/items/qquickspriteengine_p.h +++ b/src/quick/items/qquickspriteengine_p.h @@ -254,7 +254,7 @@ protected: QVector m_goals; QVector m_duration; QVector m_startTimes; - QList > > m_stateUpdates;//### This could be done faster - priority queue? + QVector > > m_stateUpdates;//### This could be done faster - priority queue? QTime m_advanceTime; uint m_timeOffset; -- cgit v1.2.3