Commit c36863be authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

Supersize: Create aliases for inline symbols

If a symbol was found in multiple object files, we would previously have
changed its object path to be the common ancestor of all paths it
appeared in. This is a problem because it would cause queries based on
path to not find these symbols.

On the flip side, we were creating string literal aliases for every
path a string literal appeared in. For small strings such as "", or
"\n", this would lead to an unreasonable number of aliases.

This changes supersize to first create symbols for all paths, and then
collapse groups with a large number of aliases into a single symbol with
ancestor paths.

Before this change:
.text: 48998 symbols have shared ownership (1553806 bytes)
.rodata: 541 symbols have shared ownership (285728 bytes)

After:
.text: 1586 symbols have shared ownership (48252 bytes)
.rodata: 141 symbols have shared ownership (2828 bytes)

This increases the symbol count 702115->912322 and the file size
9.67mb->10.39mb.

This increases the runtime on my machine from ~40s -> ~42s.

Bug: 776032
Change-Id: I457361762b1f241f114b52464812e6035e881538
Reviewed-on: https://chromium-review.googlesource.com/726460
Commit-Queue: agrieve <agrieve@chromium.org>
Reviewed-by: default avatarSamuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510205}
parent 8706ae03
...@@ -72,13 +72,12 @@ between milestones. ...@@ -72,13 +72,12 @@ between milestones.
1. A list of symbols, including name, address, size, 1. A list of symbols, including name, address, size,
padding (caused by alignment), and associated `.o` / `.cc` files. padding (caused by alignment), and associated `.o` / `.cc` files.
#### How are Symbols Collected? #### How are Symbols Collected?
1. Symbol list is Extracted from linker `.map` file. 1. Symbol list is Extracted from linker `.map` file.
* Map files contain some unique pieces of information, such as * Map files contain some unique pieces of information compared to `nm` output,
`** merge strings` entries, and the odd unnamed symbol (which map at least such as `** merge strings` entries, and some unnamed symbols (which
lists a `.o` path). although unnamed, contain the `.o` path).
1. `.o` files are mapped to `.cc` files by parsing `.ninja` files. 1. `.o` files are mapped to `.cc` files by parsing `.ninja` files.
* This means that `.h` files are never listed as sources. No information about * This means that `.h` files are never listed as sources. No information about
inlined symbols is gathered. inlined symbols is gathered.
...@@ -87,8 +86,15 @@ between milestones. ...@@ -87,8 +86,15 @@ between milestones.
* Aliases are created by identical code folding (linker optimization). * Aliases are created by identical code folding (linker optimization).
* Aliases have the same address and size, but report their `.pss` as * Aliases have the same address and size, but report their `.pss` as
`.size / .num_aliases`. `.size / .num_aliases`.
1. Paths for shared symbols (those found in multiple `.o` files) are collected 1. `** merge strings` symbols are further broken down into individual string
by running `nm` on every `.o` file. literal symbols. This is done by reading string literals from `.o` files, and
then searching for them within the `** merge strings` sections.
1. "Shared symbols" are those that are owned by multiple `.o` files. These include
inline functions defined in `.h` files, and string literals that are de-duped
at link-time. Shared symbols are normally represented using one symbol alias
per path, but are sometimes collapsed into a single symbol where the path is
set to `{shared}/$SYMBOL_COUNT`. This collapsing is done only for symbols owned
by a large number of paths.
#### What Other Processing Happens? #### What Other Processing Happens?
......
This diff is collapsed.
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
import cStringIO import cStringIO
import calendar import calendar
import collections
import datetime import datetime
import gzip import gzip
import json import json
...@@ -43,13 +42,13 @@ def _SaveSizeInfoToFile(size_info, file_obj): ...@@ -43,13 +42,13 @@ def _SaveSizeInfoToFile(size_info, file_obj):
_LogSize(file_obj, 'header') # For libchrome: 570 bytes. _LogSize(file_obj, 'header') # For libchrome: 570 bytes.
# Store a single copy of all paths and have them referenced by index. # Store a single copy of all paths and have them referenced by index.
# Using an OrderedDict makes the indices more repetitive (better compression). unique_path_tuples = sorted(set(
path_tuples = collections.OrderedDict.fromkeys( (s.object_path, s.source_path) for s in size_info.raw_symbols))
(s.object_path, s.source_path) for s in size_info.raw_symbols) path_tuples = dict.fromkeys(unique_path_tuples)
for i, key in enumerate(path_tuples): for i, tup in enumerate(unique_path_tuples):
path_tuples[key] = i path_tuples[tup] = i
file_obj.write('%d\n' % len(path_tuples)) file_obj.write('%d\n' % len(unique_path_tuples))
file_obj.writelines('%s\t%s\n' % pair for pair in path_tuples) file_obj.writelines('%s\t%s\n' % pair for pair in unique_path_tuples)
_LogSize(file_obj, 'paths') # For libchrome, adds 200kb. _LogSize(file_obj, 'paths') # For libchrome, adds 200kb.
# Symbol counts by section. # Symbol counts by section.
......
...@@ -218,8 +218,8 @@ class IntegrationTest(unittest.TestCase): ...@@ -218,8 +218,8 @@ class IntegrationTest(unittest.TestCase):
size_info2 = self._CloneSizeInfo() size_info2 = self._CloneSizeInfo()
# Removing 1 alias should not change the size. # Removing 1 alias should not change the size.
a1, _, _ = ( a1, _, _, _ = (
size_info2.raw_symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases) size_info2.raw_symbols.Filter(lambda s: s.num_aliases == 4)[0].aliases)
size_info2.raw_symbols -= [a1] size_info2.raw_symbols -= [a1]
a1.aliases.remove(a1) a1.aliases.remove(a1)
d = diff.Diff(size_info1, size_info2) d = diff.Diff(size_info1, size_info2)
...@@ -239,8 +239,8 @@ class IntegrationTest(unittest.TestCase): ...@@ -239,8 +239,8 @@ class IntegrationTest(unittest.TestCase):
size_info2 = self._CloneSizeInfo() size_info2 = self._CloneSizeInfo()
# Removing 2 aliases should not change the size. # Removing 2 aliases should not change the size.
a1, a2, _ = ( a1, _, a2, _ = (
size_info2.raw_symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases) size_info2.raw_symbols.Filter(lambda s: s.num_aliases == 4)[0].aliases)
size_info2.raw_symbols -= [a1, a2] size_info2.raw_symbols -= [a1, a2]
a1.aliases.remove(a1) a1.aliases.remove(a1)
a1.aliases.remove(a2) a1.aliases.remove(a2)
...@@ -255,22 +255,22 @@ class IntegrationTest(unittest.TestCase): ...@@ -255,22 +255,22 @@ class IntegrationTest(unittest.TestCase):
self.assertEquals((0, 2, 0), _DiffCounts(d.raw_symbols)) self.assertEquals((0, 2, 0), _DiffCounts(d.raw_symbols))
self.assertEquals((1, 1, 0), _DiffCounts(d.symbols.GroupedByFullName())) self.assertEquals((1, 1, 0), _DiffCounts(d.symbols.GroupedByFullName()))
def test_Diff_Aliases3(self): def test_Diff_Aliases4(self):
size_info1 = self._CloneSizeInfo() size_info1 = self._CloneSizeInfo()
size_info2 = self._CloneSizeInfo() size_info2 = self._CloneSizeInfo()
# Removing all 3 aliases should change the size. # Removing all 4 aliases should change the size.
a1, a2, a3 = ( a1, a2, a3, a4 = (
size_info2.raw_symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases) size_info2.raw_symbols.Filter(lambda s: s.num_aliases == 4)[0].aliases)
size_info2.raw_symbols -= [a1, a2, a3] size_info2.raw_symbols -= [a1, a2, a3, a4]
d = diff.Diff(size_info1, size_info2) d = diff.Diff(size_info1, size_info2)
self.assertEquals((0, 0, 3), _DiffCounts(d.raw_symbols)) self.assertEquals((0, 0, 4), _DiffCounts(d.raw_symbols))
self.assertEquals((1, 0, 2), _DiffCounts(d.symbols.GroupedByFullName())) self.assertEquals((1, 0, 2), _DiffCounts(d.symbols.GroupedByFullName()))
# Adding all 3 aliases should change size. # Adding all 4 aliases should change size.
d = diff.Diff(size_info2, size_info1) d = diff.Diff(size_info2, size_info1)
self.assertEquals(d.raw_symbols.pss, a1.size) self.assertEquals(d.raw_symbols.pss, a1.size)
self.assertEquals((0, 3, 0), _DiffCounts(d.raw_symbols)) self.assertEquals((0, 4, 0), _DiffCounts(d.raw_symbols))
self.assertEquals((1, 2, 0), _DiffCounts(d.symbols.GroupedByFullName())) self.assertEquals((1, 2, 0), _DiffCounts(d.symbols.GroupedByFullName()))
def test_Diff_Clustering(self): def test_Diff_Clustering(self):
......
...@@ -31,6 +31,7 @@ BulkObjectFileAnalyzer: ...@@ -31,6 +31,7 @@ BulkObjectFileAnalyzer:
alias for _BulkObjectFileAnalyzerWorker. alias for _BulkObjectFileAnalyzerWorker.
* AnalyzePaths: Run "nm" on all .o files to collect symbol names that exist * AnalyzePaths: Run "nm" on all .o files to collect symbol names that exist
within each. within each.
* SortPaths: Sort results of AnalyzePaths().
* AnalyzeStringLiterals: Must be run after AnalyzePaths() has completed. * AnalyzeStringLiterals: Must be run after AnalyzePaths() has completed.
Extracts string literals from .o files, and then locates them within the Extracts string literals from .o files, and then locates them within the
"** merge strings" sections within an ELF's .rodata section. "** merge strings" sections within an ELF's .rodata section.
...@@ -58,9 +59,10 @@ import threading ...@@ -58,9 +59,10 @@ import threading
import concurrent import concurrent
_MSG_ANALYZE_PATHS = 1 _MSG_ANALYZE_PATHS = 1
_MSG_ANALYZE_STRINGS = 2 _MSG_SORT_PATHS = 2
_MSG_GET_SYMBOL_NAMES = 3 _MSG_ANALYZE_STRINGS = 3
_MSG_GET_STRINGS = 4 _MSG_GET_SYMBOL_NAMES = 4
_MSG_GET_STRINGS = 5
_active_pids = None _active_pids = None
...@@ -128,7 +130,8 @@ def _IsRelevantObjectFileName(name): ...@@ -128,7 +130,8 @@ def _IsRelevantObjectFileName(name):
def CollectAliasesByAddress(elf_path, tool_prefix): def CollectAliasesByAddress(elf_path, tool_prefix):
"""Runs nm on |elf_path| and returns a dict of address->[names]""" """Runs nm on |elf_path| and returns a dict of address->[names]"""
names_by_address = collections.defaultdict(list) # Constructors often show up twice, so use sets to ensure no duplicates.
names_by_address = collections.defaultdict(set)
# About 60mb of output, but piping takes ~30s, and loading it into RAM # About 60mb of output, but piping takes ~30s, and loading it into RAM
# directly takes 3s. # directly takes 3s.
...@@ -151,17 +154,12 @@ def CollectAliasesByAddress(elf_path, tool_prefix): ...@@ -151,17 +154,12 @@ def CollectAliasesByAddress(elf_path, tool_prefix):
address = int(address_str, 16) address = int(address_str, 16)
if not address: if not address:
continue continue
# Constructors often show up twice. names_by_address[address].add(name)
name_list = names_by_address[address]
if name not in name_list:
name_list.append(name)
# Since this is run in a separate process, minimize data passing by returning # Since this is run in a separate process, minimize data passing by returning
# only aliased symbols. # only aliased symbols.
names_by_address = {k: v for k, v in names_by_address.iteritems() # Also: Sort to ensure stable ordering.
if len(v) > 1} return {k: sorted(v) for k, v in names_by_address.iteritems() if len(v) > 1}
return names_by_address
def _CollectAliasesByAddressAsyncHelper(elf_path, tool_prefix): def _CollectAliasesByAddressAsyncHelper(elf_path, tool_prefix):
...@@ -350,9 +348,17 @@ def _ExtractArchivePath(path): ...@@ -350,9 +348,17 @@ def _ExtractArchivePath(path):
return None return None
def _IterStringLiterals(path, addresses, string_sections_by_path): def _IterStringLiterals(path, addresses, obj_sections):
"""Yields all string literals (including \0) for the given object path.
Args:
path: Object file path.
addresses: List of string offsets encoded as hex strings.
obj_sections: List of contents of .rodata.str sections read from the given
object file.
"""
next_offsets = sorted(int(a, 16) for a in addresses) next_offsets = sorted(int(a, 16) for a in addresses)
obj_sections = string_sections_by_path.get(path)
if not obj_sections: if not obj_sections:
# Happens when there is an address for a symbol which is not actually a # Happens when there is an address for a symbol which is not actually a
# string literal, or when string_sections_by_path is missing an entry. # string literal, or when string_sections_by_path is missing an entry.
...@@ -410,7 +416,7 @@ def _ResolveStringPieces(encoded_string_addresses_by_path, string_data, ...@@ -410,7 +416,7 @@ def _ResolveStringPieces(encoded_string_addresses_by_path, string_data,
# least for ascii strings). # least for ascii strings).
for path, object_addresses in string_addresses_by_path.iteritems(): for path, object_addresses in string_addresses_by_path.iteritems():
for value in _IterStringLiterals( for value in _IterStringLiterals(
path, object_addresses, string_sections_by_path): path, object_addresses, string_sections_by_path.get(path)):
first_match = -1 first_match = -1
first_match_dict = None first_match_dict = None
for target_dict, data in itertools.izip(ret, string_data): for target_dict, data in itertools.izip(ret, string_data):
...@@ -530,6 +536,10 @@ class _BulkObjectFileAnalyzerWorker(object): ...@@ -530,6 +536,10 @@ class _BulkObjectFileAnalyzerWorker(object):
self._encoded_string_addresses_by_path_chunks.append(encoded_strs) self._encoded_string_addresses_by_path_chunks.append(encoded_strs)
logging.debug('worker: AnalyzePaths() completed.') logging.debug('worker: AnalyzePaths() completed.')
def SortPaths(self):
for paths in self._paths_by_name.itervalues():
paths.sort()
def AnalyzeStringLiterals(self, elf_path, elf_string_positions): def AnalyzeStringLiterals(self, elf_path, elf_string_positions):
logging.debug('worker: AnalyzeStringLiterals() started.') logging.debug('worker: AnalyzeStringLiterals() started.')
# Read string_data from elf_path, to be shared by forked processes. # Read string_data from elf_path, to be shared by forked processes.
...@@ -612,6 +622,9 @@ class _BulkObjectFileAnalyzerMaster(object): ...@@ -612,6 +622,9 @@ class _BulkObjectFileAnalyzerMaster(object):
payload = '\x01'.join(paths) payload = '\x01'.join(paths)
self._pipe.send((_MSG_ANALYZE_PATHS, payload)) self._pipe.send((_MSG_ANALYZE_PATHS, payload))
def SortPaths(self):
self._pipe.send((_MSG_SORT_PATHS,))
def AnalyzeStringLiterals(self, elf_path, string_positions): def AnalyzeStringLiterals(self, elf_path, string_positions):
self._pipe.send((_MSG_ANALYZE_STRINGS, elf_path, string_positions)) self._pipe.send((_MSG_ANALYZE_STRINGS, elf_path, string_positions))
...@@ -669,6 +682,10 @@ class _BulkObjectFileAnalyzerSlave(object): ...@@ -669,6 +682,10 @@ class _BulkObjectFileAnalyzerSlave(object):
'Cannot call AnalyzePaths() after AnalyzeStringLiterals()s.') 'Cannot call AnalyzePaths() after AnalyzeStringLiterals()s.')
paths = message[1].split('\x01') paths = message[1].split('\x01')
self._job_queue.put(lambda: self._worker_analyzer.AnalyzePaths(paths)) self._job_queue.put(lambda: self._worker_analyzer.AnalyzePaths(paths))
elif message[0] == _MSG_SORT_PATHS:
assert self._allow_analyze_paths, (
'Cannot call SortPaths() after AnalyzeStringLiterals()s.')
self._job_queue.put(self._worker_analyzer.SortPaths)
elif message[0] == _MSG_ANALYZE_STRINGS: elif message[0] == _MSG_ANALYZE_STRINGS:
self._WaitForAnalyzePathJobs() self._WaitForAnalyzePathJobs()
elf_path, string_positions = message[1:] elf_path, string_positions = message[1:]
...@@ -726,6 +743,7 @@ def main(): ...@@ -726,6 +743,7 @@ def main():
# Pass individually to test multiple calls. # Pass individually to test multiple calls.
for path in args.objects: for path in args.objects:
bulk_analyzer.AnalyzePaths([path]) bulk_analyzer.AnalyzePaths([path])
bulk_analyzer.SortPaths()
names_to_paths = bulk_analyzer.GetSymbolNames() names_to_paths = bulk_analyzer.GetSymbolNames()
print('Found {} names'.format(len(names_to_paths))) print('Found {} names'.format(len(names_to_paths)))
......
...@@ -6,11 +6,11 @@ git_revision=abc123 ...@@ -6,11 +6,11 @@ git_revision=abc123
gn_args=var1=true var2="foo" gn_args=var1=true var2="foo"
map_file_name=../test.map map_file_name=../test.map
tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/ tool_prefix=tools/binary_size/libsupersize/testdata/mock_toolchain/
Section .text: has 100.0% of 35900712 bytes accounted for from 18 symbols. 0 bytes are unaccounted for. Section .text: has 100.0% of 35900712 bytes accounted for from 19 symbols. 0 bytes are unaccounted for.
* Padding accounts for 48 bytes (0.0%) * Padding accounts for 48 bytes (0.0%)
* 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%) * 3 placeholders (symbols that start with **) account for 35830760 bytes (99.8%)
* Contains 5 aliases, mapped to 2 unique addresses (60 bytes) * Contains 6 aliases, mapped to 2 unique addresses (60 bytes)
* 1 symbols have shared ownership (12 bytes) * 0 symbols have shared ownership
Section .rodata: has 100.0% of 5927652 bytes accounted for from 12 symbols. 0 bytes are unaccounted for. Section .rodata: has 100.0% of 5927652 bytes accounted for from 12 symbols. 0 bytes are unaccounted for.
* Padding accounts for 675996 bytes (11.4%) * Padding accounts for 675996 bytes (11.4%)
* 4 placeholders (symbols that start with **) account for 5251503 bytes (88.6%) * 4 placeholders (symbols that start with **) account for 5251503 bytes (88.6%)
...@@ -42,9 +42,10 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt ...@@ -42,9 +42,10 @@ Section .bss: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 byt
.text@28f1e0(size_without_padding=69120,padding=4,full_name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={unlikely,gen},num_aliases=1) .text@28f1e0(size_without_padding=69120,padding=4,full_name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={unlikely,gen},num_aliases=1)
.text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2) .text@2a0000(size_without_padding=16,padding=32,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=,source_path=,flags={},num_aliases=2)
.text@2a0000(size_without_padding=16,padding=32,full_name=BazAlias(bool),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2) .text@2a0000(size_without_padding=16,padding=32,full_name=BazAlias(bool),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen},num_aliases=2)
.text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/{shared}/2,source_path=third_party/{shared}/2,flags={clone},num_aliases=3) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={clone},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=3) .text@2a0010(size_without_padding=12,padding=0,full_name=blink::ContiguousContainerBase::shrinkToFit(),object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={gen,clone},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=3) .text@2a0010(size_without_padding=12,padding=0,full_name=FooAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4)
.text@2a0010(size_without_padding=12,padding=0,full_name=BarAlias(),object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={},num_aliases=4)
.text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1) .text@2a0020(size_without_padding=24,padding=4,full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={},num_aliases=1)
.text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1) .text@2a1000(size_without_padding=0,padding=4040,full_name=** symbol gap 1,object_path=,source_path=,flags={},num_aliases=1)
.text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,clone},num_aliases=1) .text@2a1000(size_without_padding=94,padding=0,full_name=blink::PaintChunker::releasePaintChunks(),object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,clone},num_aliases=1)
......
...@@ -79,10 +79,10 @@ Section Sizes (Total=95.6mb (100233874 bytes)): ...@@ -79,10 +79,10 @@ Section Sizes (Total=95.6mb (100233874 bytes)):
.symtab: 16.4mb (17166112 bytes) (17.1%) .symtab: 16.4mb (17166112 bytes) (17.1%)
.text: 34.2mb (35900712 bytes) (35.8%) .text: 34.2mb (35900712 bytes) (35.8%)
Showing 47 symbols (44 unique) with total pss: 43785380 bytes Showing 48 symbols (44 unique) with total pss: 43785380 bytes
Histogram of symbols based on PSS: Histogram of symbols based on PSS:
[2,4): 1 [16,32): 10 [128,256): 2 [131072,262144): 2 [1048576,2097152): 2 [2,4): 5 [16,32): 10 [128,256): 2 [131072,262144): 2 [1048576,2097152): 2
[4,8): 9 [32,64): 9 [256,512): 1 [262144,524288): 1 [2097152,4194304): 1 [4,8): 6 [32,64): 9 [256,512): 1 [262144,524288): 1 [2097152,4194304): 1
[8,16): 3 [64,128): 1 [65536,131072): 2 [524288,1048576): 2 [33554432,67108864): 1 [8,16): 3 [64,128): 1 [65536,131072): 2 [524288,1048576): 2 [33554432,67108864): 1
.text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb .text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb
Number of unique paths: 9 Number of unique paths: 9
...@@ -112,74 +112,76 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -112,74 +112,76 @@ Index | Running Total | Section@Address | PSS | Path
blink::ContiguousContainerBase::shrinkToFit (num_aliases=2) blink::ContiguousContainerBase::shrinkToFit (num_aliases=2)
10) 35900578 (82.0%) t@0x2a0000 24 (size=48) third_party/icu/ucnv_ext.c 10) 35900578 (82.0%) t@0x2a0000 24 (size=48) third_party/icu/ucnv_ext.c
BazAlias (num_aliases=2) BazAlias (num_aliases=2)
11) 35900582 (82.0%) t@0x2a0010 4 (size=12) third_party/{shared}/2 11) 35900581 (82.0%) t@0x2a0010 3 (size=12) third_party/paint.cc
blink::ContiguousContainerBase::shrinkToFit (num_aliases=3) blink::ContiguousContainerBase::shrinkToFit (num_aliases=4)
12) 35900586 (82.0%) t@0x2a0010 4 (size=12) third_party/fft_float.cc 12) 35900584 (82.0%) t@0x2a0010 3 (size=12) third_party/icu/ucnv_ext.c
FooAlias (num_aliases=3) blink::ContiguousContainerBase::shrinkToFit (num_aliases=4)
13) 35900590 (82.0%) t@0x2a0010 4 (size=12) third_party/fft_float.cc 13) 35900587 (82.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
BarAlias (num_aliases=3) FooAlias (num_aliases=4)
14) 35900618 (82.0%) t@0x2a0020 28 third_party/container.c 14) 35900590 (82.0%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
BarAlias (num_aliases=4)
15) 35900618 (82.0%) t@0x2a0020 28 third_party/container.c
blink::ContiguousContainerBase::ContiguousContainerBase blink::ContiguousContainerBase::ContiguousContainerBase
15) 35900712 (82.0%) t@0x2a1000 94 third_party/container.c 16) 35900712 (82.0%) t@0x2a1000 94 third_party/container.c
blink::PaintChunker::releasePaintChunks blink::PaintChunker::releasePaintChunks
16) 35900714 (82.0%) r@0x266e600 2.5 (size=5) base/page_allocator.cc 17) 35900714 (82.0%) r@0x266e600 2.5 (size=5) base/page_allocator.cc
string literal 0 (num_aliases=2) string literal 0 (num_aliases=2)
17) 35900733 (82.0%) r@Group 18 third_party/icu/ucnv_ext.c 18) 35900733 (82.0%) r@Group 18 third_party/icu/ucnv_ext.c
string literal 0 (count=2) string literal 0 (count=2)
18) 35900776 (82.0%) r@0x266e630 43 {no path} 19) 35900776 (82.0%) r@0x266e630 43 {no path}
** merge strings ** merge strings
19) 37866121 (86.5%) r@0x284d600 1965345 {no path} 20) 37866121 (86.5%) r@0x284d600 1965345 {no path}
** merge constants ** merge constants
20) 41152236 (94.0%) r@Group 3286115 {no path} 21) 41152236 (94.0%) r@Group 3286115 {no path}
** symbol gaps (count=2) ** symbol gaps (count=2)
21) 41152244 (94.0%) r@0x284e364 8 base/page_allocator.cc 22) 41152244 (94.0%) r@0x284e364 8 base/page_allocator.cc
22) 41152288 (94.0%) r@0x284e370 44 base/page_allocator.cc 23) 41152288 (94.0%) r@0x284e370 44 base/page_allocator.cc
Name Name
23) 41152320 (94.0%) r@0x284e398 32 third_party/container.c 24) 41152320 (94.0%) r@0x284e398 32 third_party/container.c
chrome::mojom::FilePatcher::Name_ chrome::mojom::FilePatcher::Name_
24) 41828360 (95.5%) r@0x28f3450 676040 third_party/paint.cc 25) 41828360 (95.5%) r@0x28f3450 676040 third_party/paint.cc
kAnimationFrameTimeHistogramClassPath kAnimationFrameTimeHistogramClassPath
25) 41828364 (95.5%) r@0x28f3480 4 third_party/paint.cc 26) 41828364 (95.5%) r@0x28f3480 4 third_party/paint.cc
blink::CSSValueKeywordsHash::findValueImpl::value_word_list blink::CSSValueKeywordsHash::findValueImpl::value_word_list
26) 41828420 (95.5%) R@0x2c176f0 56 third_party/icu/ucnv_ext.c 27) 41828420 (95.5%) R@0x2c176f0 56 third_party/icu/ucnv_ext.c
ChromeMainDelegate [vtable] ChromeMainDelegate [vtable]
27) 41828444 (95.5%) R@0x2c17728 24 third_party/icu/ucnv_ext.c 28) 41828444 (95.5%) R@0x2c17728 24 third_party/icu/ucnv_ext.c
chrome::mojom::FieldTrialRecorder [vtable] chrome::mojom::FieldTrialRecorder [vtable]
28) 42618348 (97.3%) R@0x2c17740 789904 third_party/container.c 29) 42618348 (97.3%) R@0x2c17740 789904 third_party/container.c
chrome::mojom::FieldTrialRecorderProxy [vtable] chrome::mojom::FieldTrialRecorderProxy [vtable]
29) 42618380 (97.3%) R@0x2cd84e0 32 third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o 30) 42618380 (97.3%) R@0x2cd84e0 32 third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
.Lswitch.table.45 .Lswitch.table.45
30) 42618388 (97.3%) R@0x2cd84f0 8 third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o 31) 42618388 (97.3%) R@0x2cd84f0 8 third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
kSystemClassPrefixes kSystemClassPrefixes
31) 42618444 (97.3%) R@0x2cd8500 56 third_party/paint.cc 32) 42618444 (97.3%) R@0x2cd8500 56 third_party/paint.cc
ChromeMainDelegateAndroid [vtable] ChromeMainDelegateAndroid [vtable]
32) 42618468 (97.3%) R@0x2cd8538 24 base/page_allocator.cc 33) 42618468 (97.3%) R@0x2cd8538 24 base/page_allocator.cc
mojo::MessageReceiver [vtable] mojo::MessageReceiver [vtable]
33) 42618480 (97.3%) R@0x2cd8550 12 base/page_allocator.cc 34) 42618480 (97.3%) R@0x2cd8550 12 base/page_allocator.cc
kMethodsAnimationFrameTimeHistogram kMethodsAnimationFrameTimeHistogram
34) 43683612 (99.8%) R@0x2ddc608 1065132 {no path} 35) 43683612 (99.8%) R@0x2ddc608 1065132 {no path}
** symbol gap 0 (end of section) ** symbol gap 0 (end of section)
35) 43683616 (99.8%) d@0x2de7000 4 base/page_allocator.cc 36) 43683616 (99.8%) d@0x2de7000 4 base/page_allocator.cc
google::protobuf::internal::pLinuxKernelCmpxchg google::protobuf::internal::pLinuxKernelCmpxchg
36) 43683620 (99.8%) d@0x2de7004 4 third_party/container.c 37) 43683620 (99.8%) d@0x2de7004 4 third_party/container.c
google::protobuf::internal::pLinuxKernelMemoryBarrier google::protobuf::internal::pLinuxKernelMemoryBarrier
37) 43683772 (99.8%) d@0x2de7008 152 third_party/container.c 38) 43683772 (99.8%) d@0x2de7008 152 third_party/container.c
base::android::kBaseRegisteredMethods base::android::kBaseRegisteredMethods
38) 43683776 (99.8%) d@0x2de70a0 4 third_party/container.c 39) 43683776 (99.8%) d@0x2de70a0 4 third_party/container.c
base::android::g_renderer_histogram_code base::android::g_renderer_histogram_code
39) 43683780 (99.8%) d@0x2de70a4 4 third_party/container.c 40) 43683780 (99.8%) d@0x2de70a4 4 third_party/container.c
base::android::g_library_version_number base::android::g_library_version_number
40) 43785380 (100.0%) d@0x2dffd88 101600 {no path} 41) 43785380 (100.0%) d@0x2dffd88 101600 {no path}
** symbol gap 0 (end of section) ** symbol gap 0 (end of section)
41) 43785380 (100.0%) b@0x0 262144 third_party/fft_float.cc 42) 43785380 (100.0%) b@0x0 262144 third_party/fft_float.cc
ff_cos_131072 ff_cos_131072
42) 43785380 (100.0%) b@0x0 131072 third_party/fft_fixed.cc 43) 43785380 (100.0%) b@0x0 131072 third_party/fft_fixed.cc
ff_cos_131072_fixed ff_cos_131072_fixed
43) 43785380 (100.0%) b@0x0 131072 third_party/fft_float.cc 44) 43785380 (100.0%) b@0x0 131072 third_party/fft_float.cc
ff_cos_65536 ff_cos_65536
44) 43785380 (100.0%) b@0x2dffda0 28 third_party/icu/ucnv_ext.c 45) 43785380 (100.0%) b@0x2dffda0 28 third_party/icu/ucnv_ext.c
g_chrome_content_browser_client g_chrome_content_browser_client
45) 43785380 (100.0%) b@0x2dffe80 200 third_party/icu/ucnv_ext.c 46) 43785380 (100.0%) b@0x2dffe80 200 third_party/icu/ucnv_ext.c
SaveHistogram::atomic_histogram_pointer SaveHistogram::atomic_histogram_pointer
46) 43785380 (100.0%) b@0x2dffe84 4 third_party/icu/ucnv_ext.c 47) 43785380 (100.0%) b@0x2dffe84 4 third_party/icu/ucnv_ext.c
g_AnimationFrameTimeHistogram_clazz g_AnimationFrameTimeHistogram_clazz
...@@ -21,9 +21,10 @@ GroupCount,Address,SizeWithoutPadding,Padding,NumAliases,PSS,Section,Name ...@@ -21,9 +21,10 @@ GroupCount,Address,SizeWithoutPadding,Padding,NumAliases,PSS,Section,Name
,0x28f1e0,69120,4,1,69124.0,t,foo_bar ,0x28f1e0,69120,4,1,69124.0,t,foo_bar
,0x2a0000,16,32,2,24.0,t,blink::ContiguousContainerBase::shrinkToFit ,0x2a0000,16,32,2,24.0,t,blink::ContiguousContainerBase::shrinkToFit
,0x2a0000,16,32,2,24.0,t,BazAlias ,0x2a0000,16,32,2,24.0,t,BazAlias
,0x2a0010,12,0,3,4.0,t,blink::ContiguousContainerBase::shrinkToFit ,0x2a0010,12,0,4,3.0,t,blink::ContiguousContainerBase::shrinkToFit
,0x2a0010,12,0,3,4.0,t,FooAlias ,0x2a0010,12,0,4,3.0,t,blink::ContiguousContainerBase::shrinkToFit
,0x2a0010,12,0,3,4.0,t,BarAlias ,0x2a0010,12,0,4,3.0,t,FooAlias
,0x2a0010,12,0,4,3.0,t,BarAlias
,0x2a0020,24,4,1,28.0,t,blink::ContiguousContainerBase::ContiguousContainerBase ,0x2a0020,24,4,1,28.0,t,blink::ContiguousContainerBase::ContiguousContainerBase
,0x2a1000,94,0,1,94.0,t,blink::PaintChunker::releasePaintChunks ,0x2a1000,94,0,1,94.0,t,blink::PaintChunker::releasePaintChunks
,0x266e600,5,0,2,2.5,r,string literal 0 ,0x266e600,5,0,2,2.5,r,string literal 0
......
...@@ -18,14 +18,14 @@ Section Sizes (Total=0 bytes (0 bytes)): ...@@ -18,14 +18,14 @@ Section Sizes (Total=0 bytes (0 bytes)):
.rodata: 0 bytes (0 bytes) (0.0%) .rodata: 0 bytes (0 bytes) (0.0%)
.text: 0 bytes (0 bytes) (0.0%) .text: 0 bytes (0 bytes) (0.0%)
0 symbols added (+), 0 changed (~), 0 removed (-), 47 unchanged (not shown) 0 symbols added (+), 0 changed (~), 0 removed (-), 48 unchanged (not shown)
Of changed symbols, 0 grew, 0 shrank Of changed symbols, 0 grew, 0 shrank
Number of unique symbols 47 -> 47 (+0) Number of unique symbols 47 -> 47 (+0)
0 paths added, 0 removed, 0 changed 0 paths added, 0 removed, 0 changed
Showing 0 symbols (aliases not grouped for diffs) with total pss: 0 bytes Showing 0 symbols (aliases not grouped for diffs) with total pss: 0 bytes
Histogram of symbols based on PSS: Histogram of symbols based on PSS:
{0}: 47 {0}: 48
.text=0 bytes .rodata=0 bytes .data.rel.ro=0 bytes .data=0 bytes .bss=0 bytes total=0 bytes .text=0 bytes .rodata=0 bytes .data.rel.ro=0 bytes .data=0 bytes .bss=0 bytes total=0 bytes
Number of unique paths: 0 Number of unique paths: 0
......
GroupedByName() GroupedByName()
Showing 42 symbols (42 unique) with total pss: 43785380 bytes Showing 42 symbols (42 unique) with total pss: 43785380 bytes
Histogram of symbols based on PSS: Histogram of symbols based on PSS:
{0}: 6 [8,16): 3 [32,64): 7 [128,256): 1 [65536,131072): 1 [1048576,2097152): 2 {0}: 6 [8,16): 3 [64,128): 2 [65536,131072): 1 [33554432,67108864): 1
[4,8): 7 [16,32): 9 [64,128): 2 [256,512): 1 [524288,1048576): 2 [33554432,67108864): 1 [2,4): 2 [16,32): 9 [128,256): 1 [524288,1048576): 2
[4,8): 5 [32,64): 7 [256,512): 1 [1048576,2097152): 2
.text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb .text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb
Number of unique paths: 9 Number of unique paths: 9
...@@ -17,10 +18,10 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -17,10 +18,10 @@ Index | Running Total | Section@Address | PSS | Path
5) 39117493 (89.3%) *@Group 448 ucnv_extMatchFromU (count=1) 5) 39117493 (89.3%) *@Group 448 ucnv_extMatchFromU (count=1)
6) 39117521 (89.3%) *@Group 28 _GLOBAL__sub_I_SkDeviceProfile.cpp (count=1) 6) 39117521 (89.3%) *@Group 28 _GLOBAL__sub_I_SkDeviceProfile.cpp (count=1)
7) 39186645 (89.5%) *@Group 69124 foo_bar (count=1) 7) 39186645 (89.5%) *@Group 69124 foo_bar (count=1)
8) 39186673 (89.5%) *@Group 28 blink::ContiguousContainerBase::shrinkToFit (count=2) 8) 39186675 (89.5%) *@Group 30 blink::ContiguousContainerBase::shrinkToFit (count=3)
9) 39186697 (89.5%) *@Group 24 BazAlias (count=1) 9) 39186699 (89.5%) *@Group 24 BazAlias (count=1)
10) 39186701 (89.5%) *@Group 4 FooAlias (count=1) 10) 39186702 (89.5%) *@Group 3 FooAlias (count=1)
11) 39186705 (89.5%) *@Group 4 BarAlias (count=1) 11) 39186705 (89.5%) *@Group 3 BarAlias (count=1)
12) 39186733 (89.5%) *@Group 28 blink::ContiguousContainerBase::ContiguousContainerBase (count=1) 12) 39186733 (89.5%) *@Group 28 blink::ContiguousContainerBase::ContiguousContainerBase (count=1)
13) 39186827 (89.5%) *@Group 94 blink::PaintChunker::releasePaintChunks (count=1) 13) 39186827 (89.5%) *@Group 94 blink::PaintChunker::releasePaintChunks (count=1)
14) 39186848 (89.5%) *@Group 21 string literal 0 (count=2) 14) 39186848 (89.5%) *@Group 21 string literal 0 (count=2)
...@@ -55,7 +56,7 @@ GroupedByName(depth=1) ...@@ -55,7 +56,7 @@ GroupedByName(depth=1)
Showing 34 symbols (34 unique) with total pss: 43785380 bytes Showing 34 symbols (34 unique) with total pss: 43785380 bytes
Histogram of symbols based on PSS: Histogram of symbols based on PSS:
{0}: 6 [8,16): 4 [32,64): 6 [128,256): 2 [65536,131072): 1 [1048576,2097152): 2 {0}: 6 [8,16): 4 [32,64): 6 [128,256): 2 [65536,131072): 1 [1048576,2097152): 2
[4,8): 2 [16,32): 6 [64,128): 1 [256,512): 1 [524288,1048576): 2 [33554432,67108864): 1 [2,4): 2 [16,32): 6 [64,128): 1 [256,512): 1 [524288,1048576): 2 [33554432,67108864): 1
.text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb .text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb
Number of unique paths: 9 Number of unique paths: 9
...@@ -70,10 +71,10 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -70,10 +71,10 @@ Index | Running Total | Section@Address | PSS | Path
5) 39117493 (89.3%) *@Group 448 ucnv_extMatchFromU (count=1) 5) 39117493 (89.3%) *@Group 448 ucnv_extMatchFromU (count=1)
6) 39117521 (89.3%) *@Group 28 _GLOBAL__sub_I_SkDeviceProfile.cpp (count=1) 6) 39117521 (89.3%) *@Group 28 _GLOBAL__sub_I_SkDeviceProfile.cpp (count=1)
7) 39186645 (89.5%) *@Group 69124 foo_bar (count=1) 7) 39186645 (89.5%) *@Group 69124 foo_bar (count=1)
8) 39186799 (89.5%) *@Group 154 blink (count=5) 8) 39186801 (89.5%) *@Group 156 blink (count=6)
9) 39186823 (89.5%) *@Group 24 BazAlias (count=1) 9) 39186825 (89.5%) *@Group 24 BazAlias (count=1)
10) 39186827 (89.5%) *@Group 4 FooAlias (count=1) 10) 39186828 (89.5%) *@Group 3 FooAlias (count=1)
11) 39186831 (89.5%) *@Group 4 BarAlias (count=1) 11) 39186831 (89.5%) *@Group 3 BarAlias (count=1)
12) 39186852 (89.5%) *@Group 21 string literal 0 (count=2) 12) 39186852 (89.5%) *@Group 21 string literal 0 (count=2)
13) 39186895 (89.5%) *@Group 43 ** merge strings (count=1) 13) 39186895 (89.5%) *@Group 43 ** merge strings (count=1)
14) 41152240 (94.0%) *@Group 1965345 ** merge constants (count=1) 14) 41152240 (94.0%) *@Group 1965345 ** merge constants (count=1)
...@@ -99,8 +100,9 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -99,8 +100,9 @@ Index | Running Total | Section@Address | PSS | Path
GroupedByName(depth=-1) GroupedByName(depth=-1)
Showing 37 symbols (37 unique) with total pss: 43785380 bytes Showing 37 symbols (37 unique) with total pss: 43785380 bytes
Histogram of symbols based on PSS: Histogram of symbols based on PSS:
{0}: 6 [8,16): 4 [32,64): 8 [128,256): 1 [65536,131072): 1 [1048576,2097152): 2 {0}: 6 [8,16): 4 [64,128): 2 [65536,131072): 1 [33554432,67108864): 1
[4,8): 3 [16,32): 6 [64,128): 2 [256,512): 1 [524288,1048576): 2 [33554432,67108864): 1 [2,4): 2 [16,32): 6 [128,256): 1 [524288,1048576): 2
[4,8): 1 [32,64): 8 [256,512): 1 [1048576,2097152): 2
.text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb .text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb
Number of unique paths: 9 Number of unique paths: 9
...@@ -115,10 +117,10 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -115,10 +117,10 @@ Index | Running Total | Section@Address | PSS | Path
5) 39117493 (89.3%) *@Group 448 ucnv_extMatchFromU (count=1) 5) 39117493 (89.3%) *@Group 448 ucnv_extMatchFromU (count=1)
6) 39117521 (89.3%) *@Group 28 _GLOBAL__sub_I_SkDeviceProfile.cpp (count=1) 6) 39117521 (89.3%) *@Group 28 _GLOBAL__sub_I_SkDeviceProfile.cpp (count=1)
7) 39186645 (89.5%) *@Group 69124 foo_bar (count=1) 7) 39186645 (89.5%) *@Group 69124 foo_bar (count=1)
8) 39186701 (89.5%) *@Group 56 blink::ContiguousContainerBase (count=3) 8) 39186703 (89.5%) *@Group 58 blink::ContiguousContainerBase (count=4)
9) 39186725 (89.5%) *@Group 24 BazAlias (count=1) 9) 39186727 (89.5%) *@Group 24 BazAlias (count=1)
10) 39186729 (89.5%) *@Group 4 FooAlias (count=1) 10) 39186730 (89.5%) *@Group 3 FooAlias (count=1)
11) 39186733 (89.5%) *@Group 4 BarAlias (count=1) 11) 39186733 (89.5%) *@Group 3 BarAlias (count=1)
12) 39186827 (89.5%) *@Group 94 blink::PaintChunker (count=1) 12) 39186827 (89.5%) *@Group 94 blink::PaintChunker (count=1)
13) 39186848 (89.5%) *@Group 21 string literal 0 (count=2) 13) 39186848 (89.5%) *@Group 21 string literal 0 (count=2)
14) 39186891 (89.5%) *@Group 43 ** merge strings (count=1) 14) 39186891 (89.5%) *@Group 43 ** merge strings (count=1)
...@@ -147,9 +149,9 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -147,9 +149,9 @@ Index | Running Total | Section@Address | PSS | Path
GroupedByName(depth=1, min_count=2) GroupedByName(depth=1, min_count=2)
Showing 34 symbols (33 unique) with total pss: 43785380 bytes Showing 34 symbols (33 unique) with total pss: 43785380 bytes
Histogram of symbols based on PSS: Histogram of symbols based on PSS:
[4,8): 3 [32,64): 6 [256,512): 1 [262144,524288): 1 [33554432,67108864): 1 [2,4): 2 [16,32): 7 [128,256): 3 [131072,262144): 2 [1048576,2097152): 2
[8,16): 4 [64,128): 1 [65536,131072): 1 [524288,1048576): 2 [4,8): 1 [32,64): 6 [256,512): 1 [262144,524288): 1 [33554432,67108864): 1
[16,32): 7 [128,256): 3 [131072,262144): 2 [1048576,2097152): 2 [8,16): 4 [64,128): 1 [65536,131072): 1 [524288,1048576): 2
.text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb .text=34.2mb .rodata=5.65mb .data.rel.ro=1.02mb .data=99.4kb .bss=512kb total=41.8mb
Number of unique paths: 9 Number of unique paths: 9
...@@ -172,14 +174,14 @@ Index | Running Total | Section@Address | PSS | Path ...@@ -172,14 +174,14 @@ Index | Running Total | Section@Address | PSS | Path
_GLOBAL__sub_I_SkDeviceProfile.cpp _GLOBAL__sub_I_SkDeviceProfile.cpp
7) 39186645 (89.5%) t@0x28f1e0 69124 third_party/icu/ucnv_ext.c 7) 39186645 (89.5%) t@0x28f1e0 69124 third_party/icu/ucnv_ext.c
foo_bar foo_bar
8) 39186799 (89.5%) *@Group 154 {no path} 8) 39186801 (89.5%) *@Group 156 {no path}
blink (count=5) blink (count=6)
9) 39186823 (89.5%) t@0x2a0000 24 (size=48) third_party/icu/ucnv_ext.c 9) 39186825 (89.5%) t@0x2a0000 24 (size=48) third_party/icu/ucnv_ext.c
BazAlias (num_aliases=2) BazAlias (num_aliases=2)
10) 39186827 (89.5%) t@0x2a0010 4 (size=12) third_party/fft_float.cc 10) 39186828 (89.5%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
FooAlias (num_aliases=3) FooAlias (num_aliases=4)
11) 39186831 (89.5%) t@0x2a0010 4 (size=12) third_party/fft_float.cc 11) 39186831 (89.5%) t@0x2a0010 3 (size=12) third_party/fft_float.cc
BarAlias (num_aliases=3) BarAlias (num_aliases=4)
12) 39186852 (89.5%) *@Group 21 {no path} 12) 39186852 (89.5%) *@Group 21 {no path}
string literal 0 (count=2) string literal 0 (count=2)
13) 39186895 (89.5%) r@0x266e630 43 {no path} 13) 39186895 (89.5%) r@0x266e630 43 {no path}
......
...@@ -64,7 +64,6 @@ _OBJECT_OUTPUTS = { ...@@ -64,7 +64,6 @@ _OBJECT_OUTPUTS = {
'01010101 t _GLOBAL__sub_I_page_allocator.cc', '01010101 t _GLOBAL__sub_I_page_allocator.cc',
'01010101 t _GLOBAL__sub_I_bbr_sender.cc', '01010101 t _GLOBAL__sub_I_bbr_sender.cc',
'01010101 t _GLOBAL__sub_I_pacing_sender.cc', '01010101 t _GLOBAL__sub_I_pacing_sender.cc',
'01010101 t _GLOBAL__sub_I_bbr_sender.cc',
'00000000 r .L.str', '00000000 r .L.str',
'01010101 t extFromUUseMapping(aj, int)', '01010101 t extFromUUseMapping(aj, int)',
'01010101 t extFromUUseMapping(signed char, unsigned int, int)', '01010101 t extFromUUseMapping(signed char, unsigned int, int)',
......
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