aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles/qquickparticleemitter.cpp
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.cpp
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.cpp')
-rw-r--r--src/particles/qquickparticleemitter.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/particles/qquickparticleemitter.cpp b/src/particles/qquickparticleemitter.cpp
index 5e5c750e0e..7cce4d481a 100644
--- a/src/particles/qquickparticleemitter.cpp
+++ b/src/particles/qquickparticleemitter.cpp
@@ -237,6 +237,8 @@ QQuickParticleEmitter::QQuickParticleEmitter(QQuickItem *parent) :
, m_reset_last(true)
, m_last_timestamp(-1)
, m_last_emission(0)
+ , m_groupIdNeedRecalculation(false)
+ , m_groupId(QQuickParticleGroupData::DefaultGroupID)
{
//TODO: Reset velocity/acc back to null vector? Or allow null pointer?
@@ -257,6 +259,16 @@ bool QQuickParticleEmitter::isEmitConnected()
IS_SIGNAL_CONNECTED(this, QQuickParticleEmitter, emitParticles, (QQmlV4Handle));
}
+void QQuickParticleEmitter::reclaculateGroupId() const
+{
+ if (!m_system) {
+ m_groupId = QQuickParticleGroupData::InvalidID;
+ return;
+ }
+ m_groupId = m_system->groupIds.value(group(), QQuickParticleGroupData::InvalidID);
+ m_groupIdNeedRecalculation = m_groupId == QQuickParticleGroupData::InvalidID;
+}
+
void QQuickParticleEmitter::componentComplete()
{
if (!m_system && qobject_cast<QQuickParticleSystem*>(parentItem()))