summaryrefslogtreecommitdiffstats
path: root/src/core/qchangearbiter.cpp
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2014-10-28 19:43:29 +0100
committerMilian Wolff <milian.wolff@kdab.com>2014-10-29 13:53:47 +0100
commited7e4de6b3a164cdfbf53338a298877ac12ac8ba (patch)
tree49b73569ecafeb1ec330d323668136fc53735dbe /src/core/qchangearbiter.cpp
parentbb8614ae3669bb61509fc8a641afc73fd23c8be4 (diff)
Optimize QChangeArbiter::distributeQueueChanges.
Instead of popping the QVector from the start, we just iterate efficiently over it and then clear the whole queue in one go. This removes the number one hotspot in the upcoming bigscene-cpp example for me. Change-Id: I93d1254fd5d3f3a3b211aa308ab9b26828d30858 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/qchangearbiter.cpp')
-rw-r--r--src/core/qchangearbiter.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp
index 97b602adb..826cedc07 100644
--- a/src/core/qchangearbiter.cpp
+++ b/src/core/qchangearbiter.cpp
@@ -111,8 +111,8 @@ void QChangeArbiter::initialize(QAspectJobManagerInterface *jobManager)
void QChangeArbiter::distributeQueueChanges(ChangeQueue *changeQueue)
{
- for (int i = 0; i < changeQueue->size(); i++) {
- QSceneChangePtr change = changeQueue->takeFirst();
+ for (int i = 0, n = changeQueue->size(); i < n; i++) {
+ QSceneChangePtr& change = (*changeQueue)[i];
// Lookup which observers care about the subject this change came from
// and distribute the change to them
if (change.isNull())
@@ -158,6 +158,7 @@ void QChangeArbiter::distributeQueueChanges(ChangeQueue *changeQueue)
} // observableType switch
}
+ changeQueue->clear();
}
QThreadStorage<QChangeArbiter::ChangeQueue *> *QChangeArbiter::tlsChangeQueue()