diff options
author | Milian Wolff <milian.wolff@kdab.com> | 2014-10-28 19:43:29 +0100 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2014-10-29 13:53:47 +0100 |
commit | ed7e4de6b3a164cdfbf53338a298877ac12ac8ba (patch) | |
tree | 49b73569ecafeb1ec330d323668136fc53735dbe /src/core/qchangearbiter.cpp | |
parent | bb8614ae3669bb61509fc8a641afc73fd23c8be4 (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.cpp | 5 |
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() |