From b42c8c4de293af0b6e9c0691daa835939b54d4e1 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 23 Jul 2014 12:43:38 -0500 Subject: Accelerate property lookups for C++-based QObject singletons. Change-Id: Icbdf06a077014db5dd57cba42f84591433ec4196 Reviewed-by: Simon Hausmann --- src/qml/qml/qqmlmetatype.cpp | 5 ++++- src/qml/qml/qqmltypewrapper.cpp | 11 +++++++++++ src/qml/qml/qqmltypewrapper_p.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) (limited to 'src/qml/qml') diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 42f67f3345..900ac5a2e4 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -233,7 +233,10 @@ void QQmlType::SingletonInstanceInfo::init(QQmlEngine *e) v4->popContext(); } else if (qobjectCallback && !qobjectApi(e)) { v4->pushGlobalContext(); - setQObjectApi(e, qobjectCallback(e, e)); + QObject *o = qobjectCallback(e, e); + setQObjectApi(e, o); + // if this object can use a property cache, create it now + QQmlData::ensurePropertyCache(e, o); v4->popContext(); } else if (!url.isEmpty() && !qobjectApi(e)) { v4->pushGlobalContext(); diff --git a/src/qml/qml/qqmltypewrapper.cpp b/src/qml/qml/qqmltypewrapper.cpp index 53afd36437..0ae3e31ec0 100644 --- a/src/qml/qml/qqmltypewrapper.cpp +++ b/src/qml/qml/qqmltypewrapper.cpp @@ -75,6 +75,17 @@ bool QmlTypeWrapper::isSingleton() const return d()->type && d()->type->isSingleton(); } +QObject* QmlTypeWrapper::singletonObject() const +{ + if (!isSingleton()) + return 0; + + QQmlEngine *e = d()->v8->engine(); + QQmlType::SingletonInstanceInfo *siinfo = d()->type->singletonInstanceInfo(); + siinfo->init(e); + return siinfo->qobjectApi(e); +} + QVariant QmlTypeWrapper::toVariant() const { if (d()->type && d()->type->isSingleton()) { diff --git a/src/qml/qml/qqmltypewrapper_p.h b/src/qml/qml/qqmltypewrapper_p.h index 27ecac991e..becd73eaf0 100644 --- a/src/qml/qml/qqmltypewrapper_p.h +++ b/src/qml/qml/qqmltypewrapper_p.h @@ -87,6 +87,7 @@ private: public: bool isSingleton() const; + QObject *singletonObject() const; QVariant toVariant() const; -- cgit v1.2.3