diff options
author | Robin Burchell <robin.burchell@crimson.no> | 2018-06-13 22:57:27 +0200 |
---|---|---|
committer | Robin Burchell <robin.burchell@crimson.no> | 2018-06-26 08:47:46 +0000 |
commit | 9480734ef1b0f37aefdb7f0988af725936a9ec40 (patch) | |
tree | 739c76a9d2da98138a6cc0afe36f586ee0d8d712 /src/quick/scenegraph/qsgadaptationlayer_p.h | |
parent | d5adc61b1fe358f7ba5d3570305eaf0733426e2f (diff) |
QSGAdaptationLayer: Remove QLinkedList usage
This is O(n), which hurts with a large number of consumers.
Change-Id: I970da3ddee40cf4e47d2c278e9a480db1cf90cd3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/quick/scenegraph/qsgadaptationlayer_p.h')
-rw-r--r-- | src/quick/scenegraph/qsgadaptationlayer_p.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/quick/scenegraph/qsgadaptationlayer_p.h b/src/quick/scenegraph/qsgadaptationlayer_p.h index c23163a6b3..5a465831cb 100644 --- a/src/quick/scenegraph/qsgadaptationlayer_p.h +++ b/src/quick/scenegraph/qsgadaptationlayer_p.h @@ -64,6 +64,7 @@ #include <QtGui/private/qdatabuffer_p.h> #include <private/qopenglcontext_p.h> #include <private/qdistancefield_p.h> +#include <private/qintrusivelist_p.h> // ### remove #include <QtQuick/private/qquicktext_p.h> @@ -404,7 +405,9 @@ public: virtual ~QSGDistanceFieldGlyphConsumer() {} virtual void invalidateGlyphs(const QVector<quint32> &glyphs) = 0; + QIntrusiveListNode node; }; +typedef QIntrusiveList<QSGDistanceFieldGlyphConsumer, &QSGDistanceFieldGlyphConsumer::node> QSGDistanceFieldGlyphConsumerList; class Q_QUICK_PRIVATE_EXPORT QSGDistanceFieldGlyphCache { @@ -465,8 +468,8 @@ public: void update(); - void registerGlyphNode(QSGDistanceFieldGlyphConsumer *node) { m_registeredNodes.append(node); } - void unregisterGlyphNode(QSGDistanceFieldGlyphConsumer *node) { m_registeredNodes.removeOne(node); } + void registerGlyphNode(QSGDistanceFieldGlyphConsumer *node) { m_registeredNodes.insert(node); } + void unregisterGlyphNode(QSGDistanceFieldGlyphConsumer *node) { m_registeredNodes.remove(node); } virtual void registerOwnerElement(QQuickItem *ownerElement); virtual void unregisterOwnerElement(QQuickItem *ownerElement); @@ -522,7 +525,7 @@ private: QHash<glyph_t, GlyphData> m_glyphsData; QDataBuffer<glyph_t> m_pendingGlyphs; QSet<glyph_t> m_populatingGlyphs; - QLinkedList<QSGDistanceFieldGlyphConsumer*> m_registeredNodes; + QSGDistanceFieldGlyphConsumerList m_registeredNodes; static Texture s_emptyTexture; }; |