diff options
author | Tom Cherry <tomcherry@google.com> | 2020-06-24 13:51:04 -0700 |
---|---|---|
committer | Tom Cherry <tomcherry@google.com> | 2020-06-24 16:19:28 -0700 |
commit | b6cb992cf35b78312471801772622c76cbc64abc (patch) | |
tree | 54f884807b98e7c0c4cb600cddd841853919f2b0 /logd/CompressionEngine.cpp | |
parent | b07e339b537162d090db7da08fd864dee1895344 (diff) |
logd: replace std::vector<uint8_t> in SerializedLogChunk
Turns out std::vector::resize() and std::vector::clear() don't
actually deallocate any memory. std::vector::shrink_to_fit() can be
used for this but isn't a 'guarantee'. Instead of trying to get
std::vector to play nice, this change replaces std::vector<uint8_t>
with std::unique_ptr<uint8_t[]>, which is more accurate to how I'm
using this memory anyway.
Test: logging unit tests
Change-Id: I9638e90bbf50bcf316c5aa172c8278ea945d27e7
Diffstat (limited to 'logd/CompressionEngine.cpp')
-rw-r--r-- | logd/CompressionEngine.cpp | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/logd/CompressionEngine.cpp b/logd/CompressionEngine.cpp index f9c59792f1..da2628cc19 100644 --- a/logd/CompressionEngine.cpp +++ b/logd/CompressionEngine.cpp @@ -27,7 +27,7 @@ CompressionEngine& CompressionEngine::GetInstance() { return *engine; } -bool ZlibCompressionEngine::Compress(std::span<uint8_t> in, std::vector<uint8_t>& out) { +bool ZlibCompressionEngine::Compress(SerializedData& in, size_t data_length, SerializedData& out) { z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; @@ -37,34 +37,34 @@ bool ZlibCompressionEngine::Compress(std::span<uint8_t> in, std::vector<uint8_t> LOG(FATAL) << "deflateInit() failed"; } - CHECK_LE(in.size(), static_cast<int64_t>(std::numeric_limits<uint32_t>::max())); - uint32_t out_size = deflateBound(&strm, in.size()); + CHECK_LE(data_length, in.size()); + CHECK_LE(in.size(), std::numeric_limits<uint32_t>::max()); + uint32_t deflate_bound = deflateBound(&strm, in.size()); - out.resize(out_size); - strm.avail_in = in.size(); - strm.next_in = const_cast<uint8_t*>(in.data()); - strm.avail_out = out_size; + out.Resize(deflate_bound); + + strm.avail_in = data_length; + strm.next_in = in.data(); + strm.avail_out = out.size(); strm.next_out = out.data(); ret = deflate(&strm, Z_FINISH); CHECK_EQ(ret, Z_STREAM_END); - uint32_t compressed_data_size = strm.total_out; + uint32_t compressed_size = strm.total_out; deflateEnd(&strm); - out.resize(compressed_data_size); + + out.Resize(compressed_size); return true; } -bool ZlibCompressionEngine::Decompress(const std::vector<uint8_t>& in, std::vector<uint8_t>& out, - size_t out_size) { - out.resize(out_size); - +bool ZlibCompressionEngine::Decompress(SerializedData& in, SerializedData& out) { z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.opaque = Z_NULL; strm.avail_in = in.size(); - strm.next_in = const_cast<uint8_t*>(in.data()); + strm.next_in = in.data(); strm.avail_out = out.size(); strm.next_out = out.data(); @@ -79,22 +79,22 @@ bool ZlibCompressionEngine::Decompress(const std::vector<uint8_t>& in, std::vect return true; } -bool ZstdCompressionEngine::Compress(std::span<uint8_t> in, std::vector<uint8_t>& out) { - size_t out_size = ZSTD_compressBound(in.size()); - out.resize(out_size); +bool ZstdCompressionEngine::Compress(SerializedData& in, size_t data_length, SerializedData& out) { + CHECK_LE(data_length, in.size()); + + size_t compress_bound = ZSTD_compressBound(data_length); + out.Resize(compress_bound); - out_size = ZSTD_compress(out.data(), out_size, in.data(), in.size(), 1); + size_t out_size = ZSTD_compress(out.data(), out.size(), in.data(), data_length, 1); if (ZSTD_isError(out_size)) { LOG(FATAL) << "ZSTD_compress failed: " << ZSTD_getErrorName(out_size); } - out.resize(out_size); + out.Resize(out_size); return true; } -bool ZstdCompressionEngine::Decompress(const std::vector<uint8_t>& in, std::vector<uint8_t>& out, - size_t out_size) { - out.resize(out_size); +bool ZstdCompressionEngine::Decompress(SerializedData& in, SerializedData& out) { size_t result = ZSTD_decompress(out.data(), out.size(), in.data(), in.size()); if (ZSTD_isError(result)) { LOG(FATAL) << "ZSTD_decompress failed: " << ZSTD_getErrorName(result); |