aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangpchmanager/projectupdater.h
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-08-20 14:45:01 +0200
committerMarco Bubke <marco.bubke@qt.io>2019-08-27 11:53:32 +0000
commitc174eb378a7957b8b123e2054cce0e166842a8aa (patch)
treef3ff023de39ce7d22cf8542d9923ee5c6ce7d614 /src/plugins/clangpchmanager/projectupdater.h
parent04f8ff6404fdea1f4efe4fb7a31dff9d1049b429 (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.h29
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