diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2023-11-08 09:22:37 +0300 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2023-11-08 13:11:48 +0000 |
commit | f2e38c0c69abd97f7ff558feb0c8f145cdabb206 (patch) | |
tree | e560377568a80e13822f97b7d067420ac9058eb9 /src/lib | |
parent | c68bf583aea9552c99d269a75cc5b8967958e65d (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>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/corelib/loader/loaderutils.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/loader/moduleproviderloader.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/loader/moduleproviderloader.h | 2 |
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( |