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;
 }