From 1e852bb496b93908f24869631443f1c971f2ce09 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 26 Dec 2022 12:04:24 +0100 Subject: [PATCH] De-inline QQmlPrivate::revisionClassInfos() It was compiled 1152 times, with the QList::push_back alone contributing a cumulative ~24sec to a 'ninja qtdeclarative'. There's no reason it should be inline, so make it out-of-line. This function was the highest non-QMetaType/non-std contributor in a Clang -ftime-trace build of qtdeclarative. Pick-to: 6.5 Task-number: QTBUG-97601 Change-Id: I143639168f859dc604b902647fe921332bbe49c0 Reviewed-by: Giuseppe D'Angelo --- src/qml/qml/qqml.cpp | 13 +++++++++++++ src/qml/qml/qqmlprivate.h | 11 +---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/qml/qml/qqml.cpp b/src/qml/qml/qqml.cpp index 3eebbb6df7..db04e7c6d8 100644 --- a/src/qml/qml/qqml.cpp +++ b/src/qml/qml/qqml.cpp @@ -712,6 +712,19 @@ void QQmlPrivate::qmlunregister(RegistrationType type, quintptr data) } } +QList QQmlPrivate::revisionClassInfos(const QMetaObject *metaObject, + const char *key) +{ + QList revisions; + for (int index = indexOfOwnClassInfo(metaObject, key); index != -1; + index = indexOfOwnClassInfo(metaObject, key, index - 1)) { + revisions.push_back(QTypeRevision::fromEncodedVersion( + QByteArray(metaObject->classInfo(index).value()).toInt())); + } + return revisions; +} + + namespace QQmlPrivate { template<> void qmlRegisterTypeAndRevisions( diff --git a/src/qml/qml/qqmlprivate.h b/src/qml/qml/qqmlprivate.h index 9b6a3488e0..ee88d75722 100644 --- a/src/qml/qml/qqmlprivate.h +++ b/src/qml/qml/qqmlprivate.h @@ -799,16 +799,7 @@ namespace QQmlPrivate QByteArray(metaObject->classInfo(index).value()).toInt()); } - inline QList revisionClassInfos(const QMetaObject *metaObject, const char *key) - { - QList revisions; - for (int index = indexOfOwnClassInfo(metaObject, key); index != -1; - index = indexOfOwnClassInfo(metaObject, key, index - 1)) { - revisions.push_back(QTypeRevision::fromEncodedVersion( - QByteArray(metaObject->classInfo(index).value()).toInt())); - } - return revisions; - } + Q_QML_EXPORT QList revisionClassInfos(const QMetaObject *metaObject, const char *key); inline bool boolClassInfo(const QMetaObject *metaObject, const char *key, bool defaultValue = false)