Commit 9b70a443 authored by Peter Wen's avatar Peter Wen Committed by Commit Bot

Revert "Supersize: Fix pak spurious deltas"

This reverts commit 6d411ef0.

Reason for revert: Failed perf builders with division by zero

Original change's description:
> Supersize: Fix pak spurious deltas
> 
> Previously we recorded the exact pak compression ratios in .size files.
> This results in minor changes to 1k+ unrelated symbols due to changes in
> compression. Use a mostly accurate static constant instead to make .size
> files comparable across runs.
> 
> Bug: 814078
> Change-Id: I63c78379898ef02885ae86e0b95df95d51965918
> Reviewed-on: https://chromium-review.googlesource.com/938122
> Reviewed-by: agrieve <agrieve@chromium.org>
> Commit-Queue: Peter Wen <wnwen@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#539252}

TBR=wnwen@chromium.org,agrieve@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 814078,817534
Change-Id: I5cd4a6375e1f318c3559801da95a850f5ffcf4fa
Reviewed-on: https://chromium-review.googlesource.com/942061Reviewed-by: default avatarPeter Wen <wnwen@chromium.org>
Commit-Queue: Peter Wen <wnwen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539971}
parent d93525cd
...@@ -45,10 +45,6 @@ from grit.format import data_pack ...@@ -45,10 +45,6 @@ from grit.format import data_pack
# max: shared .text symbols = 0 bytes, file size = 11.10MiB (1235449 symbols). # max: shared .text symbols = 0 bytes, file size = 11.10MiB (1235449 symbols).
_MAX_SAME_NAME_ALIAS_COUNT = 40 # 50kb is basically negligable. _MAX_SAME_NAME_ALIAS_COUNT = 40 # 50kb is basically negligable.
# This is an estimate of pak translation compression ratio to make comparisons
# between .size files reasonable. Otherwise this can differ every pak change.
_PAK_COMPRESSION_RATIO = 0.33
def _OpenMaybeGz(path): def _OpenMaybeGz(path):
"""Calls `gzip.open()` if |path| ends in ".gz", otherwise calls `open()`.""" """Calls `gzip.open()` if |path| ends in ".gz", otherwise calls `open()`."""
...@@ -680,7 +676,8 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory, ...@@ -680,7 +676,8 @@ def _ParseElfInfo(map_path, elf_path, tool_prefix, output_directory,
def _ComputePakFileSymbols( def _ComputePakFileSymbols(
file_name, contents, res_info, symbols_by_id, compression_ratio=1): file_name, contents, res_info, symbols_by_id, expected_size,
compression_ratio=1):
id_map = {id(v): k id_map = {id(v): k
for k, v in sorted(contents.resources.items(), reverse=True)} for k, v in sorted(contents.resources.items(), reverse=True)}
alias_map = {k: id_map[id(v)] for k, v in contents.resources.iteritems() alias_map = {k: id_map[id(v)] for k, v in contents.resources.iteritems()
...@@ -693,6 +690,7 @@ def _ComputePakFileSymbols( ...@@ -693,6 +690,7 @@ def _ComputePakFileSymbols(
overhead = (12 + 6) * compression_ratio # Header size plus extra offset overhead = (12 + 6) * compression_ratio # Header size plus extra offset
symbols_by_id[file_name] = models.Symbol( symbols_by_id[file_name] = models.Symbol(
section_name, overhead, full_name='{}: overhead'.format(file_name)) section_name, overhead, full_name='{}: overhead'.format(file_name))
total = overhead
for resource_id in sorted(contents.resources): for resource_id in sorted(contents.resources):
if resource_id in alias_map: if resource_id in alias_map:
# 4 extra bytes of metadata (2 16-bit ints) # 4 extra bytes of metadata (2 16-bit ints)
...@@ -708,6 +706,10 @@ def _ComputePakFileSymbols( ...@@ -708,6 +706,10 @@ def _ComputePakFileSymbols(
section_name, 0, address=resource_id, full_name=full_name) section_name, 0, address=resource_id, full_name=full_name)
size *= compression_ratio size *= compression_ratio
symbols_by_id[resource_id].size += size symbols_by_id[resource_id].size += size
total += size
total = int(round(total))
assert expected_size == total, (
'{} bytes in pak file not accounted for'.format(expected_size - total))
def _ParsePakInfoFile(pak_info_path): def _ParsePakInfoFile(pak_info_path):
...@@ -813,23 +815,13 @@ def _FindPakSymbolsFromApk(apk_path, output_directory): ...@@ -813,23 +815,13 @@ def _FindPakSymbolsFromApk(apk_path, output_directory):
pak_info_path = os.path.join(output_directory, 'size-info', apk_info_name) pak_info_path = os.path.join(output_directory, 'size-info', apk_info_name)
res_info = _ParsePakInfoFile(pak_info_path) res_info = _ParsePakInfoFile(pak_info_path)
symbols_by_id = {} symbols_by_id = {}
total_compressed_size = 0
total_uncompressed_size = 0
for zip_info in pak_zip_infos: for zip_info in pak_zip_infos:
contents = data_pack.ReadDataPackFromString(z.read(zip_info)) contents = data_pack.ReadDataPackFromString(z.read(zip_info))
compression_ratio = 1.0 compression_ratio = float(zip_info.compress_size) / zip_info.file_size
if zip_info.compress_size < zip_info.file_size:
total_compressed_size += zip_info.compress_size
total_uncompressed_size += zip_info.file_size
compression_ratio = _PAK_COMPRESSION_RATIO
_ComputePakFileSymbols( _ComputePakFileSymbols(
os.path.relpath(zip_info.filename, output_directory), contents, os.path.relpath(zip_info.filename, output_directory), contents,
res_info, symbols_by_id, compression_ratio=compression_ratio) res_info, symbols_by_id, expected_size=zip_info.compress_size,
actual_ratio = ( compression_ratio=compression_ratio)
float(total_compressed_size) / total_uncompressed_size)
logging.info('Pak Compression Ratio: %f Actual: %f Diff: %.0f',
_PAK_COMPRESSION_RATIO, actual_ratio,
(_PAK_COMPRESSION_RATIO - actual_ratio) * total_uncompressed_size)
return symbols_by_id return symbols_by_id
...@@ -842,7 +834,7 @@ def _FindPakSymbolsFromFiles(pak_files, pak_info_path, output_directory): ...@@ -842,7 +834,7 @@ def _FindPakSymbolsFromFiles(pak_files, pak_info_path, output_directory):
contents = data_pack.ReadDataPackFromString(f.read()) contents = data_pack.ReadDataPackFromString(f.read())
_ComputePakFileSymbols( _ComputePakFileSymbols(
os.path.relpath(pak_file_path, output_directory), contents, res_info, os.path.relpath(pak_file_path, output_directory), contents, res_info,
symbols_by_id) symbols_by_id, expected_size=os.path.getsize(pak_file_path))
return symbols_by_id return symbols_by_id
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment