From 8d67bc36a786444d9bf4322bf17694cecf106f01 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 29 Sep 2022 13:07:41 +0200 Subject: [PATCH] ToolChain: Cache validity Checking the validity of a toolchain can involve a call to a remote device. We cache the status now to speed up places that repeatedly check the validity like opening the Toolchain Settings Page Change-Id: I2b1d8aeba99fb9761d60d4710806bf4b767eaac9 Reviewed-by: hjk --- src/plugins/projectexplorer/toolchain.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 04d4bddc398..9c97e71ba31 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -70,6 +70,7 @@ public: ToolChain::MacrosCache m_predefinedMacrosCache; ToolChain::HeaderPathsCache m_headerPathsCache; + std::optional m_isValid; }; @@ -185,9 +186,10 @@ Abis ToolChain::supportedAbis() const bool ToolChain::isValid() const { - if (compilerCommand().isEmpty()) - return false; - return compilerCommand().isExecutableFile(); + if (!d->m_isValid.has_value()) + d->m_isValid = !compilerCommand().isEmpty() && compilerCommand().isExecutableFile(); + + return d->m_isValid.value_or(false); } QStringList ToolChain::includedFiles(const QStringList &flags, const QString &directory) const @@ -315,6 +317,8 @@ FilePath ToolChain::compilerCommand() const void ToolChain::setCompilerCommand(const FilePath &command) { + d->m_isValid.reset(); + if (command == d->m_compilerCommand) return; d->m_compilerCommand = command; @@ -379,6 +383,7 @@ bool ToolChain::fromMap(const QVariantMap &data) d->m_targetAbi = Abi::fromString(data.value(d->m_targetAbiKey).toString()); d->m_compilerCommand = FilePath::fromVariant(data.value(d->m_compilerCommandKey)); + d->m_isValid.reset(); return true; }