Author: sammccall Date: Wed Oct 24 08:18:40 2018 New Revision: 345150 URL: http://llvm.org/viewvc/llvm-project?rev=345150&view=rev Log: [clangd] When replying, log the method name and latency.
Summary: This information is strictly available in the log (you can find the original call) but it makes the log easier to follow in practice. Reviewers: kadircet Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, cfe-commits Differential Revision: https://reviews.llvm.org/D53647 Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp clang-tools-extra/trunk/clangd/ClangdLSPServer.h Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp?rev=345150&r1=345149&r2=345150&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp (original) +++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp Wed Oct 24 08:18:40 2018 @@ -173,6 +173,7 @@ private: // - if there were multiple replies, only the first is sent class ReplyOnce { std::atomic<bool> Replied = {false}; + std::chrono::steady_clock::time_point Start; json::Value ID; std::string Method; ClangdLSPServer *Server; // Null when moved-from. @@ -181,13 +182,14 @@ private: public: ReplyOnce(const json::Value &ID, StringRef Method, ClangdLSPServer *Server, json::Object *TraceArgs) - : ID(ID), Method(Method), Server(Server), TraceArgs(TraceArgs) { + : Start(std::chrono::steady_clock::now()), ID(ID), Method(Method), + Server(Server), TraceArgs(TraceArgs) { assert(Server); } ReplyOnce(ReplyOnce &&Other) - : Replied(Other.Replied.load()), ID(std::move(Other.ID)), - Method(std::move(Other.Method)), Server(Other.Server), - TraceArgs(Other.TraceArgs) { + : Replied(Other.Replied.load()), Start(Other.Start), + ID(std::move(Other.ID)), Method(std::move(Other.Method)), + Server(Other.Server), TraceArgs(Other.TraceArgs) { Other.Server = nullptr; } ReplyOnce& operator=(ReplyOnce&&) = delete; @@ -210,16 +212,21 @@ private: assert(false && "must reply to each call only once!"); return; } - if (TraceArgs) { - if (Reply) + auto Duration = std::chrono::steady_clock::now() - Start; + if (Reply) { + log("--> reply:{0}({1}) {2:ms}", Method, ID, Duration); + if (TraceArgs) (*TraceArgs)["Reply"] = *Reply; - else { - auto Err = Reply.takeError(); + std::lock_guard<std::mutex> Lock(Server->TranspWriter); + Server->Transp.reply(std::move(ID), std::move(Reply)); + } else { + Error Err = Reply.takeError(); + log("--> reply:{0}({1}) {2:ms}, error: {3}", Method, ID, Duration, Err); + if (TraceArgs) (*TraceArgs)["Error"] = to_string(Err); - Reply = std::move(Err); - } + std::lock_guard<std::mutex> Lock(Server->TranspWriter); + Server->Transp.reply(std::move(ID), std::move(Err)); } - Server->reply(ID, std::move(Reply)); } }; @@ -287,19 +294,6 @@ void ClangdLSPServer::notify(StringRef M Transp.notify(Method, std::move(Params)); } -void ClangdLSPServer::reply(json::Value ID, Expected<json::Value> Result) { - if (Result) { - log("--> reply({0})", ID); - std::lock_guard<std::mutex> Lock(TranspWriter); - Transp.reply(std::move(ID), std::move(Result)); - } else { - Error Err = Result.takeError(); - log("--> reply({0}) error: {1}", ID, Err); - std::lock_guard<std::mutex> Lock(TranspWriter); - Transp.reply(std::move(ID), std::move(Err)); - } -} - void ClangdLSPServer::onInitialize(const InitializeParams &Params, Callback<json::Value> Reply) { if (Params.rootUri && *Params.rootUri) Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdLSPServer.h?rev=345150&r1=345149&r2=345150&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdLSPServer.h (original) +++ clang-tools-extra/trunk/clangd/ClangdLSPServer.h Wed Oct 24 08:18:40 2018 @@ -153,7 +153,6 @@ private: std::mutex TranspWriter; void call(StringRef Method, llvm::json::Value Params); void notify(StringRef Method, llvm::json::Value Params); - void reply(llvm::json::Value ID, llvm::Expected<llvm::json::Value> Result); RealFileSystemProvider FSProvider; /// Options used for code completion _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits