update_engine: Merge contiguous operations.
Merges operations of type SOURCE_COPY, REPLACE, or REPLACE_BZ if they
have the same type, are contiguous, have only one destination extent,
and their combined block count does not exceed the chunk size.
BUG=chromium:461651
TEST=`cros flash --src-image-to-delta`, checking generated payloads
using `cros payload show --list_ops`, unit tests.
CQ-DEPEND=CL:269134
Change-Id: I5f71e6828561f2e0a6a8ab3e3aae4c362ea2ddde
Reviewed-on: https://chromium-review.googlesource.com/269604
Reviewed-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Allie Wood <alliewood@chromium.org>
Trybot-Ready: Allie Wood <alliewood@chromium.org>
Tested-by: Allie Wood <alliewood@chromium.org>
diff --git a/utils.cc b/utils.cc
index 86d8915..99a23cf 100644
--- a/utils.cc
+++ b/utils.cc
@@ -1697,7 +1697,7 @@
return false;
}
-bool ReadExtents(const std::string& path, vector<Extent>* extents,
+bool ReadExtents(const std::string& path, const vector<Extent>& extents,
chromeos::Blob* out_data, ssize_t out_data_size,
size_t block_size) {
chromeos::Blob data(out_data_size);
@@ -1706,7 +1706,7 @@
TEST_AND_RETURN_FALSE_ERRNO(fd >= 0);
ScopedFdCloser fd_closer(&fd);
- for (const Extent& extent : *extents) {
+ for (const Extent& extent : extents) {
ssize_t bytes_read_this_iteration = 0;
ssize_t bytes = extent.num_blocks() * block_size;
TEST_AND_RETURN_FALSE(bytes_read + bytes <= out_data_size);