summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/JSONRPCDispatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/JSONRPCDispatcher.cpp')
-rw-r--r--clang-tools-extra/clangd/JSONRPCDispatcher.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp
index e9a203d77f2..c67221a23f4 100644
--- a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp
+++ b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp
@@ -45,7 +45,7 @@ void JSONOutput::writeMessage(const json::Expr &Message) {
}
void JSONOutput::log(const Context &Ctx, const Twine &Message) {
- trace::log(Message);
+ trace::log(Ctx, Message);
std::lock_guard<std::mutex> Guard(StreamMutex);
Logs << Message << '\n';
Logs.flush();
@@ -137,16 +137,19 @@ bool JSONRPCDispatcher::call(const json::Expr &Message, JSONOutput &Out) const {
auto I = Handlers.find(*Method);
auto &Handler = I != Handlers.end() ? I->second : UnknownHandler;
- auto Tracer = llvm::make_unique<trace::Span>(*Method);
+ // Create a Context that contains request information.
+ auto Ctx = Context::empty().derive(RequestOut, &Out);
+ if (ID)
+ Ctx = std::move(Ctx).derive(RequestID, *ID);
+
+ // Create a tracing Span covering the whole request lifetime.
+ auto Tracer = llvm::make_unique<trace::Span>(Ctx, *Method);
if (ID)
SPAN_ATTACH(*Tracer, "ID", *ID);
SPAN_ATTACH(*Tracer, "Params", Params);
- auto Ctx = Context::empty()
- .derive(RequestOut, &Out)
- .derive(RequestSpan, std::move(Tracer));
- if (ID)
- Ctx = std::move(Ctx).derive(RequestID, *ID);
+ // Update Ctx to include Tracer.
+ Ctx = std::move(Ctx).derive(RequestSpan, std::move(Tracer));
Handler(std::move(Ctx), std::move(Params));
return true;
OpenPOWER on IntegriCloud