forked from qt-creator/qt-creator
ClangRefactoring: Ensure that database is written to log after indexing
Change-Id: Ic2473d9fe8dc9b41a7da728c9e1b5202524c1a79 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
|
||||
#include <filepathid.h>
|
||||
#include <progresscounter.h>
|
||||
#include <sqlitedatabase.h>
|
||||
#include <taskschedulerinterface.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
@@ -38,10 +39,6 @@
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
namespace Sqlite {
|
||||
class TransactionInterface;
|
||||
}
|
||||
|
||||
namespace ClangBackEnd {
|
||||
|
||||
class SymbolsCollectorInterface;
|
||||
@@ -53,9 +50,11 @@ public:
|
||||
using Task = SymbolIndexerTask::Callable;
|
||||
|
||||
SymbolIndexerTaskQueue(TaskSchedulerInterface<Task> &symbolIndexerTaskScheduler,
|
||||
ProgressCounter &progressCounter)
|
||||
: m_symbolIndexerScheduler(symbolIndexerTaskScheduler),
|
||||
m_progressCounter(progressCounter)
|
||||
ProgressCounter &progressCounter,
|
||||
Sqlite::DatabaseInterface &database)
|
||||
: m_symbolIndexerScheduler(symbolIndexerTaskScheduler)
|
||||
, m_progressCounter(progressCounter)
|
||||
, m_database(database)
|
||||
{}
|
||||
|
||||
void addOrUpdateTasks(std::vector<SymbolIndexerTask> &&tasks)
|
||||
@@ -94,12 +93,21 @@ public:
|
||||
|
||||
void processEntries()
|
||||
{
|
||||
uint taskCount = m_symbolIndexerScheduler.slotUsage().free;
|
||||
auto slotUsage = m_symbolIndexerScheduler.slotUsage();
|
||||
uint taskCount = slotUsage.free;
|
||||
|
||||
auto newEnd = std::prev(m_tasks.end(), std::min<int>(int(taskCount), int(m_tasks.size())));
|
||||
m_symbolIndexerScheduler.addTasks({std::make_move_iterator(newEnd),
|
||||
std::make_move_iterator(m_tasks.end())});
|
||||
m_tasks.erase(newEnd, m_tasks.end());
|
||||
|
||||
if (m_tasks.empty() && slotUsage.used == 0) {
|
||||
try {
|
||||
m_database.walCheckpointFull();
|
||||
} catch (Sqlite::Exception &exception) {
|
||||
exception.printWarning();
|
||||
}
|
||||
}
|
||||
}
|
||||
void syncTasks();
|
||||
|
||||
@@ -108,6 +116,7 @@ private:
|
||||
std::vector<SymbolIndexerTask> m_tasks;
|
||||
TaskSchedulerInterface<Task> &m_symbolIndexerScheduler;
|
||||
ProgressCounter &m_progressCounter;
|
||||
Sqlite::DatabaseInterface &m_database;
|
||||
};
|
||||
|
||||
} // namespace ClangBackEnd
|
||||
|
||||
@@ -105,6 +105,7 @@ public:
|
||||
m_projectPartsStorage,
|
||||
m_modifiedTimeChecker,
|
||||
environment)
|
||||
, m_indexerQueue(m_indexerScheduler, m_progressCounter, database)
|
||||
, m_indexerScheduler(m_collectorManger,
|
||||
m_indexerQueue,
|
||||
m_progressCounter,
|
||||
@@ -152,7 +153,7 @@ private:
|
||||
ModifiedTimeChecker<ClangBackEnd::SourceTimeStamps> m_modifiedTimeChecker{getModifiedTime,
|
||||
m_filePathCache};
|
||||
SymbolIndexer m_indexer;
|
||||
SymbolIndexerTaskQueue m_indexerQueue{m_indexerScheduler, m_progressCounter};
|
||||
SymbolIndexerTaskQueue m_indexerQueue;
|
||||
SymbolIndexerTaskScheduler m_indexerScheduler;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user