From 954ad21da2092a257df60e42c9b1774fed40ac66 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Thu, 27 Feb 2020 12:43:05 +0100 Subject: [PATCH] Provide dummy output for dummy client connections The CConnection base class wants to be able to write things these days, so we need to provide it a place to do so. --- tests/perf/decperf.cxx | 49 +++++++++++++++++++++++++++++++++++++++++- tests/perf/encperf.cxx | 7 +++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/tests/perf/decperf.cxx b/tests/perf/decperf.cxx index df5214f2..a6a50899 100644 --- a/tests/perf/decperf.cxx +++ b/tests/perf/decperf.cxx @@ -31,9 +31,11 @@ #include #include +#include #include #include +#include #include #include @@ -42,6 +44,20 @@ // FIXME: Files are always in this format static const rfb::PixelFormat filePF(32, 24, false, true, 255, 255, 255, 0, 8, 16); +class DummyOutStream : public rdr::OutStream { +public: + DummyOutStream(); + + virtual size_t length(); + virtual void flush(); + +private: + virtual size_t overrun(size_t itemSize, size_t nItems); + + int offset; + rdr::U8 buf[131072]; +}; + class CConn : public rfb::CConnection { public: CConn(const char *filename); @@ -61,24 +77,55 @@ public: protected: rdr::FileInStream *in; + DummyOutStream *out; }; +DummyOutStream::DummyOutStream() +{ + offset = 0; + ptr = buf; + end = buf + sizeof(buf); +} + +size_t DummyOutStream::length() +{ + flush(); + return offset; +} + +void DummyOutStream::flush() +{ + offset += ptr - buf; + ptr = buf; +} + +size_t DummyOutStream::overrun(size_t itemSize, size_t nItems) +{ + flush(); + if (itemSize * nItems > (size_t)(end - ptr)) + nItems = (end - ptr) / itemSize; + return nItems; +} + CConn::CConn(const char *filename) { cpuTime = 0.0; in = new rdr::FileInStream(filename); - setStreams(in, NULL); + out = new DummyOutStream; + setStreams(in, out); // Need to skip the initial handshake setState(RFBSTATE_INITIALISATION); // That also means that the reader and writer weren't setup setReader(new rfb::CMsgReader(this, in)); + setWriter(new rfb::CMsgWriter(&server, out)); } CConn::~CConn() { delete in; + delete out; } void CConn::initDone() diff --git a/tests/perf/encperf.cxx b/tests/perf/encperf.cxx index 171564d1..286a8d7b 100644 --- a/tests/perf/encperf.cxx +++ b/tests/perf/encperf.cxx @@ -39,6 +39,7 @@ #include #include +#include #include #include @@ -104,6 +105,7 @@ public: protected: rdr::FileInStream *in; + DummyOutStream *out; rfb::SimpleUpdateTracker updates; class SConn *sc; }; @@ -167,12 +169,14 @@ CConn::CConn(const char *filename) encodeTime = 0.0; in = new rdr::FileInStream(filename); - setStreams(in, NULL); + out = new DummyOutStream; + setStreams(in, out); // Need to skip the initial handshake and ServerInit setState(RFBSTATE_NORMAL); // That also means that the reader and writer weren't setup setReader(new rfb::CMsgReader(this, in)); + setWriter(new rfb::CMsgWriter(&server, out)); // Nor the frame buffer size and format rfb::PixelFormat pf; pf.parse(format); @@ -188,6 +192,7 @@ CConn::~CConn() { delete sc; delete in; + delete out; } void CConn::getStats(double& ratio, unsigned long long& bytes, -- 2.39.5