Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b8c4ebf authored by Kelvin Zhang's avatar Kelvin Zhang
Browse files

Store lz4 blocks as uncompressed if compression makes data larger

This will change cow size estimation. But since we haven't put lz4 on
SAC website yet, we can still change it.

Bug: 228478555
Test: th
Change-Id: Ifba7107954622ea04cbd25115700dfba50cec9c6
parent 149fa74d
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -84,7 +84,13 @@ std::basic_string<uint8_t> CowWriter::Compress(const void* data, size_t length)
                           << ", compression bound: " << bound << ", ret: " << compressed_size;
                return {};
            }
            // Don't run compression if the compressed output is larger
            if (compressed_size >= length) {
                buffer.resize(length);
                memcpy(buffer.data(), data, length);
            } else {
                buffer.resize(compressed_size);
            }
            return buffer;
        }
        default:
+12 −0
Original line number Diff line number Diff line
@@ -273,6 +273,18 @@ class Lz4Decompressor final : public IDecompressor {
                       << actual_buffer_size << " bytes";
            return false;
        }
        // If input size is same as output size, then input is uncompressed.
        if (stream_->Size() == output_size) {
            size_t bytes_read = 0;
            stream_->Read(output_buffer, output_size, &bytes_read);
            if (bytes_read != output_size) {
                LOG(ERROR) << "Failed to read all input at once. Expected: " << output_size
                           << " actual: " << bytes_read;
                return false;
            }
            sink_->ReturnData(output_buffer, output_size);
            return true;
        }
        std::string input_buffer;
        input_buffer.resize(stream_->Size());
        size_t bytes_read = 0;