aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles/qquickv4particledata.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2016-03-08 10:13:15 +0100
committerErik Verbruggen <erik.verbruggen@theqtcompany.com>2016-03-08 09:37:21 +0000
commit350a74ec69b535df07ad7ca45415090749c75293 (patch)
tree911d3c17b0af4f733f5449c6796014cfc9ac0d04 /src/particles/qquickv4particledata.cpp
parent922e9d6b0c7ae1acdae4986e8000ad9a693b7469 (diff)
Particles: Shrink QQuickParticleData by 2 pointers.
Samegame creates about 23,000 particles, so this reduces the memory by ~180kb on 32bit, so ~360kb on 64bit. Change-Id: I0581524ab232b474c5d43abeabd7ebf6174e740f Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'src/particles/qquickv4particledata.cpp')
-rw-r--r--src/particles/qquickv4particledata.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/particles/qquickv4particledata.cpp b/src/particles/qquickv4particledata.cpp
index 86e3c91ba8..3d7f4ce5b8 100644
--- a/src/particles/qquickv4particledata.cpp
+++ b/src/particles/qquickv4particledata.cpp
@@ -272,11 +272,13 @@ QT_BEGIN_NAMESPACE
struct QV4ParticleData : public QV4::Object
{
struct Data : QV4::Object::Data {
- Data(QQuickParticleData *datum)
+ Data(QQuickParticleData *datum, QQuickParticleSystem* particleSystem)
: datum(datum)
+ , particleSystem(particleSystem)
{
}
QQuickParticleData* datum;//TODO: Guard needed?
+ QQuickParticleSystem* particleSystem;
};
V4_OBJECT(QV4::Object)
};
@@ -312,7 +314,7 @@ static QV4::ReturnedValue particleData_lifeLeft(QV4::CallContext *ctx)
if (!r || !r->d()->datum)
return ctx->engine()->throwError(QStringLiteral("Not a valid ParticleData object"));
- return QV4::Encode(r->d()->datum->lifeLeft());
+ return QV4::Encode(r->d()->datum->lifeLeft(r->d()->particleSystem));
}
static QV4::ReturnedValue particleData_curSize(QV4::CallContext *ctx)
@@ -323,7 +325,7 @@ static QV4::ReturnedValue particleData_curSize(QV4::CallContext *ctx)
if (!r || !r->d()->datum)
return ctx->engine()->throwError(QStringLiteral("Not a valid ParticleData object"));
- return QV4::Encode(r->d()->datum->curSize());
+ return QV4::Encode(r->d()->datum->curSize(r->d()->particleSystem));
}
#define COLOR_GETTER_AND_SETTER(VAR, NAME) static QV4::ReturnedValue particleData_get_ ## NAME (QV4::CallContext *ctx) \
{ \
@@ -397,7 +399,7 @@ static QV4::ReturnedValue particleData_set_ ## VARIABLE (QV4::CallContext *ctx)\
if (!r || !r->d()->datum) \
ctx->engine()->throwError(QStringLiteral("Not a valid ParticleData object")); \
\
- return QV4::Encode(r->d()->datum-> GETTER ());\
+ return QV4::Encode(r->d()->datum-> GETTER (r->d()->particleSystem));\
}\
\
static QV4::ReturnedValue particleData_set_ ## VARIABLE (QV4::CallContext *ctx)\
@@ -407,7 +409,7 @@ static QV4::ReturnedValue particleData_set_ ## VARIABLE (QV4::CallContext *ctx)\
if (!r || !r->d()->datum)\
ctx->engine()->throwError(QStringLiteral("Not a valid ParticleData object"));\
\
- r->d()->datum-> SETTER (ctx->argc() ? ctx->args()[0].toNumber() : qQNaN());\
+ r->d()->datum-> SETTER (ctx->argc() ? ctx->args()[0].toNumber() : qQNaN(), r->d()->particleSystem);\
return QV4::Encode::undefined(); \
}
@@ -503,7 +505,7 @@ QV4ParticleDataDeletable::~QV4ParticleDataDeletable()
V4_DEFINE_EXTENSION(QV4ParticleDataDeletable, particleV4Data);
-QQuickV4ParticleData::QQuickV4ParticleData(QV8Engine* engine, QQuickParticleData* datum)
+QQuickV4ParticleData::QQuickV4ParticleData(QV8Engine* engine, QQuickParticleData* datum, QQuickParticleSystem *system)
{
if (!engine || !datum)
return;
@@ -511,7 +513,7 @@ QQuickV4ParticleData::QQuickV4ParticleData(QV8Engine* engine, QQuickParticleData
QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine);
QV4::Scope scope(v4);
QV4ParticleDataDeletable *d = particleV4Data(scope.engine);
- QV4::ScopedObject o(scope, v4->memoryManager->allocObject<QV4ParticleData>(datum));
+ QV4::ScopedObject o(scope, v4->memoryManager->allocObject<QV4ParticleData>(datum, system));
QV4::ScopedObject p(scope, d->proto.value());
o->setPrototype(p);
m_v4Value = o;