Merge "Sort the split transfers to generate a determinate package"

am: c56071b21b

Change-Id: Iecaa85736ff9cb46fdbccbc20aa4ffbdf1024bb6
This commit is contained in:
Tianjie Xu 2018-01-11 05:10:35 +00:00 committed by android-build-merger
commit 4c17a597d2
1 changed files with 19 additions and 9 deletions

View File

@ -1385,8 +1385,8 @@ class BlockImageDiff(object):
assert patch_start == patch_size assert patch_start == patch_size
return split_info_list return split_info_list
def AddSplitTransferForLargeApks(): def SplitLargeApks():
"""Create split transfers for large apk files. """Split the large apks files.
Example: Chrome.apk will be split into Example: Chrome.apk will be split into
src-0: Chrome.apk-0, tgt-0: Chrome.apk-0 src-0: Chrome.apk-0, tgt-0: Chrome.apk-0
@ -1452,16 +1452,16 @@ class BlockImageDiff(object):
split_src_name = "{}-{}".format(src_name, index) split_src_name = "{}-{}".format(src_name, index)
split_tgt_name = "{}-{}".format(tgt_name, index) split_tgt_name = "{}-{}".format(tgt_name, index)
transfer_split = Transfer(split_tgt_name, split_src_name, split_large_apks.append((split_tgt_name,
split_tgt_ranges, split_src_ranges, split_src_name,
self.tgt.RangeSha1(split_tgt_ranges), split_tgt_ranges,
self.src.RangeSha1(split_src_ranges), split_src_ranges,
"diff", self.transfers) patch_content))
transfer_split.patch = patch_content
print("Finding transfers...") print("Finding transfers...")
large_apks = [] large_apks = []
split_large_apks = []
cache_size = common.OPTIONS.cache_size cache_size = common.OPTIONS.cache_size
split_threshold = 0.125 split_threshold = 0.125
max_blocks_per_transfer = int(cache_size * split_threshold / max_blocks_per_transfer = int(cache_size * split_threshold /
@ -1511,13 +1511,23 @@ class BlockImageDiff(object):
AddTransfer(tgt_fn, None, tgt_ranges, empty, "new", self.transfers) AddTransfer(tgt_fn, None, tgt_ranges, empty, "new", self.transfers)
transfer_lock = threading.Lock() transfer_lock = threading.Lock()
threads = [threading.Thread(target=AddSplitTransferForLargeApks) threads = [threading.Thread(target=SplitLargeApks)
for _ in range(self.threads)] for _ in range(self.threads)]
for th in threads: for th in threads:
th.start() th.start()
while threads: while threads:
threads.pop().join() threads.pop().join()
# Sort the split transfers for large apks to generate a determinate package.
split_large_apks.sort()
for (tgt_name, src_name, tgt_ranges, src_ranges,
patch) in split_large_apks:
transfer_split = Transfer(tgt_name, src_name, tgt_ranges, src_ranges,
self.tgt.RangeSha1(tgt_ranges),
self.src.RangeSha1(src_ranges),
"diff", self.transfers)
transfer_split.patch = patch
def AbbreviateSourceNames(self): def AbbreviateSourceNames(self):
for k in self.src.file_map.keys(): for k in self.src.file_map.keys():
b = os.path.basename(k) b = os.path.basename(k)