9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_BACKGROUND_H
10 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_BACKGROUND_H
22 #include "clang/Tooling/CompilationDatabase.h"
23 #include "llvm/ADT/StringMap.h"
24 #include "llvm/Support/Threading.h"
26 #include <condition_variable>
50 virtual std::unique_ptr<IndexFileIn>
51 loadShard(llvm::StringRef ShardIdentifier)
const = 0;
63 std::function<llvm::Optional<ProjectInfo>(
PathRef)> GetProjectInfo);
73 std::function<void()>
Run;
74 llvm::ThreadPriority
ThreadPri = llvm::ThreadPriority::Background;
90 : OnProgress(OnProgress) {}
94 void append(std::vector<Task>);
98 void boost(llvm::StringRef
Tag,
unsigned NewPriority);
102 void work(std::function<
void()> OnIdle =
nullptr);
114 void notifyProgress()
const;
118 std::condition_variable CV;
119 bool ShouldStop =
false;
120 std::vector<Task> Queue;
121 llvm::StringMap<unsigned> Boosts;
122 std::function<void(Stats)> OnProgress;
140 size_t ThreadPoolSize = 4,
148 void enqueue(
const std::vector<std::string> &ChangedFiles) {
149 Queue.
push(changedFilesTask(ChangedFiles));
171 struct ShardVersion {
173 bool HadErrors =
false;
179 void update(llvm::StringRef
MainFile, IndexFileIn Index,
180 const llvm::StringMap<ShardVersion> &ShardVersionsSnapshot,
184 const ThreadsafeFS &TFS;
185 const GlobalCompilationDatabase &CDB;
186 Context BackgroundContext;
187 std::function<Context(
PathRef)> ContextProvider;
191 FileSymbols IndexedSymbols;
192 BackgroundIndexRebuilder Rebuilder;
193 llvm::StringMap<ShardVersion> ShardVersions;
194 std::mutex ShardVersionsMu;
198 std::vector<std::string> loadProject(std::vector<std::string> MainFiles);
200 BackgroundQueue::Task
201 changedFilesTask(
const std::vector<std::string> &ChangedFiles);
202 BackgroundQueue::Task indexFileTask(std::string
Path);
210 BackgroundQueue Queue;
211 AsyncTaskRunner ThreadPool;
212 GlobalCompilationDatabase::CommandChanged::Subscription CommandsChanged;