diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-11-23 09:32:45 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-11-23 16:28:26 +0000 |
commit | d0a07dcacb70eaa58b36cd9fc3b37f8c8ce8106c (patch) | |
tree | b0c4380483b5f153c811bb72b327289d546c5179 | |
parent | 910a8864dc43f8dede7617855282f19de62ee939 (diff) | |
download | qt-creator-d0a07dcacb70eaa58b36cd9fc3b37f8c8ce8106c.tar.gz |
QmlJS: std::set instead of QList
This reduces the CPU time of Export::visibleInVContext() from 50% to 15%
on Windows, when switching files.
Change-Id: Iff82924c47d1b696c9d3d7ca40f49d9d02bcb3e6
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/libs/qmljs/qmljslink.cpp | 3 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 4 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsviewercontext.h | 4 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/model/rewriterview.cpp | 6 | ||||
-rw-r--r-- | src/plugins/qmljstools/qmljsmodelmanager.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp | 7 |
7 files changed, 18 insertions, 10 deletions
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 6c04966ced..2ce98efad3 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -123,7 +123,8 @@ Link::Link(const Snapshot &snapshot, const ViewerContext &vContext, const Librar { d->m_valueOwner = new ValueOwner; d->m_snapshot = snapshot; - d->m_importPaths = vContext.paths; + const QList<Utils::FilePath> list(vContext.paths.begin(), vContext.paths.end()); + d->m_importPaths = list; d->m_applicationDirectories = vContext.applicationDirectories; d->m_builtins = builtins; d->m_vContext = vContext; diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index 70eebf6faf..6d3fda5af3 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -63,8 +63,8 @@ static const char *qtQuickUISuffix = "ui.qml"; static void maybeAddPath(ViewerContext &context, const Utils::FilePath &path) { - if (!path.isEmpty() && !context.paths.contains(path)) - context.paths.append(path); + if (!path.isEmpty() && !context.paths.count(path) > 0) + context.paths.insert(path); } static QList<Utils::FilePath> environmentImportPaths() diff --git a/src/libs/qmljs/qmljsviewercontext.h b/src/libs/qmljs/qmljsviewercontext.h index 7d22136844..043f56b108 100644 --- a/src/libs/qmljs/qmljsviewercontext.h +++ b/src/libs/qmljs/qmljsviewercontext.h @@ -8,6 +8,8 @@ #include <QStringList> +#include <set> + namespace QmlJS { struct QMLJS_EXPORT ViewerContext @@ -21,7 +23,7 @@ struct QMLJS_EXPORT ViewerContext }; QStringList selectors; - QList<Utils::FilePath> paths; + std::set<Utils::FilePath> paths; QList<Utils::FilePath> applicationDirectories; Dialect language = Dialect::Qml; Flags flags = AddAllPaths; diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 927b762ffe..cdda880f84 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -149,7 +149,7 @@ static QString qualifiedTypeNameForContext(const ObjectValue *objectValue, if (!cImport.valid()) break; for (const Export &e : std::as_const(cImport.possibleExports)) { - if (e.pathRequired.isEmpty() || vContext.paths.contains(e.pathRequired)) { + if (e.pathRequired.isEmpty() || vContext.paths.count(e.pathRequired) > 0) { switch (e.exportName.type) { case ImportType::Library: { diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 1a09a070fd..89ad9c0ab9 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -1005,8 +1005,10 @@ QString RewriterView::pathForImport(const Import &import) QStringList RewriterView::importDirectories() const { - return Utils::transform(m_textToModelMerger->vContext().paths, - [](const Utils::FilePath &p) { return p.toString(); }); + const QList<Utils::FilePath> list(m_textToModelMerger->vContext().paths.begin(), + m_textToModelMerger->vContext().paths.end()); + + return Utils::transform(list, [](const Utils::FilePath &p) { return p.toString(); }); } QSet<QPair<QString, QString> > RewriterView::qrcMapping() const diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 66b92ebabe..149897b752 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -281,7 +281,7 @@ void ModelManager::delayedInitialization() ViewerContext qbsVContext; qbsVContext.language = Dialect::QmlQbs; - qbsVContext.paths.append(ICore::resourcePath("qbs")); + qbsVContext.paths.insert(ICore::resourcePath("qbs")); setDefaultVContext(qbsVContext); } diff --git a/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp b/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp index 45d5f51577..8f300db02f 100644 --- a/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp +++ b/tests/auto/qml/codemodel/importscheck/tst_importscheck.cpp @@ -58,7 +58,7 @@ void scanDirectory(const QString &dir) ModelManagerInterface::instance(), false); ModelManagerInterface::instance()->test_joinAllThreads(); ViewerContext vCtx; - vCtx.paths.append(dirPath); + vCtx.paths.insert(dirPath); Snapshot snap = ModelManagerInterface::instance()->snapshot(); ImportDependencies *iDeps = snap.importDependencies(); @@ -176,7 +176,10 @@ void tst_ImportCheck::test() ModelManagerInterface::instance(), false); ModelManagerInterface::instance()->test_joinAllThreads(); ViewerContext vCtx; - vCtx.paths.append(pathPaths); + + for (const Utils::FilePath &path : pathPaths) + vCtx.paths.insert(path); + Snapshot snap = ModelManagerInterface::instance()->snapshot(); ImportDependencies *iDeps = snap.importDependencies(); |