Disable XOR ops if compression is set to none

Test: th
Change-Id: I15aad3fdea9704a96db7f22b205769dc59ddba9a
diff --git a/payload_consumer/delta_performer.cc b/payload_consumer/delta_performer.cc
index fe32201..dfce92a 100644
--- a/payload_consumer/delta_performer.cc
+++ b/payload_consumer/delta_performer.cc
@@ -493,10 +493,15 @@
     // new_cow_size per partition = partition_size - (#blocks in Copy
     // operations part of the partition)
     if (install_plan_->vabc_none) {
-      LOG(INFO) << "Setting Virtual AB Compression algorithm to none";
+      LOG(INFO) << "Setting Virtual AB Compression algorithm to none. This "
+                   "would also disable VABC XOR as XOR only saves space if "
+                   "compression is enabled.";
       manifest_.mutable_dynamic_partition_metadata()
           ->set_vabc_compression_param("none");
       for (auto& partition : *manifest_.mutable_partitions()) {
+        if (!partition.has_estimate_cow_size()) {
+          continue;
+        }
         auto new_cow_size = partition.new_partition_info().size();
         for (const auto& operation : partition.merge_operations()) {
           if (operation.type() == CowMergeOperation::COW_COPY) {
@@ -504,6 +509,17 @@
                 operation.dst_extent().num_blocks() * manifest_.block_size();
           }
         }
+        // Remove all COW_XOR merge ops, as XOR without compression is useless.
+        // It increases CPU usage but does not reduce space usage at all.
+        auto&& merge_ops = *partition.mutable_merge_operations();
+        merge_ops.erase(std::remove_if(merge_ops.begin(),
+                                       merge_ops.end(),
+                                       [](const auto& op) {
+                                         return op.type() ==
+                                                CowMergeOperation::COW_XOR;
+                                       }),
+                        merge_ops.end());
+
         // Every block written to COW device will come with a header which
         // stores src/dst block info along with other data.
         const auto cow_metadata_size = partition.new_partition_info().size() /
diff --git a/payload_consumer/vabc_partition_writer.cc b/payload_consumer/vabc_partition_writer.cc
index b4f97d2..1a7a049 100644
--- a/payload_consumer/vabc_partition_writer.cc
+++ b/payload_consumer/vabc_partition_writer.cc
@@ -16,8 +16,6 @@
 
 #include "update_engine/payload_consumer/vabc_partition_writer.h"
 
-#include <algorithm>
-#include <map>
 #include <memory>
 #include <string>
 #include <utility>
diff --git a/payload_generator/cow_size_estimator.cc b/payload_generator/cow_size_estimator.cc
index 704aeaa..81cfd0b 100644
--- a/payload_generator/cow_size_estimator.cc
+++ b/payload_generator/cow_size_estimator.cc
@@ -25,7 +25,6 @@
 #include <android-base/unique_fd.h>
 #include <libsnapshot/cow_writer.h>
 
-#include "update_engine/common/cow_operation_convert.h"
 #include "update_engine/common/utils.h"
 #include "update_engine/payload_consumer/vabc_partition_writer.h"
 #include "update_engine/payload_generator/extent_ranges.h"