From d40fa5b353251c2277353a49a74fe91c9a6592d2 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 19 Oct 2021 12:07:54 +0200 Subject: [PATCH] LSP: Allow users to see timing data It's often interesting to know how long it takes for a reply to a request to come in. While that data is in principle already available from the inspector, a dedicated logging category gives much quicker results. Change-Id: Idd43c6e69422140863a7adaa33a7bc17dd8e6492 Reviewed-by: David Schulz --- src/libs/languageserverprotocol/jsonrpcmessages.cpp | 7 +++++++ src/libs/languageserverprotocol/jsonrpcmessages.h | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.cpp b/src/libs/languageserverprotocol/jsonrpcmessages.cpp index 64045f1e3af..2b71d34a754 100644 --- a/src/libs/languageserverprotocol/jsonrpcmessages.cpp +++ b/src/libs/languageserverprotocol/jsonrpcmessages.cpp @@ -37,6 +37,7 @@ #include namespace LanguageServerProtocol { +Q_LOGGING_CATEGORY(timingLog, "qtc.languageserverprotocol.timing", QtWarningMsg) constexpr const char CancelRequest::methodName[]; @@ -148,4 +149,10 @@ CancelRequest::CancelRequest(const CancelParameter ¶ms) : Notification(methodName, params) { } +void logElapsedTime(const QString &method, const QElapsedTimer &t) +{ + qCDebug(timingLog) << "received server reply to" << method + << "after" << t.elapsed() << "ms"; +} + } // namespace LanguageServerProtocol diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h index bb20ca8a3cd..010bc770f8a 100644 --- a/src/libs/languageserverprotocol/jsonrpcmessages.h +++ b/src/libs/languageserverprotocol/jsonrpcmessages.h @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -294,6 +295,8 @@ public: { return JsonRpcMessage::isValid(errorMessage) && id().isValid(); } }; +void LANGUAGESERVERPROTOCOL_EXPORT logElapsedTime(const QString &method, const QElapsedTimer &t); + template class Request : public Notification { @@ -316,9 +319,13 @@ public: Utils::optional responseHandler() const final { - auto callback = [callback = m_callBack](const QByteArray &content, QTextCodec *codec) { + QElapsedTimer timer; + timer.start(); + auto callback = [callback = m_callBack, method = this->method(), t = std::move(timer)] + (const QByteArray &content, QTextCodec *codec) { if (!callback) return; + logElapsedTime(method, t); QString parseError; const QJsonObject &object = JsonRpcMessageHandler::toJsonObject(content, codec,