diff options
author | Marco Bubke <marco.bubke@qt.io> | 2019-08-20 14:45:01 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2019-08-27 11:53:32 +0000 |
commit | c174eb378a7957b8b123e2054cce0e166842a8aa (patch) | |
tree | f3ff023de39ce7d22cf8542d9923ee5c6ce7d614 /src/plugins/clangpchmanager/projectupdater.h | |
parent | 04f8ff6404fdea1f4efe4fb7a31dff9d1049b429 (diff) |
Clang: Reduce database accesses
If we prefetch data from the database to the caches we reduce the database
transaction calls which are quite expensive.
Change-Id: I617a0d886807402e0a94291a913a77f989970b55
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/plugins/clangpchmanager/projectupdater.h')
-rw-r--r-- | src/plugins/clangpchmanager/projectupdater.h | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/plugins/clangpchmanager/projectupdater.h b/src/plugins/clangpchmanager/projectupdater.h index c3f793dc2f..16d662004f 100644 --- a/src/plugins/clangpchmanager/projectupdater.h +++ b/src/plugins/clangpchmanager/projectupdater.h @@ -34,6 +34,8 @@ #include <includesearchpath.h> #include <projectpartcontainer.h> #include <projectpartsstorageinterface.h> +#include <projectpartstoragestructs.h> +#include <stringcache.h> #include <projectexplorer/headerpath.h> @@ -66,6 +68,14 @@ class ClangIndexingProjectSettings; class CLANGPCHMANAGER_EXPORT ProjectUpdater { + using StringCache = ClangBackEnd::StringCache<Utils::PathString, + Utils::SmallStringView, + ClangBackEnd::ProjectPartId, + ClangBackEnd::NonLockingMutex, + decltype(&Utils::reverseCompare), + Utils::reverseCompare, + ClangBackEnd::Internal::ProjectPartNameId>; + public: struct SystemAndProjectIncludeSearchPaths { @@ -77,11 +87,13 @@ public: ClangBackEnd::FilePathCachingInterface &filePathCache, ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage, ClangIndexingSettingsManager &settingsManager) - : m_server(server) - , m_filePathCache(filePathCache) + : m_filePathCache(filePathCache) + , m_server(server) , m_projectPartsStorage(projectPartsStorage) , m_settingsManager(settingsManager) - {} + { + m_projectPartIdCache.populate(m_projectPartsStorage.fetchAllProjectPartNamesAndIds()); + } void updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts, Utils::SmallStringVector &&toolChainArguments); @@ -104,8 +116,8 @@ public: void addToHeaderAndSources(HeaderAndSources &headerAndSources, const CppTools::ProjectFile &projectFile) const; static QStringList toolChainArguments(CppTools::ProjectPart *projectPart); - ClangBackEnd::CompilerMacros createCompilerMacros(const ProjectExplorer::Macros &projectMacros, - Utils::NameValueItems &&settingsMacros) const; + static ClangBackEnd::CompilerMacros createCompilerMacros(const ProjectExplorer::Macros &projectMacros, + Utils::NameValueItems &&settingsMacros); static SystemAndProjectIncludeSearchPaths createIncludeSearchPaths( const CppTools::ProjectPart &projectPart); static ClangBackEnd::FilePaths createExcludedPaths( @@ -115,16 +127,19 @@ public: ClangBackEnd::ProjectPartIds toProjectPartIds(const QStringList &projectPartNames) const; -private: void addProjectFilesToFilePathCache(const std::vector<CppTools::ProjectPart *> &projectParts); + void fetchProjectPartIds(const std::vector<CppTools::ProjectPart *> &projectParts); + +protected: + ClangBackEnd::FilePathCachingInterface &m_filePathCache; private: ClangBackEnd::GeneratedFiles m_generatedFiles; ClangBackEnd::FilePaths m_excludedPaths; ClangBackEnd::ProjectManagementServerInterface &m_server; - ClangBackEnd::FilePathCachingInterface &m_filePathCache; ClangBackEnd::ProjectPartsStorageInterface &m_projectPartsStorage; ClangIndexingSettingsManager &m_settingsManager; + mutable StringCache m_projectPartIdCache; }; } // namespace ClangPchManager |