[Zucchini] Introduce Ensemble Patching.
This CL adds ensemble patching (AKA Layer 3 patching) to Zucchini, where patches are generated and applied on "old" and "new" archives that contain uncompressed executable "elements", which need to be detected and matched first. - HeuristicEnsembleMatcher performs element detection and matching. - Resulting matched "elements" undergo architecture-specific patching (AKA Layer 2 patching), but on failure, raw patching (AKA Layer 1 patching) is used. - "Gaps" are contents in archives that are not elements. These use raw patching, and are computed separately from element patching to reduce peak memory (since these require suffix array of the entire "old" archive). - In the patch format, "gaps" are represented as "no-op" elements, i.e., raw patches without references. - This CL focuses on Zucchini-gen, since Zucchini-apply already supports Ensemble patch application. - After this CL, Zucchini will be equally usable as Courgette. Bug: 729154 Change-Id: Id828186cda74885ee6992b17f641e491efe79c40 Reviewed-on: https://chromium-review.googlesource.com/891489 Commit-Queue: Samuel Huang <huangs@chromium.org> Reviewed-by:Greg Thompson <grt@chromium.org> Cr-Commit-Position: refs/heads/master@{#533734}
Showing
Please register or sign in to comment