diff options
author | Marco Bubke <marco.bubke@qt.io> | 2018-08-28 12:08:37 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2018-09-03 12:13:10 +0000 |
commit | a86867eb8a37c66f6eda36928208a82bb152b038 (patch) | |
tree | a1e1f5fe9de1cce0f9e4933cce0ff7b313e71ba5 /src/tools/clangrefactoringbackend/source/symbolindexing.h | |
parent | 86cd29b13c5489e67dcbfa223ac3519a9c4c520c (diff) | |
download | qt-creator-a86867eb8a37c66f6eda36928208a82bb152b038.tar.gz |
Clang: Introduce parallel indexing
Change-Id: I522cb18e6d24b7dbed5d5dfa3a732e5b3b5113bb
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/tools/clangrefactoringbackend/source/symbolindexing.h')
-rw-r--r-- | src/tools/clangrefactoringbackend/source/symbolindexing.h | 29 |
1 files changed, 26 insertions, 3 deletions
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 <refactoringdatabaseinitializer.h> @@ -41,6 +44,8 @@ #include <QFileSystemWatcher> +#include <thread> + 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<QFileSystemWatcher, QTimer> m_sourceWatcher{m_filePathCache}; FileStatusCache m_fileStatusCache{m_filePathCache}; - SymbolIndexer m_indexer{m_collector, + SymbolsCollectorManager<SymbolsCollector> m_collectorManger; + SymbolIndexerTaskScheduler m_indexerScheduler; + SymbolIndexerTaskQueue m_indexerQueue{m_indexerScheduler}; + SymbolIndexer m_indexer{m_indexerQueue, m_symbolStorage, m_sourceWatcher, m_filePathCache, |