diff options
author | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-01-15 15:41:29 +0300 |
---|---|---|
committer | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-01-18 07:57:56 +0000 |
commit | f644f86c84287065535fbd8c3478a5b2550437ac (patch) | |
tree | 54640dd88fa7e4cc3ce03b15d6ed3a7c2b005070 /src/quick | |
parent | 1cbf064cdf6d24ddbb6bf30b08a88ec1bf03d3df (diff) |
Quick: fix expensive iteration over QHash::keys() and QMap::keys()
Change-Id: I21c48214bfddde01f71710705fe01418818a6581
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquickdrag.cpp | 5 | ||||
-rw-r--r-- | src/quick/items/qquickitemanimation.cpp | 9 | ||||
-rw-r--r-- | src/quick/items/qquickmultipointtoucharea.cpp | 6 | ||||
-rw-r--r-- | src/quick/util/qquickanimatorcontroller.cpp | 6 |
4 files changed, 16 insertions, 10 deletions
diff --git a/src/quick/items/qquickdrag.cpp b/src/quick/items/qquickdrag.cpp index 279f5e5299..e44c0b216f 100644 --- a/src/quick/items/qquickdrag.cpp +++ b/src/quick/items/qquickdrag.cpp @@ -715,9 +715,8 @@ Qt::DropAction QQuickDragAttachedPrivate::startDrag(Qt::DropActions supportedAct QDrag *drag = new QDrag(q); QMimeData *mimeData = new QMimeData(); - Q_FOREACH (const QString &key, externalMimeData.keys()) { - mimeData->setData(key, externalMimeData[key].toString().toUtf8()); - } + for (auto it = externalMimeData.cbegin(), end = externalMimeData.cend(); it != end; ++it) + mimeData->setData(it.key(), it.value().toString().toUtf8()); drag->setMimeData(mimeData); diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp index 9d140b3156..da577d808a 100644 --- a/src/quick/items/qquickitemanimation.cpp +++ b/src/quick/items/qquickitemanimation.cpp @@ -836,12 +836,13 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio prevData = *d->activeAnimations[target]->pathUpdater(); } - QList<QQuickItem*> keys = d->activeAnimations.keys(); - foreach (QQuickItem *item, keys) { - QQuickPathAnimationAnimator *anim = d->activeAnimations.value(item); + for (auto it = d->activeAnimations.begin(); it != d->activeAnimations.end();) { + QQuickPathAnimationAnimator *anim = it.value(); if (anim->state() == QAbstractAnimationJob::Stopped) { anim->clearTemplate(); - d->activeAnimations.remove(item); + it = d->activeAnimations.erase(it); + } else { + ++it; } } diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp index 9e658cc668..e3a8fe3cc6 100644 --- a/src/quick/items/qquickmultipointtoucharea.cpp +++ b/src/quick/items/qquickmultipointtoucharea.cpp @@ -470,7 +470,11 @@ void QQuickMultiPointTouchArea::grabGesture() grabMouse(); setKeepMouseGrab(true); - grabTouchPoints(_touchPoints.keys().toVector()); + QVector<int> ids; + ids.reserve(_touchPoints.size()); + for (auto it = _touchPoints.keyBegin(), end = _touchPoints.keyEnd(); it != end; ++it) + ids.append(*it); + grabTouchPoints(ids); setKeepTouchGrab(true); } diff --git a/src/quick/util/qquickanimatorcontroller.cpp b/src/quick/util/qquickanimatorcontroller.cpp index 74930fb373..355dba0215 100644 --- a/src/quick/util/qquickanimatorcontroller.cpp +++ b/src/quick/util/qquickanimatorcontroller.cpp @@ -72,11 +72,13 @@ QQuickAnimatorController::~QQuickAnimatorController() foreach (QQuickAnimatorProxyJob *proxy, m_animatorRoots) proxy->controllerWasDeleted(); - qDeleteAll(m_animatorRoots.keys()); + for (auto it = m_animatorRoots.keyBegin(), end = m_animatorRoots.keyEnd(); it != end; ++it) + delete *it; // Delete those who have been started, stopped and are now still // pending for restart. - foreach (QAbstractAnimationJob *job, m_starting.keys()) { + for (auto it = m_starting.keyBegin(), end = m_starting.keyEnd(); it != end; ++it) { + QAbstractAnimationJob *job = *it; if (!m_animatorRoots.contains(job)) delete job; } |