diff options
Diffstat (limited to 'tests/perf/decperf.cxx')
-rw-r--r-- | tests/perf/decperf.cxx | 49 |
1 files changed, 48 insertions, 1 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 <rdr/Exception.h> #include <rdr/FileInStream.h> +#include <rdr/OutStream.h> #include <rfb/CConnection.h> #include <rfb/CMsgReader.h> +#include <rfb/CMsgWriter.h> #include <rfb/PixelBuffer.h> #include <rfb/PixelFormat.h> @@ -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() |