diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-06 12:21:34 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-04-06 11:05:45 +0000 |
commit | 300afe8b8d3a919b2e4d7e5f30e9d4dfd341eb1d (patch) | |
tree | 5901080c7f1442d8ec5598ed34fe11212809acfa /src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp | |
parent | b9ae919cb75dbb029a29ef3a77694e097638ddfc (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.cpp | 8 |
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 |