diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-06-10 10:31:53 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-06-15 13:51:04 +0000 |
commit | fa6490efbcc486edbb8c344bc83c1370826d9fc3 (patch) | |
tree | e5b4c45dda16bb3865f38fd465ef67e4499927c4 | |
parent | 65870f804ba34344d71da076f3b15938bf321869 (diff) | |
download | qt-creator-fa6490efbcc486edbb8c344bc83c1370826d9fc3.tar.gz |
CMake: Avoid iterating project tree for each build target
Reduces lock-up in main thread after loading projects
Task-number: QTCREATORBUG-25783
Change-Id: Ie769074f1689698379bd6fd60f74957086cfce37
Reviewed-by: hjk <hjk@qt.io>
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 243fdb83f9..3f90ec7a4c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -623,18 +623,22 @@ void CMakeBuildSystem::updateProjectData() if (newRoot) { setRootProjectNode(std::move(newRoot)); - const FilePath buildDir = cmakeBuildConfiguration()->buildDirectory(); - if (p->rootProjectNode()) { + if (QTC_GUARD(p->rootProjectNode())) { const QString nodeName = p->rootProjectNode()->displayName(); p->setDisplayName(nodeName); - } - for (const CMakeBuildTarget &bt : qAsConst(m_buildTargets)) { - const QString buildKey = bt.title; - if (ProjectNode *node = p->findNodeForBuildKey(buildKey)) { - if (auto targetNode = dynamic_cast<CMakeTargetNode *>(node)) - targetNode->setConfig(patchedConfig); - } + // set config on target nodes + const QSet<QString> buildKeys = Utils::transform<QSet>(m_buildTargets, + &CMakeBuildTarget::title); + p->rootProjectNode()->forEachProjectNode( + [patchedConfig, buildKeys](const ProjectNode *node) { + if (buildKeys.contains(node->buildKey())) { + auto targetNode = const_cast<CMakeTargetNode *>( + dynamic_cast<const CMakeTargetNode *>(node)); + if (QTC_GUARD(targetNode)) + targetNode->setConfig(patchedConfig); + } + }); } } } |