aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles/qquickparticleemitter_p.h
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2016-03-03 14:54:31 +0100
committerErik Verbruggen <erik.verbruggen@theqtcompany.com>2016-03-04 13:54:50 +0000
commit5a9734c0d071b7490b3ef7edf5f080786dc89f79 (patch)
treeef8d18707d2f65df718ea785745d079ff3558fb8 /src/particles/qquickparticleemitter_p.h
parent554566788f585caaef14d929cee6557ad929e06e (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.h19
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;
};