update_engine: use compression_factor
Use compression factor in update_engine. This change allows
update_enginge to read from dynamic_partitions_info.txt the build prop
that customizes the compression factor.
Test: th
Change-Id: I834917ddc44003b22623605f3c80d448a16b7ef3
diff --git a/payload_generator/cow_size_estimator.cc b/payload_generator/cow_size_estimator.cc
index 9ab2b87..da4f896 100644
--- a/payload_generator/cow_size_estimator.cc
+++ b/payload_generator/cow_size_estimator.cc
@@ -146,11 +146,13 @@
std::string compression,
const size_t partition_size,
const bool xor_enabled,
- uint32_t cow_version) {
+ uint32_t cow_version,
+ uint64_t compression_factor) {
android::snapshot::CowOptions options{
.block_size = static_cast<uint32_t>(block_size),
.compression = std::move(compression),
- .max_blocks = (partition_size / block_size)};
+ .max_blocks = (partition_size / block_size),
+ .compression_factor = compression_factor};
auto cow_writer = CreateCowEstimator(cow_version, options);
CHECK_NE(cow_writer, nullptr) << "Could not create cow estimator";
CHECK(CowDryRun(source_fd,
diff --git a/payload_generator/cow_size_estimator.h b/payload_generator/cow_size_estimator.h
index 7cb3485..060da43 100644
--- a/payload_generator/cow_size_estimator.h
+++ b/payload_generator/cow_size_estimator.h
@@ -38,7 +38,8 @@
std::string compression,
const size_t partition_size,
bool xor_enabled,
- uint32_t cow_version);
+ uint32_t cow_version,
+ uint64_t compression_factor);
// Convert InstallOps to CowOps and apply the converted cow op to |cow_writer|
bool CowDryRun(
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index 0da929e..fb967fd 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -143,7 +143,8 @@
config_.target.dynamic_partition_metadata->vabc_compression_param(),
new_part_.size,
config_.enable_vabc_xor,
- config_.target.dynamic_partition_metadata->cow_version());
+ config_.target.dynamic_partition_metadata->cow_version(),
+ config_.target.dynamic_partition_metadata->compression_factor());
// ops buffer size == 0 for v2 version of cow format
LOG(INFO) << "Estimated COW size for partition: " << new_part_.name << " "
diff --git a/payload_generator/payload_generation_config.cc b/payload_generator/payload_generation_config.cc
index a974180..f9352cc 100644
--- a/payload_generator/payload_generation_config.cc
+++ b/payload_generator/payload_generation_config.cc
@@ -221,6 +221,16 @@
android::base::ParseUint(cow_version, &cow_version_num);
metadata->set_cow_version(cow_version_num);
}
+ std::string compression_factor;
+ if (store.GetString("virtual_ab_compression_factor", &compression_factor)) {
+ LOG(INFO) << "Using VABC compression factor " << compression_factor;
+ } else {
+ LOG(INFO) << "No compression factor specified. Defaulting to 4k";
+ compression_factor = "4096";
+ }
+ size_t compression_factor_value{};
+ android::base::ParseUint(compression_factor, &compression_factor_value);
+ metadata->set_compression_factor(compression_factor_value);
}
dynamic_partition_metadata = std::move(metadata);
return true;
diff --git a/update_metadata.proto b/update_metadata.proto
index 535f386..6d16da4 100644
--- a/update_metadata.proto
+++ b/update_metadata.proto
@@ -372,6 +372,10 @@
// A collection of knobs to tune Virtual AB Compression
optional VABCFeatureSet vabc_feature_set = 6;
+
+ // Max bytes to be compressed at once during ota. Options: 4k, 8k, 16k, 32k,
+ // 64k, 128k
+ optional uint64 compression_factor = 7;
}
// Definition has been duplicated from