Commit 82af5532 authored by Samuel Huang's avatar Samuel Huang Committed by Commit Bot

[SuperSize] Fix .sizediff generation inconsistency due to sorting.

This CL fixes the problem where .sizediff files created by
SuperSize-save_diff differ across identical runs. This happens because
the order of alised symbols from _ExpandSparseSymbols() become
arbitrarily ordered. The fix is to refine sort key in SortSymbols().

Change-Id: Ida24d0d97e261ce9aa65ed3a393e9e754c0951d3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2426552Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Commit-Queue: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810194}
parent fb97bb2a
......@@ -124,7 +124,6 @@ _SIZE_HEADER_MULTI_CONTAINER = b'Size File Format v1.1\n'
_SIZEDIFF_HEADER = b'DIFF\n'
_SIZEDIFF_VERSION = 1
class _Writer:
"""Helper to format and write data to a file object."""
......@@ -163,8 +162,13 @@ def SortSymbols(raw_symbols):
# (and not using .sort()), or have it specify a total ordering (which must
# also include putting padding-only symbols before others of the same
# address). Note: The sort as-is takes ~1.5 seconds.
# s.size_without_padding > 0 prevents CalculatePadding() from incorrectly
# detecting duplicate symbols.
# (s.full_name, s.object_path) are important for sort stability when called by
# _ExpandSparseSymbols().
raw_symbols.sort(
key=lambda s: (s.IsPak(), s.IsBss(), s.section_name, s.address))
key=lambda s: (s.IsPak(), s.IsBss(), s.section_name, s.address, s.
size_without_padding > 0, s.full_name, s.object_path))
logging.info('Processed %d symbols', len(raw_symbols))
......@@ -229,7 +233,6 @@ def _ExpandSparseSymbols(sparse_symbols):
logging.debug('Done expanding sparse_symbols')
return models.SymbolGroup(raw_symbols)
def _SaveSizeInfoToFile(size_info,
file_obj,
include_padding=False,
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -158,8 +158,8 @@ Section .other: has 100.0% of 90351129 bytes accounted for from 23 symbols. 0 by
.pak.nontranslated@0(size_without_padding=0,padding=18,full_name=Overhead: ../../../mock_apk/assets/resources.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.nontranslated@2f03(size_without_padding=502,padding=0,full_name=../../chrome/browser/browser_resources.grd: IDR_PDF_COMPOSITOR_MANIFEST,object_path=,source_path=,flags={uncompressed},num_aliases=1,component=)
.pak.nontranslated@2f04(size_without_padding=217,padding=0,full_name=../../chrome/browser/browser_resources.grd: IDR_CHROME_RENDERER_SERVICE_MANIFEST,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.translations@0(size_without_padding=0,padding=18,full_name=Overhead: ../../../mock_apk/assets/en-US.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.translations@0(size_without_padding=0,padding=0,full_name=Overhead: Pak compression artifacts,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.translations@0(size_without_padding=0,padding=18,full_name=Overhead: ../../../mock_apk/assets/en-US.pak,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.translations@3ac6(size_without_padding=40,padding=0,full_name=../../components/app_modal_strings.grdp: IDS_BEFOREUNLOAD_MESSAGEBOX_MESSAGE,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.translations@3d7c(size_without_padding=24,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_TYPE_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
.pak.translations@3d82(size_without_padding=25,padding=0,full_name=../../components/policy_strings.grdp: IDS_POLICY_LIST_ENTRY_ERROR,object_path=,source_path=,flags={},num_aliases=1,component=)
......
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