summaryrefslogtreecommitdiff
path: root/src/tools/clangrefactoringbackend/source/symbolindexing.h
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2018-08-28 12:08:37 +0200
committerMarco Bubke <marco.bubke@qt.io>2018-09-03 12:13:10 +0000
commita86867eb8a37c66f6eda36928208a82bb152b038 (patch)
treea1e1f5fe9de1cce0f9e4933cce0ff7b313e71ba5 /src/tools/clangrefactoringbackend/source/symbolindexing.h
parent86cd29b13c5489e67dcbfa223ac3519a9c4c520c (diff)
downloadqt-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.h29
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,