diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2016-03-03 14:54:31 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@theqtcompany.com> | 2016-03-04 13:54:50 +0000 |
commit | 5a9734c0d071b7490b3ef7edf5f080786dc89f79 (patch) | |
tree | ef8d18707d2f65df718ea785745d079ff3558fb8 /src/particles/qquickparticleemitter_p.h | |
parent | 554566788f585caaef14d929cee6557ad929e06e (diff) |
Particles: reduce excessive hash accesses to a more passable level.
By caching the group id in the particle emitter, and groups in the
painter.
Test case: samegame, 1 player, click 1 set of 3 stones, quit.
QQuickParticleSystem::emittersChanged(), before patch:
- 64M instr. inclusive
- 145,880 calls to findNode (29M instr.)
after:
- 21M instr. inclusive
- 0 calls to findNode
- 25 calls to QQuickParticlePainter::recalculateGroupIds (9800 instr.
inclusive).
Change-Id: I4aba9d50100513c6b7cdd230e30b3aecaf84485a
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'src/particles/qquickparticleemitter_p.h')
-rw-r--r-- | src/particles/qquickparticleemitter_p.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/particles/qquickparticleemitter_p.h b/src/particles/qquickparticleemitter_p.h index bb77d132cc..9b114ad46b 100644 --- a/src/particles/qquickparticleemitter_p.h +++ b/src/particles/qquickparticleemitter_p.h @@ -119,6 +119,13 @@ public: return m_group; } + QQuickParticleGroupData::ID groupId() const + { + if (m_groupIdNeedRecalculation) + reclaculateGroupId(); + return m_groupId; + } + int particleDurationVariation() const { return m_particleDurationVariation; @@ -185,6 +192,7 @@ public Q_SLOTS: { if (m_system != arg) { m_system = arg; + m_groupIdNeedRecalculation = true; if (m_system) m_system->registerParticleEmitter(this); Q_EMIT systemChanged(arg); @@ -195,6 +203,7 @@ public Q_SLOTS: { if (m_group != arg) { m_group = arg; + m_groupIdNeedRecalculation = true; Q_EMIT groupChanged(arg); } } @@ -319,7 +328,6 @@ protected: int m_particleDurationVariation; bool m_enabled; QQuickParticleSystem* m_system; - QString m_group; QQuickParticleExtruder* m_extruder; QQuickParticleExtruder* m_defaultExtruder; QQuickParticleExtruder* effectiveExtruder(); @@ -350,7 +358,14 @@ protected: QPointF m_last_last_last_emitter; bool isEmitConnected(); -private: + +private: // methods + void reclaculateGroupId() const; + +private: // data + QString m_group; + mutable bool m_groupIdNeedRecalculation; + mutable QQuickParticleGroupData::ID m_groupId; QQuickDirection m_nullVector; }; |