payload_generator: Mark all zero blocks in the old partition as visited.

When processing duplicated and zeroed blocks, discard all the zeroed
blocks from the source partition since it doesn't make sense to waste
I/O reading them, and all the new zeroed blocks are taken care of in a
different way.

This also solves the problem that those zeroed blocks might actually not
be written in the source slot when flashing an image with fastboot.

Bug: 28626303
TEST=deployed an update on a device after flashing it with fastboot.

Change-Id: I42012a84634a5b35f181b6b22e8a738ba3b70957
diff --git a/payload_generator/delta_diff_utils.cc b/payload_generator/delta_diff_utils.cc
index 6f895f6..de6a23d 100644
--- a/payload_generator/delta_diff_utils.cc
+++ b/payload_generator/delta_diff_utils.cc
@@ -323,6 +323,13 @@
   for (uint64_t block = old_num_blocks; block-- > 0; ) {
     if (old_block_ids[block] != 0 && !old_visited_blocks->ContainsBlock(block))
       old_blocks_map[old_block_ids[block]].push_back(block);
+
+    // Mark all zeroed blocks in the old image as "used" since it doesn't make
+    // any sense to spend I/O to read zeros from the source partition and more
+    // importantly, these could sometimes be blocks discarded in the SSD which
+    // would read non-zero values.
+    if (old_block_ids[block] == 0)
+      old_visited_blocks->AddBlock(block);
   }
 
   // The collection of blocks in the new partition with just zeros. This is a