Add --compressor_types option am: 0aa4fae74a am: 6e651f4d7e
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/1873794
Change-Id: I0213548c764d41e74390bce60de928ef45933f83
diff --git a/payload_generator/delta_diff_utils.cc b/payload_generator/delta_diff_utils.cc
index 781b33b..c32f2b0 100644
--- a/payload_generator/delta_diff_utils.cc
+++ b/payload_generator/delta_diff_utils.cc
@@ -45,6 +45,7 @@
#include <base/threading/simple_thread.h>
#include <brillo/data_encoding.h>
#include <bsdiff/bsdiff.h>
+#include <bsdiff/constants.h>
#include <bsdiff/control_entry.h>
#include <bsdiff/patch_reader.h>
#include <bsdiff/patch_writer_factory.h>
@@ -201,6 +202,11 @@
return GenerateBestDiffOperation(diff_candidates, aop, data_blob);
}
+std::vector<bsdiff::CompressorType>
+BestDiffGenerator::GetUsableCompressorTypes() const {
+ return config_.compressors;
+}
+
bool BestDiffGenerator::GenerateBestDiffOperation(
const std::vector<std::pair<InstallOperation_Type, size_t>>&
diff_candidates,
@@ -260,10 +266,8 @@
std::unique_ptr<bsdiff::PatchWriterInterface> bsdiff_patch_writer;
if (operation_type == InstallOperation::BROTLI_BSDIFF) {
- bsdiff_patch_writer =
- bsdiff::CreateBSDF2PatchWriter(patch.value(),
- bsdiff::CompressorType::kBrotli,
- kBrotliCompressionQuality);
+ bsdiff_patch_writer = bsdiff::CreateBSDF2PatchWriter(
+ patch.value(), GetUsableCompressorTypes(), kBrotliCompressionQuality);
} else {
bsdiff_patch_writer = bsdiff::CreateBsdiffPatchWriter(patch.value());
}
@@ -328,6 +332,7 @@
new_data_,
src_deflates,
dst_deflates,
+ GetUsableCompressorTypes(),
temp_file.path(),
&puffdiff_delta));
TEST_AND_RETURN_FALSE(!puffdiff_delta.empty());
@@ -1142,7 +1147,7 @@
const brillo::Blob& hash = hasher.raw_hash();
info->set_hash(hash.data(), hash.size());
LOG(INFO) << part.path << ": size=" << part.size
- << " hash=" << brillo::data_encoding::Base64Encode(hash);
+ << " hash=" << HexEncode(hash);
return true;
}
diff --git a/payload_generator/delta_diff_utils.h b/payload_generator/delta_diff_utils.h
index b335e2a..8d1dca6 100644
--- a/payload_generator/delta_diff_utils.h
+++ b/payload_generator/delta_diff_utils.h
@@ -192,6 +192,7 @@
brillo::Blob* data_blob);
private:
+ std::vector<bsdiff::CompressorType> GetUsableCompressorTypes() const;
bool TryBsdiffAndUpdateOperation(InstallOperation_Type operation_type,
AnnotatedOperation* aop,
brillo::Blob* data_blob);
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index 1919a7e..4ede12b 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -430,6 +430,10 @@
"Whether to use Virtual AB Compression XOR feature");
DEFINE_string(
apex_info_file, "", "Path to META/apex_info.pb found in target build");
+ DEFINE_string(compressor_types,
+ "bz2:brotli",
+ "Colon ':' separated list of compressors. Allowed valures are "
+ "bz2 and brotli.");
brillo::FlagHelper::Init(
argc,
@@ -547,6 +551,7 @@
}
payload_config.enable_vabc_xor = FLAGS_enable_vabc_xor;
+ payload_config.ParseCompressorTypes(FLAGS_compressor_types);
if (!FLAGS_new_partitions.empty()) {
LOG_IF(FATAL, !FLAGS_new_image.empty() || !FLAGS_new_kernel.empty())
diff --git a/payload_generator/payload_generation_config.cc b/payload_generator/payload_generation_config.cc
index 7484755..178261e 100644
--- a/payload_generator/payload_generation_config.cc
+++ b/payload_generator/payload_generation_config.cc
@@ -25,6 +25,7 @@
#include <brillo/strings/string_utils.h>
#include <libsnapshot/cow_format.h>
+#include "bsdiff/constants.h"
#include "update_engine/common/utils.h"
#include "update_engine/payload_consumer/delta_performer.h"
#include "update_engine/payload_generator/boot_img_filesystem.h"
@@ -326,4 +327,23 @@
return true;
}
+void PayloadGenerationConfig::ParseCompressorTypes(
+ const std::string& compressor_types) {
+ auto types = brillo::string_utils::Split(compressor_types, ":");
+ CHECK_LE(types.size(), 2UL)
+ << "Only two compressor types are allowed: bz2 and brotli";
+ CHECK_GT(types.size(), 0UL) << "Please pass in at least 1 valid compressor. "
+ "Allowed values are bz2 and brotli.";
+ compressors.clear();
+ for (const auto& type : types) {
+ if (type == "bz2") {
+ compressors.emplace_back(bsdiff::CompressorType::kBZ2);
+ } else if (type == "brotli") {
+ compressors.emplace_back(bsdiff::CompressorType::kBrotli);
+ } else {
+ LOG(FATAL) << "Unknown compressor type: " << type;
+ }
+ }
+}
+
} // namespace chromeos_update_engine
diff --git a/payload_generator/payload_generation_config.h b/payload_generator/payload_generation_config.h
index c15ac78..36ec676 100644
--- a/payload_generator/payload_generation_config.h
+++ b/payload_generator/payload_generation_config.h
@@ -26,6 +26,7 @@
#include <brillo/key_value_store.h>
#include <brillo/secure_blob.h>
+#include "bsdiff/constants.h"
#include "update_engine/payload_consumer/payload_constants.h"
#include "update_engine/payload_generator/filesystem_interface.h"
#include "update_engine/update_metadata.pb.h"
@@ -184,6 +185,8 @@
// Returns whether the PayloadGenerationConfig is valid.
bool Validate() const;
+ void ParseCompressorTypes(const std::string& compressor_types);
+
// Image information about the new image that's the target of this payload.
ImageConfig target;
@@ -236,6 +239,9 @@
// Whether to enable VABC xor op
bool enable_vabc_xor = false;
+
+ std::vector<bsdiff::CompressorType> compressors{
+ bsdiff::CompressorType::kBZ2, bsdiff::CompressorType::kBrotli};
};
} // namespace chromeos_update_engine
diff --git a/scripts/brillo_update_payload b/scripts/brillo_update_payload
index 0b1b463..2f5ef22 100755
--- a/scripts/brillo_update_payload
+++ b/scripts/brillo_update_payload
@@ -210,6 +210,8 @@
"Optional: Enable the use of Virtual AB Compression XOR feature"
DEFINE_string force_minor_version "" \
"Optional: Override the minor version for the delta generation."
+ DEFINE_string compressor_types "" \
+ "Optional: allowed compressor types. Colon separated, allowe values are bz2 and brotli"
fi
if [[ "${COMMAND}" == "hash" || "${COMMAND}" == "sign" ]]; then
DEFINE_string unsigned_payload "" "Path to the input unsigned payload."
@@ -717,6 +719,10 @@
GENERATOR_ARGS+=(
--disable_verity_computation="${FLAGS_disable_verity_computation}" )
fi
+ if [[ -n "${FLAGS_compressor_types}" ]]; then
+ GENERATOR_ARGS+=(
+ --compressor_types="${FLAGS_compressor_types}" )
+ fi
fi
if [[ -n "${FLAGS_enable_vabc_xor}" ]]; then