aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-04-06 12:21:34 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-04-06 11:05:45 +0000
commit300afe8b8d3a919b2e4d7e5f30e9d4dfd341eb1d (patch)
tree5901080c7f1442d8ec5598ed34fe11212809acfa /src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
parentb9ae919cb75dbb029a29ef3a77694e097638ddfc (diff)
QbsProjectManager: Cache run environment
Setting up the qbs run environment is not free, and the respective code gets triggered from other plugins much more often than expected. Task-number: QTCREATORBUG-20175 Change-Id: I6529718d20738140963486caef103d6d17958d50 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp')
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index ca0ed33f0c..43ed3c1636 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -109,6 +109,7 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target)
if (success && !terminalAspect->isUserSet())
terminalAspect->setUseTerminal(isConsoleApplication());
});
+ connect(project, &QbsProject::dataChanged, this, [this] { m_envCache.clear(); });
connect(BuildManager::instance(), &BuildManager::buildStateChanged, this,
[this, project](Project *p) {
if (p == project && !BuildManager::isBuilding(p)) {
@@ -255,6 +256,12 @@ QString QbsRunConfiguration::baseWorkingDirectory() const
void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
{
+ const auto key = qMakePair(env.toStringList(), m_usingLibraryPaths);
+ const auto it = m_envCache.constFind(key);
+ if (it != m_envCache.constEnd()) {
+ env = it.value();
+ return;
+ }
QbsProject *project = static_cast<QbsProject *>(target()->project());
if (project && project->qbsProject().isValid()) {
const qbs::ProductData product = findProduct(project->qbsProjectData(), uniqueProductName());
@@ -279,6 +286,7 @@ void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
}
}
}
+ m_envCache.insert(key, env);
}
QString QbsRunConfiguration::buildSystemTarget() const