[PATCH] D94603: [clangd] Allow CDBs to have background work to block on.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 13 07:50:55 PST 2021
sammccall created this revision.
sammccall added a reviewer: kadircet.
Herald added subscribers: usaxena95, arphaman.
sammccall requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang.
In preparation for moving DirectoryBasedCompilationDatabase broadcasting off
the main thread.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D94603
Files:
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/ClangdServer.h
clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
clang-tools-extra/clangd/GlobalCompilationDatabase.h
Index: clang-tools-extra/clangd/GlobalCompilationDatabase.h
===================================================================
--- clang-tools-extra/clangd/GlobalCompilationDatabase.h
+++ clang-tools-extra/clangd/GlobalCompilationDatabase.h
@@ -51,6 +51,10 @@
/// Clangd should treat the results as unreliable.
virtual tooling::CompileCommand getFallbackCommand(PathRef File) const;
+ /// If the CDB does any asynchronous work, wait for it to complete.
+ /// For use in tests.
+ virtual bool blockUntilIdle(Deadline D) const { return true; }
+
using CommandChanged = Event<std::vector<std::string>>;
/// The callback is notified when files may have new compile commands.
/// The argument is a list of full file paths.
@@ -75,6 +79,8 @@
tooling::CompileCommand getFallbackCommand(PathRef File) const override;
+ bool blockUntilIdle(Deadline D) const override;
+
private:
const GlobalCompilationDatabase *Base;
std::unique_ptr<GlobalCompilationDatabase> BaseOwner;
Index: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
===================================================================
--- clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
+++ clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
@@ -635,5 +635,11 @@
return Base->getFallbackCommand(File);
}
+bool DelegatingCDB::blockUntilIdle(Deadline D) const {
+ if (!Base)
+ return true;
+ return Base->blockUntilIdle(D);
+}
+
} // namespace clangd
} // namespace clang
Index: clang-tools-extra/clangd/ClangdServer.h
===================================================================
--- clang-tools-extra/clangd/ClangdServer.h
+++ clang-tools-extra/clangd/ClangdServer.h
@@ -362,6 +362,7 @@
Context createProcessingContext(PathRef) const;
config::Provider *ConfigProvider = nullptr;
+ const GlobalCompilationDatabase &CDB;
const ThreadsafeFS &TFS;
Callbacks *ServerCallbacks = nullptr;
mutable std::mutex ConfigDiagnosticsMu;
Index: clang-tools-extra/clangd/ClangdServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdServer.cpp
+++ clang-tools-extra/clangd/ClangdServer.cpp
@@ -139,7 +139,8 @@
ClangdServer::ClangdServer(const GlobalCompilationDatabase &CDB,
const ThreadsafeFS &TFS, const Options &Opts,
Callbacks *Callbacks)
- : ConfigProvider(Opts.ConfigProvider), TFS(TFS), ServerCallbacks(Callbacks),
+ : ConfigProvider(Opts.ConfigProvider), CDB(CDB), TFS(TFS),
+ ServerCallbacks(Callbacks),
DynamicIdx(Opts.BuildDynamicSymbolIndex
? new FileIndex(Opts.HeavyweightDynamicSymbolIndex,
Opts.CollectMainFileRefs)
@@ -873,6 +874,7 @@
LLVM_NODISCARD bool
ClangdServer::blockUntilIdleForTest(llvm::Optional<double> TimeoutSeconds) {
return WorkScheduler.blockUntilIdle(timeoutSeconds(TimeoutSeconds)) &&
+ CDB.blockUntilIdle(timeoutSeconds(TimeoutSeconds)) &&
(!BackgroundIdx ||
BackgroundIdx->blockUntilIdleForTest(TimeoutSeconds));
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94603.316398.patch
Type: text/x-patch
Size: 3104 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210113/0eae7557/attachment.bin>
More information about the cfe-commits
mailing list