From a86867eb8a37c66f6eda36928208a82bb152b038 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 28 Aug 2018 12:08:37 +0200 Subject: Clang: Introduce parallel indexing Change-Id: I522cb18e6d24b7dbed5d5dfa3a732e5b3b5113bb Reviewed-by: Ivan Donchevskii --- .../source/symbolindexing.h | 29 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/tools/clangrefactoringbackend/source/symbolindexing.h') diff --git a/src/tools/clangrefactoringbackend/source/symbolindexing.h b/src/tools/clangrefactoringbackend/source/symbolindexing.h index 96f6ecb1e5..07188690c7 100644 --- a/src/tools/clangrefactoringbackend/source/symbolindexing.h +++ b/src/tools/clangrefactoringbackend/source/symbolindexing.h @@ -30,6 +30,9 @@ #include "storagesqlitestatementfactory.h" #include "symbolindexer.h" #include "symbolscollector.h" +#include "symbolscollectormanager.h" +#include "symbolindexertaskqueue.h" +#include "symbolindexertaskscheduler.h" #include "symbolstorage.h" #include @@ -41,6 +44,8 @@ #include +#include + namespace ClangBackEnd { class SymbolIndexing final : public SymbolIndexingInterface @@ -52,8 +57,15 @@ public: SymbolIndexing(Sqlite::Database &database, FilePathCachingInterface &filePathCache) : m_filePathCache(filePathCache), - m_statementFactory(database) + m_statementFactory(database), + m_collectorManger(database), + m_indexerScheduler(m_collectorManger, m_symbolStorage, database, m_indexerQueue, std::thread::hardware_concurrency()) + { + } + + ~SymbolIndexing() { + syncTasks(); } SymbolIndexer &indexer() @@ -61,17 +73,28 @@ public: return m_indexer; } + void syncTasks() + { + m_indexerScheduler.disable(); + while (!m_indexerScheduler.futures().empty()) { + m_indexerScheduler.syncTasks(); + m_indexerScheduler.freeSlots(); + } + } + void updateProjectParts(V2::ProjectPartContainers &&projectParts, const V2::FileContainers &generatedFiles) override; private: FilePathCachingInterface &m_filePathCache; - SymbolsCollector m_collector{m_filePathCache}; StatementFactory m_statementFactory; Storage m_symbolStorage{m_statementFactory}; ClangPathWatcher m_sourceWatcher{m_filePathCache}; FileStatusCache m_fileStatusCache{m_filePathCache}; - SymbolIndexer m_indexer{m_collector, + SymbolsCollectorManager m_collectorManger; + SymbolIndexerTaskScheduler m_indexerScheduler; + SymbolIndexerTaskQueue m_indexerQueue{m_indexerScheduler}; + SymbolIndexer m_indexer{m_indexerQueue, m_symbolStorage, m_sourceWatcher, m_filePathCache, -- cgit v1.2.1