loolwsd/ChildProcessSession.cpp | 5 +++-- loolwsd/ChildProcessSession.hpp | 31 ------------------------------- loolwsd/LOOLSession.cpp | 3 ++- loolwsd/LOOLSession.hpp | 18 ++++++++++++++++++ loolwsd/MasterProcessSession.cpp | 2 ++ 5 files changed, 25 insertions(+), 34 deletions(-)
New commits: commit b6d2edb0e30770fe2b722109af9e5cbda5c9b80d Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Apr 9 17:47:23 2016 -0400 loolwsd: moved activity tracking into LOOLSession Change-Id: I87d5afc43bea29ede2ad6e2871c594c4746bc3d5 Reviewed-on: https://gerrit.libreoffice.org/23948 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/ChildProcessSession.cpp b/loolwsd/ChildProcessSession.cpp index ec7dc0f..62d64ab 100644 --- a/loolwsd/ChildProcessSession.cpp +++ b/loolwsd/ChildProcessSession.cpp @@ -308,7 +308,7 @@ bool ChildProcessSession::_handleInput(const char *buffer, int length) { if (isInactive() && _loKitDocument != nullptr) { - Log::debug("Handling message after inactivity of " + std::to_string(_stats.getInactivityMS()) + "ms."); + Log::debug("Handling message after inactivity of " + std::to_string(getInactivityMS()) + "ms."); // Client is getting active again. // Send invalidation and other sync-up messages. @@ -333,7 +333,8 @@ bool ChildProcessSession::_handleInput(const char *buffer, int length) //TODO: Sync cursor. } - _stats.updateLastActivityTime(); + updateLastActivityTime(); + const std::string firstLine = getFirstLine(buffer, length); StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); diff --git a/loolwsd/ChildProcessSession.hpp b/loolwsd/ChildProcessSession.hpp index ab3347c..0f14842 100644 --- a/loolwsd/ChildProcessSession.hpp +++ b/loolwsd/ChildProcessSession.hpp @@ -30,30 +30,6 @@ class CallbackWorker; class ChildProcessSession final : public LOOLSession { public: - class Statistics - { - public: - Statistics() : - _lastActivityTime(std::chrono::steady_clock::now()) - { - } - - void updateLastActivityTime() - { - _lastActivityTime = std::chrono::steady_clock::now(); - } - - double getInactivityMS() const - { - const auto duration = (std::chrono::steady_clock::now() - _lastActivityTime); - return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(); - } - - private: - std::chrono::steady_clock::time_point _lastActivityTime; - }; - -public: /// Create a new ChildProcessSession /// ws The socket between master and kit (jailed). /// loKit The LOKit instance. @@ -88,9 +64,6 @@ public: std::unique_lock<std::recursive_mutex> getLock() { return std::unique_lock<std::recursive_mutex>(Mutex); } - const Statistics& getStatistics() const { return _stats; } - bool isInactive() const { return _stats.getInactivityMS() >= InactivityThresholdMS; } - protected: virtual bool loadDocument(const char *buffer, int length, Poco::StringTokenizer& tokens) override; @@ -131,8 +104,6 @@ private: int _clientPart; std::function<LibreOfficeKitDocument*(const std::string&, const std::string&, const std::string&, bool)> _onLoad; std::function<void(const std::string&)> _onUnload; - /// Statistics and activity tracking. - Statistics _stats; std::unique_ptr<CallbackWorker> _callbackWorker; Poco::Thread _callbackThread; @@ -141,8 +112,6 @@ private: /// Synchronize _loKitDocument acess. /// This should be owned by Document. static std::recursive_mutex Mutex; - - static constexpr auto InactivityThresholdMS = 120 * 1000; }; #endif diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp index a80b65b..1fd268c 100644 --- a/loolwsd/LOOLSession.cpp +++ b/loolwsd/LOOLSession.cpp @@ -55,7 +55,8 @@ LOOLSession::LOOLSession(const std::string& id, const Kind kind, _isDocPasswordProvided(false), _isDocLoaded(false), _isDocPasswordProtected(false), - _disconnected(false) + _disconnected(false), + _lastActivityTime(std::chrono::steady_clock::now()) { // Only a post request can have a null ws. if (_kind != Kind::ToClient) diff --git a/loolwsd/LOOLSession.hpp b/loolwsd/LOOLSession.hpp index d5fd76b..2fc5429 100644 --- a/loolwsd/LOOLSession.hpp +++ b/loolwsd/LOOLSession.hpp @@ -54,6 +54,15 @@ public: /// Called to handle disconnection command from socket. virtual bool handleDisconnect(Poco::StringTokenizer& tokens); + bool isInactive() const { return getInactivityMS() >= InactivityThresholdMS; } + + /// Returns the inactivity time of the client in milliseconds. + double getInactivityMS() const + { + const auto duration = (std::chrono::steady_clock::now() - _lastActivityTime); + return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(); + } + protected: LOOLSession(const std::string& id, const Kind kind, std::shared_ptr<Poco::Net::WebSocket> ws); @@ -78,6 +87,11 @@ protected: virtual void sendFontRendering(const char *buffer, int length, Poco::StringTokenizer& tokens) = 0; + void updateLastActivityTime() + { + _lastActivityTime = std::chrono::steady_clock::now(); + } + // Fields common to sessions in master and jailed processes: // Our kind signifies to what we are connected to. @@ -123,7 +137,11 @@ private: /// True if we have been disconnected. bool _disconnected; + std::chrono::steady_clock::time_point _lastActivityTime; + std::mutex _mutex; + + static constexpr auto InactivityThresholdMS = 120 * 1000; }; template<typename charT, typename traits> diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp index b7cab54..4fc5ecf 100644 --- a/loolwsd/MasterProcessSession.cpp +++ b/loolwsd/MasterProcessSession.cpp @@ -103,6 +103,8 @@ bool MasterProcessSession::handleDisconnect(Poco::StringTokenizer& tokens) bool MasterProcessSession::_handleInput(const char *buffer, int length) { + updateLastActivityTime(); + const std::string firstLine = getFirstLine(buffer, length); StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); Log::trace(getName() + ": handling [" + firstLine + "]."); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits