aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2023-11-08 09:22:37 +0300
committerIvan Komissarov <ABBAPOH@gmail.com>2023-11-08 13:11:48 +0000
commitf2e38c0c69abd97f7ff558feb0c8f145cdabb206 (patch)
treee560377568a80e13822f97b7d067420ac9058eb9
parentc68bf583aea9552c99d269a75cc5b8967958e65d (diff)
providers: cache qbs module evaluation
This is quite heavy operation and there is no need to do this on every call to provider. Change-Id: I1aa7f16d9f84fb9632cfb143d58ea8448b99e582 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/lib/corelib/loader/loaderutils.h1
-rw-r--r--src/lib/corelib/loader/moduleproviderloader.cpp6
-rw-r--r--src/lib/corelib/loader/moduleproviderloader.h2
3 files changed, 6 insertions, 3 deletions
diff --git a/src/lib/corelib/loader/loaderutils.h b/src/lib/corelib/loader/loaderutils.h
index e69451419..27b330519 100644
--- a/src/lib/corelib/loader/loaderutils.h
+++ b/src/lib/corelib/loader/loaderutils.h
@@ -174,6 +174,7 @@ public:
QVariantMap profileModuleProperties; // Tree-ified module properties from profile.
QVariantMap moduleProperties; // Tree-ified module properties from profile + overridden values.
std::optional<QVariantMap> providerConfig;
+ std::optional<QVariantMap> providerQbsModule;
QVariantMap defaultParameters; // In Export item.
QStringList searchPaths;
ResolvedProductPtr product;
diff --git a/src/lib/corelib/loader/moduleproviderloader.cpp b/src/lib/corelib/loader/moduleproviderloader.cpp
index 1d4af1896..ef6970ce1 100644
--- a/src/lib/corelib/loader/moduleproviderloader.cpp
+++ b/src/lib/corelib/loader/moduleproviderloader.cpp
@@ -303,8 +303,10 @@ QString ModuleProviderLoader::findModuleProviderFile(
return {};
}
-QVariantMap ModuleProviderLoader::evaluateQbsModule(const ProductContext &product) const
+QVariantMap ModuleProviderLoader::evaluateQbsModule(ProductContext &product) const
{
+ if (product.providerQbsModule)
+ return *product.providerQbsModule;
const QString properties[] = {
QStringLiteral("sysroot"),
QStringLiteral("toolchain"),
@@ -326,7 +328,7 @@ QVariantMap ModuleProviderLoader::evaluateQbsModule(const ProductContext &produc
result[property] = std::move(value);
}
- return result;
+ return *(product.providerQbsModule = result);
}
Item *ModuleProviderLoader::createProviderScope(
diff --git a/src/lib/corelib/loader/moduleproviderloader.h b/src/lib/corelib/loader/moduleproviderloader.h
index 5331bd0d0..a2410a0bb 100644
--- a/src/lib/corelib/loader/moduleproviderloader.h
+++ b/src/lib/corelib/loader/moduleproviderloader.h
@@ -92,7 +92,7 @@ private:
std::optional<std::vector<QualifiedId>> getModuleProviders(Item *item);
QString findModuleProviderFile(const QualifiedId &name, ModuleProviderLookup lookupType);
- QVariantMap evaluateQbsModule(const ProductContext &product) const;
+ QVariantMap evaluateQbsModule(ProductContext &product) const;
Item *createProviderScope(const ProductContext &product, const QVariantMap &qbsModule);
using EvaluationResult = std::pair<QStringList, bool /*isEager*/>;
EvaluationResult evaluateModuleProvider(