summaryrefslogtreecommitdiff
path: root/host
diff options
context:
space:
mode:
authorYurii Zubrytskyi <zyy@google.com>2017-02-01 17:12:03 -0800
committerGreg Hartman <ghartman@google.com>2018-08-23 17:30:51 -0700
commit96ed3c4607c440eab88d15484c4100c73de730d0 (patch)
tree5fd820323004cae1e03bdd0119d0472c93271bbc /host
parente85e7930301177a25c49bd51aac0ede2744632f3 (diff)
downloadopengl-transport-96ed3c4607c440eab88d15484c4100c73de730d0.tar.gz
ChecksumCalculator serialization
Change-Id: Id135b7e226c0664c3bc2261f0f6b5ab28cb580c6
Diffstat (limited to 'host')
-rw-r--r--host/libs/virglrenderer/ChecksumCalculator.cpp32
-rw-r--r--host/libs/virglrenderer/ChecksumCalculator.h10
-rw-r--r--host/libs/virglrenderer/OpenglRender/IOStream.h1
3 files changed, 40 insertions, 3 deletions
diff --git a/host/libs/virglrenderer/ChecksumCalculator.cpp b/host/libs/virglrenderer/ChecksumCalculator.cpp
index 6a3a38adf..7bd82fc76 100644
--- a/host/libs/virglrenderer/ChecksumCalculator.cpp
+++ b/host/libs/virglrenderer/ChecksumCalculator.cpp
@@ -16,6 +16,8 @@
#include "ChecksumCalculator.h"
+#include "android/base/files/Stream.h"
+
#include <string>
#include <vector>
@@ -138,3 +140,33 @@ uint32_t ChecksumCalculator::computeV1Checksum() const {
revLen = (revLen & 0xaaaaaaaa) >> 1 | (revLen & 0x55555555) << 1;
return revLen;
}
+
+void ChecksumCalculator::save(android::base::Stream* stream) {
+ assert(!m_isEncodingChecksum);
+ switch (m_version) {
+ case 1:
+ assert(m_v1BufferTotalLength == 0);
+ break;
+ }
+
+ // Our checksum should never become > 255 bytes. Ever.
+ assert((uint8_t)m_checksumSize == m_checksumSize);
+ stream->putByte(m_checksumSize);
+ stream->putBe32(m_version);
+ stream->putBe32(m_numRead);
+ stream->putBe32(m_numWrite);
+}
+
+void ChecksumCalculator::load(android::base::Stream* stream) {
+ assert(!m_isEncodingChecksum);
+ switch (m_version) {
+ case 1:
+ assert(m_v1BufferTotalLength == 0);
+ break;
+ }
+
+ m_checksumSize = stream->getByte();
+ m_version = stream->getBe32();
+ m_numRead = stream->getBe32();
+ m_numWrite = stream->getBe32();
+}
diff --git a/host/libs/virglrenderer/ChecksumCalculator.h b/host/libs/virglrenderer/ChecksumCalculator.h
index 0cc2f0199..df94403e2 100644
--- a/host/libs/virglrenderer/ChecksumCalculator.h
+++ b/host/libs/virglrenderer/ChecksumCalculator.h
@@ -29,6 +29,8 @@
#define LOG_CHECKSUMHELPER(x...)
#endif
+namespace android { namespace base { class Stream; } }
+
// ChecksumCalculator adds checksum as an array of bytes to GL pipe communication, which
// size depends on the protocol version. Each pipe should use one ChecksumCalculator.
// It can:
@@ -167,7 +169,11 @@ public:
// Will reset the list of buffers by calling resetChecksum.
bool validate(const void* expectedChecksum, size_t expectedChecksumLen);
-protected:
+ // Snapshot support.
+ void save(android::base::Stream* stream);
+ void load(android::base::Stream* stream);
+
+private:
static constexpr size_t kVersion1ChecksumSize = 8; // 2 x uint32_t
static_assert(kVersion1ChecksumSize <= kMaxChecksumLength,
@@ -185,7 +191,7 @@ protected:
uint32_t m_numWrite = 0;
// m_isEncodingChecksum is true when between addBuffer and writeChecksum
bool m_isEncodingChecksum = false;
-private:
+
// Compute a 32bit checksum
// Used in protocol v1
uint32_t computeV1Checksum() const;
diff --git a/host/libs/virglrenderer/OpenglRender/IOStream.h b/host/libs/virglrenderer/OpenglRender/IOStream.h
index 9d6a6b202..d6ed8d552 100644
--- a/host/libs/virglrenderer/OpenglRender/IOStream.h
+++ b/host/libs/virglrenderer/OpenglRender/IOStream.h
@@ -30,7 +30,6 @@ protected:
~IOStream() {
// NOTE: m_buf was owned by the child class thus we expect it to be
// released and flushed before the object destruction.
- // TODO(zyy): uncomment this after all GL state is restored on snapshot
assert(!m_buf || m_free == m_bufsize);
}