diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-08-06 15:30:01 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-08-28 06:30:29 +0200 |
commit | f3268fcb2a4e73d99dbd66aa5e262a118b5a5480 (patch) | |
tree | 374bd9ace2fccaa33534f338950185368ab5598b /src/core/qchangearbiter.cpp | |
parent | 91dc1e1a61651a82a0ee5ce6ad3b24e82f526be6 (diff) |
Do direct notification of backend nodeswip/refactor
Since aspect manager is now on main thread, we can directly update
backend nodes safely. Track nodes which have changed properties and
notify the backend nodes as part of the frame loop.
This avoid allocating and delivering many change messages.
To follow:
- implement on all nodes
- look at backend to frontend syncing
- figure out what to do with non property messages (components
added/removed, commands, ...)
Change-Id: Ia0c442b0528e728c4324d168200bae021bc29266
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/qchangearbiter.cpp')
-rw-r--r-- | src/core/qchangearbiter.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp index 8cfc4b066..6ad72c895 100644 --- a/src/core/qchangearbiter.cpp +++ b/src/core/qchangearbiter.cpp @@ -266,6 +266,22 @@ void QChangeArbiter::sceneChangeEventWithLock(const QSceneChangeList &e) emit receivedChange(); } +void QChangeArbiter::addDirtyFrontEndNode(QNode *node) +{ + if (!m_dirtyFrontEndNodes.contains(node)) + m_dirtyFrontEndNodes += node; +} + +void QChangeArbiter::removeDirtyFrontEndNode(QNode *node) +{ + m_dirtyFrontEndNodes.removeOne(node); +} + +QVector<QNode *> QChangeArbiter::takeDirtyFrontEndNodes() +{ + return std::move(m_dirtyFrontEndNodes); +} + // Either we have the postman or we could make the QChangeArbiter agnostic to the postman // but that would require adding it to every QObserverList in m_aspectObservations. void QChangeArbiter::setPostman(QAbstractPostman *postman) |