[Libreoffice-commits] online.git: loolwsd/Common.hpp loolwsd/LOOLWebSocket.hpp loolwsd/README.vars
Pranav Kant
pranavk at collabora.co.uk
Mon Nov 21 10:49:58 UTC 2016
loolwsd/Common.hpp | 2 ++
loolwsd/LOOLWebSocket.hpp | 28 ++++++++++++++++++++++++++++
loolwsd/README.vars | 7 +++++++
3 files changed, 37 insertions(+)
New commits:
commit 3c2337cfc5ea2f4f11ea3b8bc8d93051fdf55705
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Mon Nov 21 15:36:05 2016 +0530
loolwsd: Random latency simulator - delay, jitter in websockets
Only enabled in debug build. Default values for base delay is
10ms and jitter 5ms.
Override using LOOL_WS_DELAY, LOOL_WS_JITTER env. variables
Change-Id: I50502613075d6f73365623b93eb17748fe96fcc3
diff --git a/loolwsd/Common.hpp b/loolwsd/Common.hpp
index 814ab59..0223be8 100644
--- a/loolwsd/Common.hpp
+++ b/loolwsd/Common.hpp
@@ -22,6 +22,8 @@ constexpr long CHILD_TIMEOUT_MS = COMMAND_TIMEOUT_MS;
constexpr int CHILD_REBALANCE_INTERVAL_MS = CHILD_TIMEOUT_MS / 10;
constexpr int POLL_TIMEOUT_MS = COMMAND_TIMEOUT_MS / 10;
constexpr int WS_SEND_TIMEOUT_MS = 1000;
+constexpr int WS_DELAY_MS = 10;
+constexpr int WS_JITTER_MS = 5;
/// Pipe and Socket read buffer size.
/// Should be large enough for ethernet packets
diff --git a/loolwsd/LOOLWebSocket.hpp b/loolwsd/LOOLWebSocket.hpp
index b4956ce..d78f625 100644
--- a/loolwsd/LOOLWebSocket.hpp
+++ b/loolwsd/LOOLWebSocket.hpp
@@ -10,7 +10,9 @@
#ifndef INCLUDED_LOOLWEBSOCKET_HPP
#define INCLUDED_LOOLWEBSOCKET_HPP
+#include <cstdlib>
#include <mutex>
+#include <thread>
#include <Poco/Net/WebSocket.h>
@@ -29,6 +31,24 @@ class LOOLWebSocket : public Poco::Net::WebSocket
private:
std::mutex _mutex;
+#ifdef ENABLE_DEBUG
+ std::chrono::milliseconds getWebSocketDelay()
+ {
+ unsigned long baseDelay = WS_DELAY_MS;
+ unsigned long jitter = WS_JITTER_MS;
+ if (std::getenv("LOOL_WS_DELAY"))
+ {
+ baseDelay = std::stoul(std::getenv("LOOL_WS_DELAY"));
+ }
+ if (std::getenv("LOOL_WS_JITTER"))
+ {
+ jitter = std::stoul(std::getenv("LOOL_WS_JITTER"));
+ }
+
+ return std::chrono::milliseconds(baseDelay + (std::rand() % jitter));
+ }
+#endif
+
public:
LOOLWebSocket(const Socket& socket) :
Poco::Net::WebSocket(socket)
@@ -61,6 +81,10 @@ public:
/// Should we also factor out the handling of non-final and continuation frames into this?
int receiveFrame(char* buffer, const int length, int& flags)
{
+#ifdef ENABLE_DEBUG
+ // Delay receiving the frame
+ std::this_thread::sleep_for(getWebSocketDelay());
+#endif
// Timeout given is in microseconds.
static const Poco::Timespan waitTime(POLL_TIMEOUT_MS * 1000);
@@ -87,6 +111,10 @@ public:
/// Wrapper for Poco::Net::WebSocket::sendFrame() that handles large frames.
int sendFrame(const char* buffer, const int length, const int flags = FRAME_TEXT)
{
+#ifdef ENABLE_DEBUG
+ // Delay sending the frame
+ std::this_thread::sleep_for(getWebSocketDelay());
+#endif
std::unique_lock<std::mutex> lock(_mutex);
// Size after which messages will be sent preceded with
diff --git a/loolwsd/README.vars b/loolwsd/README.vars
index 305b9ea..b55672a 100644
--- a/loolwsd/README.vars
+++ b/loolwsd/README.vars
@@ -24,3 +24,10 @@ SLEEPKITFORDEBUGGER <seconds to sleep>
sleep <n> seconds in each kit process instance after forking,
to allow a 'sudo gdb' session to attach and debug that
process.
+
+LOOL_WS_DELAY <base delay in milliseconds in websocket communication>
+ sleep atleast <n> seconds when sending and receiving websocket frames
+
+LOOL_WS_JITTER <jitter in milliseconds for websocket communication>
+ Maximum Jitter in millseconds which is added to delay in
+ websocket communication.
More information about the Libreoffice-commits
mailing list