Add vabc_compression parameter to update_metadata
Test: treehugger
Change-Id: Icc65db9a7c4fbdf22376f9900016ae1b7058c611
diff --git a/payload_generator/cow_size_estimator.cc b/payload_generator/cow_size_estimator.cc
index 3eb0aca..f3f5264 100644
--- a/payload_generator/cow_size_estimator.cc
+++ b/payload_generator/cow_size_estimator.cc
@@ -16,12 +16,13 @@
#include "update_engine/payload_generator/cow_size_estimator.h"
+#include <string>
#include <utility>
#include <vector>
+#include <android-base/unique_fd.h>
#include <libsnapshot/cow_writer.h>
-#include "android-base/unique_fd.h"
#include "update_engine/common/cow_operation_convert.h"
#include "update_engine/payload_consumer/vabc_partition_writer.h"
#include "update_engine/update_metadata.pb.h"
@@ -64,9 +65,11 @@
const google::protobuf::RepeatedPtrField<InstallOperation>& operations,
const google::protobuf::RepeatedPtrField<CowMergeOperation>&
merge_operations,
- size_t block_size) {
+ size_t block_size,
+ std::string compression) {
android::snapshot::CowWriter cow_writer{
- {.block_size = static_cast<uint32_t>(block_size), .compression = "gz"}};
+ {.block_size = static_cast<uint32_t>(block_size),
+ .compression = std::move(compression)}};
// CowWriter treats -1 as special value, will discard all the data but still
// reports Cow size. Good for estimation purposes
cow_writer.Initialize(android::base::borrowed_fd{-1});
diff --git a/payload_generator/cow_size_estimator.h b/payload_generator/cow_size_estimator.h
index cba89b5..cad4bad 100644
--- a/payload_generator/cow_size_estimator.h
+++ b/payload_generator/cow_size_estimator.h
@@ -14,10 +14,12 @@
// limitations under the License.
//
#include <cstddef>
+#include <string>
#include <update_engine/update_metadata.pb.h>
#include "update_engine/payload_consumer/file_descriptor.h"
+#include "update_engine/payload_generator/delta_diff_generator.h"
namespace chromeos_update_engine {
// Given file descriptor to the source image, target image, and list of
@@ -31,6 +33,7 @@
const google::protobuf::RepeatedPtrField<InstallOperation>& operations,
const google::protobuf::RepeatedPtrField<CowMergeOperation>&
merge_operations,
- size_t block_size);
+ size_t block_size,
+ std::string compression);
} // namespace chromeos_update_engine
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index 74014d9..a43c782 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -132,11 +132,12 @@
*operations.Add() = aop.op;
}
*cow_size_ = EstimateCowSize(
- source_fd,
+ std::move(source_fd),
std::move(target_fd),
- operations,
+ std::move(operations),
{cow_merge_sequence_->begin(), cow_merge_sequence_->end()},
- config_.block_size);
+ config_.block_size,
+ config_.target.dynamic_partition_metadata->vabc_compression_param());
LOG(INFO) << "Estimated COW size for partition: " << new_part_.name << " "
<< *cow_size_;
}
diff --git a/payload_generator/payload_file.cc b/payload_generator/payload_file.cc
index 4334066..d303cfb 100644
--- a/payload_generator/payload_file.cc
+++ b/payload_generator/payload_file.cc
@@ -74,6 +74,8 @@
if (config.disable_vabc) {
manifest_.mutable_dynamic_partition_metadata()->set_vabc_enabled(false);
+ manifest_.mutable_dynamic_partition_metadata()->set_vabc_compression_param(
+ "");
}
if (config.is_partial_update) {
manifest_.set_partial_update(true);
diff --git a/payload_generator/payload_generation_config.cc b/payload_generator/payload_generation_config.cc
index f5a7062..73c9ab3 100644
--- a/payload_generator/payload_generation_config.cc
+++ b/payload_generator/payload_generation_config.cc
@@ -180,7 +180,10 @@
if (store.GetBoolean("virtual_ab_compression", &vabc_enabled)) {
metadata->set_vabc_enabled(vabc_enabled);
}
-
+ // We use "gz" compression by default for VABC.
+ if (metadata->vabc_enabled()) {
+ metadata->set_vabc_compression_param("gz");
+ }
dynamic_partition_metadata = std::move(metadata);
return true;
}