From 3b5447661a2c9b4bbced202e116a7edeaaf9a065 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 23 Feb 2015 13:45:44 +0100 Subject: QtQuick: Micro-optimize iterator loops. Avoid repeated instantiation of end() in loops, use variable instead. Change-Id: I6ab1fe2b82406d5ee91710a0333587ffb82c04d4 Reviewed-by: Erik Verbruggen --- src/particles/qquickcustomparticle.cpp | 7 +++++-- src/quick/designer/designersupport.cpp | 4 ++-- src/quick/items/qquickitemanimation.cpp | 6 +++--- src/quick/items/qquickitemview.cpp | 8 +++++--- src/quick/items/qquickitemviewtransition.cpp | 4 +++- src/quick/items/qquickwindow.cpp | 3 +-- src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp | 8 +++++--- src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp | 10 ++++++---- src/quick/scenegraph/util/qsgdepthstencilbuffer.cpp | 2 +- src/quick/util/qquicksmoothedanimation.cpp | 6 +++--- src/quick/util/qquickspringanimation.cpp | 14 +++++--------- src/quick/util/qquicktimeline.cpp | 8 ++++---- 12 files changed, 43 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/particles/qquickcustomparticle.cpp b/src/particles/qquickcustomparticle.cpp index 9c82599c20..32cde7c126 100644 --- a/src/particles/qquickcustomparticle.cpp +++ b/src/particles/qquickcustomparticle.cpp @@ -303,6 +303,8 @@ QQuickShaderEffectNode *QQuickCustomParticle::prepareNextFrame(QQuickShaderEffec QQuickShaderEffectNode* QQuickCustomParticle::buildCustomNodes() { + typedef QHash::const_iterator NodeHashConstIt; + if (!QOpenGLContext::currentContext()) return 0; @@ -368,10 +370,11 @@ QQuickShaderEffectNode* QQuickCustomParticle::buildCustomNodes() } } - QHash::const_iterator it = m_nodes.begin(); + NodeHashConstIt it = m_nodes.begin(); rootNode = it.value(); rootNode->setFlag(QSGNode::OwnsMaterial, true); - for (++it; it != m_nodes.end(); ++it) + const NodeHashConstIt cend = m_nodes.end(); + for (++it; it != cend; ++it) rootNode->appendChildNode(it.value()); return rootNode; diff --git a/src/quick/designer/designersupport.cpp b/src/quick/designer/designersupport.cpp index fe61340859..56d2badb62 100644 --- a/src/quick/designer/designersupport.cpp +++ b/src/quick/designer/designersupport.cpp @@ -57,9 +57,9 @@ DesignerSupport::DesignerSupport() DesignerSupport::~DesignerSupport() { - QHash::iterator iterator; + typedef QHash::iterator ItemTextureHashIt; - for (iterator = m_itemTextureHash.begin(); iterator != m_itemTextureHash.end(); ++iterator) { + for (ItemTextureHashIt iterator = m_itemTextureHash.begin(), end = m_itemTextureHash.end(); iterator != end; ++iterator) { QSGLayer *texture = iterator.value(); QQuickItem *item = iterator.key(); QQuickItemPrivate::get(item)->derefFromEffectItem(true); diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp index dadef6a0c3..9d140b3156 100644 --- a/src/quick/items/qquickitemanimation.cpp +++ b/src/quick/items/qquickitemanimation.cpp @@ -581,11 +581,11 @@ QQuickPathAnimation::QQuickPathAnimation(QObject *parent) QQuickPathAnimation::~QQuickPathAnimation() { + typedef QHash::iterator ActiveAnimationsIt; + Q_D(QQuickPathAnimation); - QHash::iterator it; - for (it = d->activeAnimations.begin(); it != d->activeAnimations.end(); ++it) { + for (ActiveAnimationsIt it = d->activeAnimations.begin(), end = d->activeAnimations.end(); it != end; ++it) it.value()->clearTemplate(); - } } /*! diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 0cab9d28dd..01ef1e65f7 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -2415,20 +2415,22 @@ void QQuickItemViewPrivate::updateTrackedItem() void QQuickItemViewPrivate::updateUnrequestedIndexes() { Q_Q(QQuickItemView); - for (QHash::iterator it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) + for (QHash::iterator it = unrequestedItems.begin(), end = unrequestedItems.end(); it != end; ++it) *it = model->indexOf(it.key(), q); } void QQuickItemViewPrivate::updateUnrequestedPositions() { - for (QHash::const_iterator it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) + for (QHash::const_iterator it = unrequestedItems.begin(), cend = unrequestedItems.end(); it != cend; ++it) repositionPackageItemAt(it.key(), it.value()); } void QQuickItemViewPrivate::updateVisibleIndex() { + typedef QList::const_iterator FxViewItemListConstIt; + visibleIndex = 0; - for (QList::Iterator it = visibleItems.begin(); it != visibleItems.end(); ++it) { + for (FxViewItemListConstIt it = visibleItems.constBegin(), cend = visibleItems.constEnd(); it != cend; ++it) { if ((*it)->index != -1) { visibleIndex = (*it)->index; break; diff --git a/src/quick/items/qquickitemviewtransition.cpp b/src/quick/items/qquickitemviewtransition.cpp index ae719198f1..7fa6cdc161 100644 --- a/src/quick/items/qquickitemviewtransition.cpp +++ b/src/quick/items/qquickitemviewtransition.cpp @@ -162,7 +162,9 @@ QQuickItemViewTransitioner::QQuickItemViewTransitioner() QQuickItemViewTransitioner::~QQuickItemViewTransitioner() { - for (QSet::iterator it = runningJobs.begin(); it != runningJobs.end(); ++it) + typedef QSet::iterator JobIt; + + for (JobIt it = runningJobs.begin(), end = runningJobs.end(); it != end; ++it) (*it)->m_transitioner = 0; } diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index b88a3aecbc..d2b5786125 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2675,8 +2675,7 @@ void QQuickWindowPrivate::cleanupNodesOnShutdown() Q_Q(QQuickWindow); cleanupNodes(); cleanupNodesOnShutdown(contentItem); - QSet::const_iterator it = parentlessItems.begin(); - for (; it != parentlessItems.end(); ++it) + for (QSet::const_iterator it = parentlessItems.begin(), cend = parentlessItems.end(); it != cend; ++it) cleanupNodesOnShutdown(*it); animationController->windowNodesDestroyed(); q->cleanupSceneGraph(); diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp index 16745c18d5..b705ef48af 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp @@ -146,7 +146,10 @@ void QSGDefaultDistanceFieldGlyphCache::requestGlyphs(const QSet &glyph void QSGDefaultDistanceFieldGlyphCache::storeGlyphs(const QList &glyphs) { - QHash > glyphTextures; + typedef QHash > GlyphTextureHash; + typedef GlyphTextureHash::const_iterator GlyphTextureHashConstIt; + + GlyphTextureHash glyphTextures; GLint alignment = 4; // default value m_funcs->glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); @@ -203,8 +206,7 @@ void QSGDefaultDistanceFieldGlyphCache::storeGlyphs(const QList // restore to previous alignment m_funcs->glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); - QHash >::const_iterator i; - for (i = glyphTextures.constBegin(); i != glyphTextures.constEnd(); ++i) { + for (GlyphTextureHashConstIt i = glyphTextures.constBegin(), cend = glyphTextures.constEnd(); i != cend; ++i) { Texture t; t.textureId = i.key()->texture; t.size = i.key()->size; diff --git a/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp index e921e63fcb..f1cc9d1a86 100644 --- a/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp +++ b/src/quick/scenegraph/qsgshareddistancefieldglyphcache.cpp @@ -251,6 +251,8 @@ QSGSharedDistanceFieldGlyphCache::~QSGSharedDistanceFieldGlyphCache() void QSGSharedDistanceFieldGlyphCache::requestGlyphs(const QSet &glyphs) { + typedef QSet::const_iterator GlyphSetConstIt; + QMutexLocker locker(&m_pendingGlyphsMutex); #if defined(QSGSHAREDDISTANCEFIELDGLYPHCACHE_DEBUG) @@ -264,8 +266,7 @@ void QSGSharedDistanceFieldGlyphCache::requestGlyphs(const QSet &glyphs QVector glyphsVector; glyphsVector.reserve(glyphs.size()); - QSet::const_iterator it; - for (it = glyphs.constBegin(); it != glyphs.constEnd(); ++it) { + for (GlyphSetConstIt it = glyphs.constBegin(), cend = glyphs.constEnd(); it != cend; ++it) { Q_ASSERT(!m_bufferForGlyph.contains(*it)); glyphsVector.append(*it); } @@ -335,6 +336,8 @@ void QSGSharedDistanceFieldGlyphCache::referenceGlyphs(const QSet &glyp void QSGSharedDistanceFieldGlyphCache::releaseGlyphs(const QSet &glyphs) { + typedef QSet::const_iterator GlyphSetConstIt; + #if defined(QSGSHAREDDISTANCEFIELDGLYPHCACHE_DEBUG) qDebug("QSGSharedDistanceFieldGlyphCache::releaseGlyphs() called for %s (%d glyphs)", m_cacheId.constData(), glyphs.size()); @@ -345,8 +348,7 @@ void QSGSharedDistanceFieldGlyphCache::releaseGlyphs(const QSet &glyphs QVector glyphsVector; glyphsVector.reserve(glyphs.size()); - QSet::const_iterator glyphsIt; - for (glyphsIt = glyphs.constBegin(); glyphsIt != glyphs.constEnd(); ++glyphsIt) { + for (GlyphSetConstIt glyphsIt = glyphs.constBegin(), cend = glyphs.constEnd(); glyphsIt != cend; ++glyphsIt) { QHash::iterator bufferIt = m_bufferForGlyph.find(*glyphsIt); if (bufferIt != m_bufferForGlyph.end()) { void *buffer = bufferIt.value(); diff --git a/src/quick/scenegraph/util/qsgdepthstencilbuffer.cpp b/src/quick/scenegraph/util/qsgdepthstencilbuffer.cpp index 22d52878ae..5d2260923b 100644 --- a/src/quick/scenegraph/util/qsgdepthstencilbuffer.cpp +++ b/src/quick/scenegraph/util/qsgdepthstencilbuffer.cpp @@ -151,7 +151,7 @@ void QSGDefaultDepthStencilBuffer::free() QSGDepthStencilBufferManager::~QSGDepthStencilBufferManager() { - for (Hash::const_iterator it = m_buffers.constBegin(); it != m_buffers.constEnd(); ++it) { + for (Hash::const_iterator it = m_buffers.constBegin(), cend = m_buffers.constEnd(); it != cend; ++it) { QSGDepthStencilBuffer *buffer = it.value().data(); buffer->free(); buffer->m_manager = 0; diff --git a/src/quick/util/qquicksmoothedanimation.cpp b/src/quick/util/qquicksmoothedanimation.cpp index 55011f5a46..71dacfcb1d 100644 --- a/src/quick/util/qquicksmoothedanimation.cpp +++ b/src/quick/util/qquicksmoothedanimation.cpp @@ -378,11 +378,11 @@ QQuickSmoothedAnimationPrivate::QQuickSmoothedAnimationPrivate() QQuickSmoothedAnimationPrivate::~QQuickSmoothedAnimationPrivate() { + typedef QHash::iterator ActiveAnimationsHashIt; + delete anim; - QHash::iterator it; - for (it = activeAnimations.begin(); it != activeAnimations.end(); ++it) { + for (ActiveAnimationsHashIt it = activeAnimations.begin(), end = activeAnimations.end(); it != end; ++it) it.value()->clearTemplate(); - } } void QQuickSmoothedAnimationPrivate::updateRunningAnimations() diff --git a/src/quick/util/qquickspringanimation.cpp b/src/quick/util/qquickspringanimation.cpp index f2eee6a802..b68afbecdd 100644 --- a/src/quick/util/qquickspringanimation.cpp +++ b/src/quick/util/qquickspringanimation.cpp @@ -86,6 +86,7 @@ public: bool haveModulus : 1; bool skipUpdate : 1; typedef QHash ActiveAnimationHash; + typedef ActiveAnimationHash::Iterator ActiveAnimationHashIt; void clearTemplate() { animationTemplate = 0; } @@ -161,14 +162,12 @@ QSpringAnimation::~QSpringAnimation() { if (animationTemplate) { if (target.object()) { - QSpringAnimation::ActiveAnimationHash::iterator it = - animationTemplate->activeAnimations.find(target); + ActiveAnimationHashIt it = animationTemplate->activeAnimations.find(target); if (it != animationTemplate->activeAnimations.end() && it.value() == this) animationTemplate->activeAnimations.erase(it); } else { //target is no longer valid, need to search linearly - QSpringAnimation::ActiveAnimationHash::iterator it; - for (it = animationTemplate->activeAnimations.begin(); it != animationTemplate->activeAnimations.end(); ++it) { + for (ActiveAnimationHashIt it = animationTemplate->activeAnimations.begin(); it != animationTemplate->activeAnimations.end(); ++it) { if (it.value() == this) { animationTemplate->activeAnimations.erase(it); break; @@ -329,8 +328,7 @@ void QQuickSpringAnimationPrivate::updateMode() mode = QSpringAnimation::Spring; else { mode = QSpringAnimation::Velocity; - QSpringAnimation::ActiveAnimationHash::iterator it; - for (it = activeAnimations.begin(); it != activeAnimations.end(); ++it) { + for (QSpringAnimation::ActiveAnimationHashIt it = activeAnimations.begin(), end = activeAnimations.end(); it != end; ++it) { QSpringAnimation *animation = *it; animation->startTime = animation->lastTime; qreal dist = qAbs(animation->currentValue - animation->to); @@ -378,10 +376,8 @@ QQuickSpringAnimation::QQuickSpringAnimation(QObject *parent) QQuickSpringAnimation::~QQuickSpringAnimation() { Q_D(QQuickSpringAnimation); - QSpringAnimation::ActiveAnimationHash::iterator it; - for (it = d->activeAnimations.begin(); it != d->activeAnimations.end(); ++it) { + for (QSpringAnimation::ActiveAnimationHashIt it = d->activeAnimations.begin(), end = d->activeAnimations.end(); it != end; ++it) it.value()->clearTemplate(); - } } /*! diff --git a/src/quick/util/qquicktimeline.cpp b/src/quick/util/qquicktimeline.cpp index 04b66800d2..8cd9b349d8 100644 --- a/src/quick/util/qquicktimeline.cpp +++ b/src/quick/util/qquicktimeline.cpp @@ -659,7 +659,7 @@ void QQuickTimeLine::complete() */ void QQuickTimeLine::clear() { - for (QQuickTimeLinePrivate::Ops::ConstIterator iter = d->ops.begin(); iter != d->ops.end(); ++iter) + for (QQuickTimeLinePrivate::Ops::const_iterator iter = d->ops.begin(), cend = d->ops.end(); iter != cend; ++iter) iter.key()->_t = 0; d->ops.clear(); d->length = 0; @@ -735,9 +735,9 @@ int QQuickTimeLinePrivate::advance(int t) pauseTime = -1; // Minimal advance time int advanceTime = t; - for (Ops::Iterator iter = ops.begin(); iter != ops.end(); ++iter) { - TimeLine &tl = *iter; - Op &op = tl.ops.first(); + for (Ops::const_iterator iter = ops.constBegin(), cend = ops.constEnd(); iter != cend; ++iter) { + const TimeLine &tl = *iter; + const Op &op = tl.ops.first(); int length = op.length - tl.consumedOpLength; if (length < advanceTime) { -- cgit v1.2.3