Use SuffixArrayIndexInterface opaque type instead of the underlying data pointer.
bsdiff interface is changing such that it hides the suffix array pointer from the public interface. This allows to use a different suffix array data size depending on the input size, running much faster in the normal case. Bug: 34220646 Test: `make checkbuild`; Ran an incremental update generation on a non-A/B device. Change-Id: I78e766da56cf28bc7774b8c8e58527bc11d919fb
This commit is contained in:
@@ -161,7 +161,7 @@
|
||||
#include <android-base/memory.h>
|
||||
#include <android-base/parseint.h>
|
||||
#include <android-base/unique_fd.h>
|
||||
#include <bsdiff.h>
|
||||
#include <bsdiff/bsdiff.h>
|
||||
#include <ziparchive/zip_archive.h>
|
||||
#include <zlib.h>
|
||||
|
||||
@@ -322,7 +322,8 @@ void ImageChunk::MergeAdjacentNormal(const ImageChunk& other) {
|
||||
}
|
||||
|
||||
bool ImageChunk::MakePatch(const ImageChunk& tgt, const ImageChunk& src,
|
||||
std::vector<uint8_t>* patch_data, saidx_t** bsdiff_cache) {
|
||||
std::vector<uint8_t>* patch_data,
|
||||
bsdiff::SuffixArrayIndexInterface** bsdiff_cache) {
|
||||
#if defined(__ANDROID__)
|
||||
char ptemp[] = "/data/local/tmp/imgdiff-patch-XXXXXX";
|
||||
#else
|
||||
@@ -1081,7 +1082,7 @@ bool ZipModeImage::GeneratePatchesInternal(const ZipModeImage& tgt_image,
|
||||
printf("Construct patches for %zu chunks...\n", tgt_image.NumOfChunks());
|
||||
patch_chunks->clear();
|
||||
|
||||
saidx_t* bsdiff_cache = nullptr;
|
||||
bsdiff::SuffixArrayIndexInterface* bsdiff_cache = nullptr;
|
||||
for (size_t i = 0; i < tgt_image.NumOfChunks(); i++) {
|
||||
const auto& tgt_chunk = tgt_image[i];
|
||||
|
||||
@@ -1095,7 +1096,8 @@ bool ZipModeImage::GeneratePatchesInternal(const ZipModeImage& tgt_image,
|
||||
: src_image.FindChunkByName(tgt_chunk.GetEntryName());
|
||||
|
||||
const auto& src_ref = (src_chunk == nullptr) ? src_image.PseudoSource() : *src_chunk;
|
||||
saidx_t** bsdiff_cache_ptr = (src_chunk == nullptr) ? &bsdiff_cache : nullptr;
|
||||
bsdiff::SuffixArrayIndexInterface** bsdiff_cache_ptr =
|
||||
(src_chunk == nullptr) ? &bsdiff_cache : nullptr;
|
||||
|
||||
std::vector<uint8_t> patch_data;
|
||||
if (!ImageChunk::MakePatch(tgt_chunk, src_ref, &patch_data, bsdiff_cache_ptr)) {
|
||||
@@ -1112,7 +1114,7 @@ bool ZipModeImage::GeneratePatchesInternal(const ZipModeImage& tgt_image,
|
||||
patch_chunks->emplace_back(tgt_chunk, src_ref, std::move(patch_data));
|
||||
}
|
||||
}
|
||||
free(bsdiff_cache);
|
||||
delete bsdiff_cache;
|
||||
|
||||
CHECK_EQ(patch_chunks->size(), tgt_image.NumOfChunks());
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user