diff options
author | Yurii Zubrytskyi <zyy@google.com> | 2017-02-01 17:12:03 -0800 |
---|---|---|
committer | Greg Hartman <ghartman@google.com> | 2018-08-23 17:30:51 -0700 |
commit | 96ed3c4607c440eab88d15484c4100c73de730d0 (patch) | |
tree | 5fd820323004cae1e03bdd0119d0472c93271bbc /host | |
parent | e85e7930301177a25c49bd51aac0ede2744632f3 (diff) | |
download | opengl-transport-96ed3c4607c440eab88d15484c4100c73de730d0.tar.gz |
ChecksumCalculator serialization
Change-Id: Id135b7e226c0664c3bc2261f0f6b5ab28cb580c6
Diffstat (limited to 'host')
-rw-r--r-- | host/libs/virglrenderer/ChecksumCalculator.cpp | 32 | ||||
-rw-r--r-- | host/libs/virglrenderer/ChecksumCalculator.h | 10 | ||||
-rw-r--r-- | host/libs/virglrenderer/OpenglRender/IOStream.h | 1 |
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); } |