aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlpropertycache.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-11-19 15:30:45 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-11-26 17:57:36 +0100
commitb897d69cf7071eb53432ded62fdc80a2a6258e98 (patch)
tree4b3816e9c2761ce90689e7259de9ee2567cd32a8 /src/qml/qml/qqmlpropertycache.cpp
parent718472d8e1e30fe2b0bc0e3b514ea0ed20259737 (diff)
Always fully resolve property data on creation
Resolving things lazily is not really optimizing anything. Task-number: QTBUG-82931 Change-Id: Iff9e1c7c16ae0dec7e0cec018ed73c6c98542925 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlpropertycache.cpp')
-rw-r--r--src/qml/qml/qqmlpropertycache.cpp71
1 files changed, 3 insertions, 68 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp
index 20f52af5ea..060437441d 100644
--- a/src/qml/qml/qqmlpropertycache.cpp
+++ b/src/qml/qml/qqmlpropertycache.cpp
@@ -134,23 +134,6 @@ static void populate(QQmlPropertyData *data, const QMetaProperty &p)
data->setRevision(QTypeRevision::fromEncodedVersion(p.revision()));
}
-void QQmlPropertyData::lazyLoad(const QMetaProperty &p)
-{
- populate(this, p);
- int type = static_cast<int>(p.userType());
- if (type == QMetaType::QObjectStar) {
- setPropType(type);
- m_flags.type = Flags::QObjectDerivedType;
- } else if (type == QMetaType::QVariant) {
- setPropType(type);
- m_flags.type = Flags::QVariantType;
- } else if (type >= QMetaType::User || type == 0) {
- m_flags.notFullyResolved = true;
- } else {
- setPropType(type);
- }
-}
-
void QQmlPropertyData::load(const QMetaProperty &p)
{
populate(this, p);
@@ -188,18 +171,6 @@ void QQmlPropertyData::load(const QMetaMethod &m)
setRevision(QTypeRevision::fromEncodedVersion(m.revision()));
}
-void QQmlPropertyData::lazyLoad(const QMetaMethod &m)
-{
- load(m);
-
- const char *returnType = m.typeName();
- if (!returnType)
- returnType = "\0";
- if ((*returnType != 'v') || (qstrcmp(returnType+1, "oid") != 0)) {
- m_flags.notFullyResolved = true;
- }
-}
-
/*!
Creates a new empty QQmlPropertyCache.
*/
@@ -532,7 +503,7 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject,
else
data->setFlags(methodFlags);
- data->lazyLoad(m);
+ data->load(m);
data->m_flags.setIsDirect(!dynamicMetaObject);
Q_ASSERT((allowedRevisionCache.count() - 1) < Q_INT16_MAX);
@@ -611,7 +582,7 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject,
QQmlPropertyData *data = &propertyIndexCache[ii - propertyIndexCacheStart];
data->setFlags(propertyFlags);
- data->lazyLoad(p);
+ data->load(p);
data->setTypeVersion(typeVersion);
data->m_flags.setIsDirect(!dynamicMetaObject);
@@ -648,42 +619,6 @@ void QQmlPropertyCache::append(const QMetaObject *metaObject,
}
}
-void QQmlPropertyCache::resolve(QQmlPropertyData *data) const
-{
- Q_ASSERT(data->notFullyResolved());
- data->m_flags.notFullyResolved = false;
-
- const QMetaObject *mo = firstCppMetaObject();
- if (data->isFunction()) {
- auto metaMethod = mo->method(data->coreIndex());
- const char *retTy = metaMethod.typeName();
- if (!retTy)
- retTy = "\0";
- data->setPropType(QMetaType::fromName(retTy).id());
- } else {
- auto metaProperty = mo->property(data->coreIndex());
- data->setPropType(metaProperty.metaType().id());
- }
-
- if (!data->isFunction()) {
- if (data->propType() == QMetaType::UnknownType) {
- int propOffset = mo->propertyOffset();
- if (mo && data->coreIndex() < propOffset + mo->propertyCount()) {
- while (data->coreIndex() < propOffset) {
- mo = mo->superClass();
- propOffset = mo->propertyOffset();
- }
-
- int registerResult = -1;
- void *argv[] = { &registerResult };
- mo->static_metacall(QMetaObject::RegisterPropertyMetaType, data->coreIndex() - propOffset, argv);
- data->setPropType(registerResult == -1 ? QMetaType::UnknownType : registerResult);
- }
- }
- flagsForPropertyType(QMetaType(data->propType()), data->m_flags);
- }
-}
-
void QQmlPropertyCache::updateRecur(const QMetaObject *metaObject)
{
if (!metaObject)
@@ -827,7 +762,7 @@ QQmlPropertyData *QQmlPropertyCache::findProperty(
} while (it != end);
}
- return ensureResolved(result);
+ return result;
}
return nullptr;