New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 681694 link

Starred by 6 users

Issue metadata

Status: Fixed
Owner: ----
Closed: May 2017
Cc:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android
Pri: 3
Type: Bug

Blocked on:
issue 708865
issue 709050
issue 714180

Blocking:
issue 482401
issue 681991


Show other hotlists

Hotlists containing this issue:
speed-binarysize-backlog


Sign in to add a comment

Create tool for finding template bloat in libchrome.so

Project Member Reported by agrieve@chromium.org, Jan 16 2017

Issue description

Through investigating  bug 680973 , I learned about:
nm --size-sort --reverse-sort --demangle --synthetic --line-numbers lib.unstripped/libchrome.so | perl -p -e 's/constprop.*?\]/constprop]/g'

This lists symbols by size.

It would be great if there were some post-processing done on the output though. Mainly, the "merged" options that are doable by this windows tool:
https://github.com/adrianstone55/SymbolSort/blob/master/SymbolSort.txt

(Note that the tool can actually be used on nm output, but is written in C#, so a python script might be more friendly).


The three most useful aggregations (imo) are:
1. Merged Duplicate Symbols - shows when statics in headers are an issue
2. Merged Template Symbols - shows when templates lead to code bloat (merge with <>s removed)
3. Merged Overloaded Symbols - shows when overloads are excessive (merge with function params removed) (not actually sure this is that useful...)

Clustering by path is not as useful with nm output, since many symbols are lacking path information. Tools such as:
https://cs.chromium.org/chromium/src/tools/binary_size/
https://github.com/google/bloaty

Attempt to retrieve better path information by looking more into debugging information. However, I haven't found them to work terribly well either :/.
 
Note: discovered that --line-numbers slows things down quite a bit. Might want to make it optional.
Blocking: 681991
Blocking: 482401
Labels: Performance-Browser
Labels: -apk-size binary-size
Another idea for bucketing by path:
 - Use objdump -t on all .o files within out/Release/obj to build a map of symbol -> source file

This will not work for symbols defined in .h files, but should work for most symbols I'd imagine.
Actually - for symbols in .h files, they end up appearing in each .o file that uses them, so we could do a PSS-type accounting for them. E.g. each .o file that lists the symbol gets the size of it divided by the number of .o files that also list it.

Also note - using .o files is a bit annoying since we currently archive only the .so files. Two thoughts here:
1. We could start to also archive the symbol->.o file mapping
2. We could use the same symbol->.o file mapping for two different .so files, and assume they are largely the same.

We could also use addr2line for symbols that are still unattributed, but that's what //tools/binary_size does, and it doesn't always seem to get it right.
Found yet another option: linker map files. These must be created at link time (via -Wl,-Map=PATH). For libchrome.so, it's 200MB (the -g1 unstripped .so is 600MB, so still smaller).

Example entry from it:
 .text._ZN7leveldb22Uint8VectorToStdStringERKNSt6__ndk16vectorIhNS0_9allocatorIhEEEE
                0x01c694fc       0x4c obj/components/leveldb/public/cpp/libcpp.a(util.o)
                0x01c694fd                leveldb::Uint8VectorToStdString(std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> > const&)
 .text._ZN7leveldb12GetVectorForERKNS_5SliceE
                0x01c69548       0x1c obj/components/leveldb/public/cpp/libcpp.a(util.o)
                0x01c69549                leveldb::GetVectorFor(leveldb::Slice const&)
Good overview of what's captured by a map file vs nm output:
https://www.embeddedrelated.com/showarticle/900.php

E.g. Inlined strings are not captured anywhere: myfunc("this has no symbol")

Only existing tool I could find for analyzing .map files for size is:
http://www.sikorskiy.net/prj/amap/index.html
- Closed source
- Doesn't work on trusty
- Crashed when opening our .map file (ran it under wine)


Project Member

Comment 11 by bugdroid1@chromium.org, Mar 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/20ab3bfd586341cc0d3ffc174116be53de2ca2f3

commit 20ab3bfd586341cc0d3ffc174116be53de2ca2f3
Author: agrieve <agrieve@chromium.org>
Date: Tue Mar 21 14:10:52 2017

V1 of //tools/binary_size rewrite

The key insight to the rewrite is that linker map files
are more useful than nm output. The two main difference:
1. They report object paths (.o files) rather than source paths
2. They require seconds to parse rather than 10s of minutes

Helpers:
parsers.py: Parsing logic for .map files
symbols.py: Data models for Symbol and SymbolGroup
helpers.py: Dumping group for shared functions

Executables:
analyze.py: Post-processing of parsed .map files.
create_html_breakdown.py: Replaces run_binary_size_analysis.py
query.py: CLI for analyzing symbols

NOTRY=true
BUG= 681694 

Review-Url: https://codereview.chromium.org/2724253002
Cr-Commit-Position: refs/heads/master@{#458397}

[modify] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/PRESUBMIT.py
[modify] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/README.md
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/analyze.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/create_html_breakdown.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/function_signature.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/function_signature_test.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/helpers.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/mapfileparser.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/query.py
[delete] https://crrev.com/f41cd022151ab7afea8ccbf411132984965cd6b9/tools/binary_size/run_binary_size_analysis.py
[add] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/symbols.py
[modify] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/template/D3SymbolTreeMap.js
[modify] https://crrev.com/20ab3bfd586341cc0d3ffc174116be53de2ca2f3/tools/binary_size/template/index.html

Project Member

Comment 12 by bugdroid1@chromium.org, Mar 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/35ed9edd145d324bdec5c10a1f99c5863b93b775

commit 35ed9edd145d324bdec5c10a1f99c5863b93b775
Author: agrieve <agrieve@chromium.org>
Date: Mon Mar 27 21:13:34 2017

V2 of //tools/binary_size rewrite (diffs).

Renames:
analyze.py -> map2size.py
symbols.py -> models.py
query.py -> console.py
mapfileparser.py -> linker_map_parser.py

Main features:
* Removes explain_binary_size_delta.py in favour of console.py.
* Ability to diff two .size results.
* Many improvements to console.py.
* Added some integration tests.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2769933002
Cr-Commit-Position: refs/heads/master@{#459878}

[modify] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/README.md
[delete] https://crrev.com/b20148e73c9d380f84968dac00dae26425d05b78/tools/binary_size/analyze.py
[delete] https://crrev.com/b20148e73c9d380f84968dac00dae26425d05b78/tools/binary_size/binary_size_utils.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/console.py
[modify] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/create_html_breakdown.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/describe.py
[delete] https://crrev.com/b20148e73c9d380f84968dac00dae26425d05b78/tools/binary_size/explain_binary_size_delta.py
[delete] https://crrev.com/b20148e73c9d380f84968dac00dae26425d05b78/tools/binary_size/explain_binary_size_delta_unittest.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/file_format.py
[modify] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/function_signature_test.py
[modify] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/helpers.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/integration_test.py
[rename] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/linker_map_parser.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/map2size.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/models.py
[delete] https://crrev.com/b20148e73c9d380f84968dac00dae26425d05b78/tools/binary_size/query.py
[delete] https://crrev.com/b20148e73c9d380f84968dac00dae26425d05b78/tools/binary_size/symbols.py
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/testdata/ActualDiff.golden
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/testdata/ConsoleNullDiff.golden
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/testdata/Map2Size.golden
[add] https://crrev.com/35ed9edd145d324bdec5c10a1f99c5863b93b775/tools/binary_size/testdata/test.map

Project Member

Comment 13 by bugdroid1@chromium.org, Mar 28 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c2c38dc205e4ecce6a316deeaddd41c03a502cd7

commit c2c38dc205e4ecce6a316deeaddd41c03a502cd7
Author: agrieve <agrieve@chromium.org>
Date: Tue Mar 28 13:51:48 2017

Revert of V2 of //tools/binary_size rewrite (diffs). (patchset #7 id:120001 of https://codereview.chromium.org/2769933002/ )

Reason for revert:
Typo'ed in final set of review comments :(

Original issue's description:
> V2 of //tools/binary_size rewrite (diffs).
>
> Renames:
> analyze.py -> map2size.py
> symbols.py -> models.py
> query.py -> console.py
> mapfileparser.py -> linker_map_parser.py
>
> Main features:
> * Removes explain_binary_size_delta.py in favour of console.py.
> * Ability to diff two .size results.
> * Many improvements to console.py.
> * Added some integration tests.
>
> BUG= 681694 
>
> Review-Url: https://codereview.chromium.org/2769933002
> Cr-Commit-Position: refs/heads/master@{#459878}
> Committed: https://chromium.googlesource.com/chromium/src/+/35ed9edd145d324bdec5c10a1f99c5863b93b775

TBR=estevenson@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 681694 

Review-Url: https://codereview.chromium.org/2778963003
Cr-Commit-Position: refs/heads/master@{#460083}

[modify] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/README.md
[add] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/analyze.py
[add] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/binary_size_utils.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/console.py
[modify] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/create_html_breakdown.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/describe.py
[add] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/explain_binary_size_delta.py
[add] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/explain_binary_size_delta_unittest.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/file_format.py
[modify] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/function_signature_test.py
[modify] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/helpers.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/integration_test.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/map2size.py
[rename] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/mapfileparser.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/models.py
[add] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/query.py
[add] https://crrev.com/c2c38dc205e4ecce6a316deeaddd41c03a502cd7/tools/binary_size/symbols.py
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/testdata/ActualDiff.golden
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/testdata/ConsoleNullDiff.golden
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/testdata/Map2Size.golden
[delete] https://crrev.com/26c4f03a77407fc2a69ee92914474308de3c9a8b/tools/binary_size/testdata/test.map

Project Member

Comment 14 by bugdroid1@chromium.org, Mar 28 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/df30c0f4735e673c03e43a0c77eec1ee5cdd9653

commit df30c0f4735e673c03e43a0c77eec1ee5cdd9653
Author: agrieve <agrieve@chromium.org>
Date: Tue Mar 28 14:09:13 2017

Reland of V2 of //tools/binary_size rewrite (diffs).

Reverted in:
https://codereview.chromium.org/2778963003/

Reason for reland:
Fixed typo in Diff() command.

Renames:
analyze.py -> map2size.py
symbols.py -> models.py
query.py -> console.py
mapfileparser.py -> linker_map_parser.py

Main features:
* Removes explain_binary_size_delta.py in favour of console.py.
* Ability to diff two .size results.
* Many improvements to console.py.
* Added some integration tests.

TBR=estevenson@chromium.org
NOTRY=true
BUG= 681694 

Review-Url: https://codereview.chromium.org/2785483002
Cr-Commit-Position: refs/heads/master@{#460088}

[modify] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/README.md
[delete] https://crrev.com/b7af49bce7ecd2e79c8a54712d27bd45e27c2420/tools/binary_size/analyze.py
[delete] https://crrev.com/b7af49bce7ecd2e79c8a54712d27bd45e27c2420/tools/binary_size/binary_size_utils.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/console.py
[modify] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/create_html_breakdown.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/describe.py
[delete] https://crrev.com/b7af49bce7ecd2e79c8a54712d27bd45e27c2420/tools/binary_size/explain_binary_size_delta.py
[delete] https://crrev.com/b7af49bce7ecd2e79c8a54712d27bd45e27c2420/tools/binary_size/explain_binary_size_delta_unittest.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/file_format.py
[modify] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/function_signature_test.py
[modify] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/helpers.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/integration_test.py
[rename] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/linker_map_parser.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/map2size.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/models.py
[delete] https://crrev.com/b7af49bce7ecd2e79c8a54712d27bd45e27c2420/tools/binary_size/query.py
[delete] https://crrev.com/b7af49bce7ecd2e79c8a54712d27bd45e27c2420/tools/binary_size/symbols.py
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/testdata/ActualDiff.golden
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/testdata/ConsoleNullDiff.golden
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/testdata/Map2Size.golden
[add] https://crrev.com/df30c0f4735e673c03e43a0c77eec1ee5cdd9653/tools/binary_size/testdata/test.map

Project Member

Comment 15 by bugdroid1@chromium.org, Apr 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd

commit 36752bcf4156e76c6ad0424dfa1d4cc7d38121dd
Author: agrieve <agrieve@chromium.org>
Date: Mon Apr 03 18:49:22 2017

//tools/binary_size: source_path information, change file format, fixes

Main Changes:
* Parse .ninja files to find source_path information.
* Optimized file format for size. Hopefully should be stable(ish) now.

Other Changes:
* Remove .size.gz. Enforce just .size to reduce complexity.
* Improved how we deal with anonymous namespaces
* Improved GroupBy() functions so they group by entire namespace / path.
* Handling for data symbols that have function parameters in their name.
* Fixed typo in create_html_breakdown.py that made it entirely broken.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2791433004
Cr-Commit-Position: refs/heads/master@{#461491}

[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/README.md
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/console.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/create_html_breakdown.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/describe.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/file_format.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/integration_test.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/linker_map_parser.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/map2size.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/models.py
[add] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/ninja_parser.py
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/ActualDiff.golden
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/ConsoleNullDiff.golden
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/Map2Size.golden
[add] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/SymbolGroupMethods.golden
[add] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/build.ninja
[add] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/sub.ninja
[modify] https://crrev.com/36752bcf4156e76c6ad0424dfa1d4cc7d38121dd/tools/binary_size/testdata/test.map

Project Member

Comment 16 by bugdroid1@chromium.org, Apr 4 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f

commit 728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f
Author: agrieve <agrieve@chromium.org>
Date: Tue Apr 04 20:39:52 2017

//tools/binary_size: Various enhancements to console.py

* Map input to "size_info" rather than "size_info1" when there is only
  one input
* For convenience, add variable "symbols = size_info.symbols"
* Don't re-sort if SymbolGroup passed to Print() is already sorted
* Add more information to Print(verbose=True)
* Add a regex helper for looking for names in camelCase/snake_case/etc
* Allow group[0xADDRESS] to return the symbol at that address
* Revert object_path transformation to how it was before last commit:
   foo/bar.a/baz.o not, foo/bar.a/(baz.o)
   Because you expect .endswith('.o').
* Filled out my pydoc.

NOTRY=true
BUG= 681694 

Review-Url: https://codereview.chromium.org/2795593005
Cr-Commit-Position: refs/heads/master@{#461821}

[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/README.md
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/console.py
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/describe.py
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/integration_test.py
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/map2size.py
[add] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/match_util.py
[add] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/match_util_test.py
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/models.py
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/testdata/ActualDiff.golden
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/testdata/ConsoleNullDiff.golden
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/testdata/Map2Size.golden
[modify] https://crrev.com/728a4d51cdd2ccbd6e3e0e81dad77cdb0834f90f/tools/binary_size/testdata/SymbolGroupMethods.golden

Project Member

Comment 18 by bugdroid1@chromium.org, Apr 6 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2ed07a74b39aa94480fe5618c9cc787bec66dd34

commit 2ed07a74b39aa94480fe5618c9cc787bec66dd34
Author: agrieve <agrieve@chromium.org>
Date: Thu Apr 06 15:00:36 2017

//tools/binary_size: Add Disassemble() to console.py. Tweak metadata.

Might be useful for seeing why a function is big.
Reworks metadata so that the proper elf file is auto-detected under
normal circumstances.

NOTRY=true
BUG= 681694 

Review-Url: https://codereview.chromium.org/2801663003
Cr-Commit-Position: refs/heads/master@{#462474}

[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/README.md
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/console.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/create_html_breakdown.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/describe.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/file_format.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/integration_test.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/map2size.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/models.py
[add] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/paths.py
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/testdata/ActualDiff.golden
[modify] https://crrev.com/2ed07a74b39aa94480fe5618c9cc787bec66dd34/tools/binary_size/testdata/ConsoleNullDiff.golden

Blockedon: 709050
Project Member

Comment 22 by bugdroid1@chromium.org, Apr 11 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518

commit f70d47db0b462dbc08d4d6ae2e633e4e5b0af518
Author: agrieve <agrieve@chromium.org>
Date: Tue Apr 11 17:48:20 2017

//tools/binary_size: Group [clone] and ** symbols

Two types of groups:
1. Those that end with "[clone .part.#]"
2. Star symbols (e.g.: "** symbol gap 3")

To handle grouped symbols:
* Print(recursive=True) added
* Diff() updated to be recursive
* Tests updated

For the .size files that motivated this change, the diff before had:
    355 symbols added (+), 2964 changed (~), 300 removed (-)
and after:
    345 symbols added (+), 2975 changed (~), 290 removed (-)

I was hoping for a bigger reduction, but it turns out the majority of
the "noise" is actually from different functions being inlined.

This change also changes map2size.py from positional arguments to
having: --elf-file, --output-file. It also adds --no-source-paths.
These flags make it obvious that the tool can still be used with only
a .map file.

BUG= 681694 , 708865 

Review-Url: https://codereview.chromium.org/2809043003
Cr-Commit-Position: refs/heads/master@{#463678}

[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/console.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/create_html_breakdown.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/describe.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/file_format.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/integration_test.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/map2size.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/models.py
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/testdata/ActualDiff.golden
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/testdata/ConsoleNullDiff.golden
[add] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/testdata/FullDescription.golden
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/testdata/Map2Size.golden
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/testdata/SymbolGroupMethods.golden
[modify] https://crrev.com/f70d47db0b462dbc08d4d6ae2e633e4e5b0af518/tools/binary_size/testdata/test.map

Project Member

Comment 23 by bugdroid1@chromium.org, Apr 11 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5795cf77e5bcc458a5768831377a3c672b725136

commit 5795cf77e5bcc458a5768831377a3c672b725136
Author: agrieve <agrieve@chromium.org>
Date: Tue Apr 11 20:44:16 2017

//tools/binary_size: Consolidate most tools into "supersize" command

This should make clear which scripts relate to .size files.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2813963002
Cr-Commit-Position: refs/heads/master@{#463757}

[modify] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/OWNERS
[modify] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/PRESUBMIT.py
[modify] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/README.md
[delete] https://crrev.com/e5fd84bcbadeed64ace6bca9085465925fe5bcf0/tools/binary_size/helpers.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/archive.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/console.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/describe.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/file_format.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/function_signature.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/function_signature_test.py
[add] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/helpers.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/html_report.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/integration_test.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/linker_map_parser.py
[add] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/main.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/match_util.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/match_util_test.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/models.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/ninja_parser.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/paths.py
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/template/D3SymbolTreeMap.js
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/template/index.html
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/template/test-data-generator.html
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/ActualDiff.golden
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/Archive.golden
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/ConsoleNullDiff.golden
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/FullDescription.golden
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/build.ninja
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/sub.ninja
[rename] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/libsupersize/testdata/test.map
[add] https://crrev.com/5795cf77e5bcc458a5768831377a3c672b725136/tools/binary_size/supersize

Project Member

Comment 24 by bugdroid1@chromium.org, Apr 12 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c666c641ced98002aeb38515fe44f722b3714201

commit c666c641ced98002aeb38515fe44f722b3714201
Author: agrieve <agrieve@chromium.org>
Date: Wed Apr 12 20:44:37 2017

//tools/binary_size: Fix source paths for linux builds

And update README.md example to mention LLVM_DOWNLOAD_GOLD_PLUGIN.

BUG= 681694 , 710461 

Review-Url: https://codereview.chromium.org/2817553003
Cr-Commit-Position: refs/heads/master@{#464141}

[modify] https://crrev.com/c666c641ced98002aeb38515fe44f722b3714201/tools/binary_size/README.md
[modify] https://crrev.com/c666c641ced98002aeb38515fe44f722b3714201/tools/binary_size/libsupersize/archive.py

Project Member

Comment 25 by bugdroid1@chromium.org, Apr 13 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2b71e084f0d11b7aee47096cbbd2144931760028

commit 2b71e084f0d11b7aee47096cbbd2144931760028
Author: agrieve <agrieve@chromium.org>
Date: Thu Apr 13 03:20:38 2017

//tools/binary_size: Record packed .rel.dyn section size

Adds --apk-file flag to archive action. When passed, section sizes are
taken from the .so within the .apk rather than from the one in
lib.unstripped.

Also removes "symbols" from console.py, which was missed in
previous rename commit. The reason to not expose this top-level
is that it in the future, we don't want to also expose java_symbols,
pak_symbols, etc.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2807343005
Cr-Commit-Position: refs/heads/master@{#464271}

[modify] https://crrev.com/2b71e084f0d11b7aee47096cbbd2144931760028/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/2b71e084f0d11b7aee47096cbbd2144931760028/tools/binary_size/libsupersize/console.py
[modify] https://crrev.com/2b71e084f0d11b7aee47096cbbd2144931760028/tools/binary_size/libsupersize/integration_test.py
[modify] https://crrev.com/2b71e084f0d11b7aee47096cbbd2144931760028/tools/binary_size/libsupersize/models.py

Project Member

Comment 26 by bugdroid1@chromium.org, Apr 13 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/98d419b9b3e36419388ff6ce042da6e123fc841f

commit 98d419b9b3e36419388ff6ce042da6e123fc841f
Author: agrieve <agrieve@chromium.org>
Date: Thu Apr 13 17:54:29 2017

supersize: Add "diff" command

And marginally improved LazyPath output_directory logic to look for
build.ninja rather than "Release" in the name.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2817813003
Cr-Commit-Position: refs/heads/master@{#464462}

[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/README.md
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/console.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/integration_test.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/main.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/paths.py
[modify] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/testdata/ActualDiff.golden
[add] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/testdata/Console.golden
[rename] https://crrev.com/98d419b9b3e36419388ff6ce042da6e123fc841f/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden

Project Member

Comment 27 by bugdroid1@chromium.org, Apr 20 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/fdad51f24bced15b7cab495106b3e2152ced8dbd

commit fdad51f24bced15b7cab495106b3e2152ced8dbd
Author: agrieve <agrieve@chromium.org>
Date: Thu Apr 20 19:51:07 2017

supersize: Strip linker-added prefixes from symbol names

Rather than entirely lose this information though, store the prefix
within symbol.flags as a bitfield.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2828333003
Cr-Commit-Position: refs/heads/master@{#466096}

[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/file_format.py
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/testdata/ActualDiff.golden
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/testdata/Archive.golden
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden
[modify] https://crrev.com/fdad51f24bced15b7cab495106b3e2152ced8dbd/tools/binary_size/libsupersize/testdata/test.map

Blockedon: 708865
Blockedon: 714180
Project Member

Comment 30 by bugdroid1@chromium.org, Apr 24 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/11bfa89469cf59b8a5792f5cbfb8f0d2ed9ae48b

commit 11bfa89469cf59b8a5792f5cbfb8f0d2ed9ae48b
Author: agrieve <agrieve@chromium.org>
Date: Mon Apr 24 15:59:08 2017

supersize: Parse build.ninja concurrently

Speeds archive up by a couple seconds. This also adds a work-around for
the process not exiting when an exception is thrown (or Ctrl-C is pressed)
in the main process and a helper process is still active.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2833253002
Cr-Commit-Position: refs/heads/master@{#466635}

[modify] https://crrev.com/11bfa89469cf59b8a5792f5cbfb8f0d2ed9ae48b/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/11bfa89469cf59b8a5792f5cbfb8f0d2ed9ae48b/tools/binary_size/libsupersize/helpers.py
[modify] https://crrev.com/11bfa89469cf59b8a5792f5cbfb8f0d2ed9ae48b/tools/binary_size/libsupersize/ninja_parser.py

Project Member

Comment 31 by bugdroid1@chromium.org, May 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/51966e62c532574324c8fe6f6745ceb47160d241

commit 51966e62c532574324c8fe6f6745ceb47160d241
Author: agrieve <agrieve@chromium.org>
Date: Wed May 03 15:55:58 2017

supersize: Don't cluster by default. Make Diff() accept only SizeInfo.

Sometimes it's useful to view symbols by address, and clustering them
makes doing so a non-trivial task.

Diff() already have a TODO that it didn't work quite properly for
nested groups. This addresses the TODO by having it act upon the
unclustered symbols.

Moves cluster logic to its own file, and maps it to
SymbolGroup.Cluster().

BUG= 681694 

Review-Url: https://codereview.chromium.org/2854173003
Cr-Commit-Position: refs/heads/master@{#468989}

[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/archive.py
[add] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/cluster_symbols.py
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/diff.py
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/file_format.py
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/integration_test.py
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/testdata/Archive.golden
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/51966e62c532574324c8fe6f6745ceb47160d241/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden

Project Member

Comment 32 by bugdroid1@chromium.org, May 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8

commit 9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8
Author: agrieve <agrieve@chromium.org>
Date: Wed May 03 19:24:29 2017

supersize: Fix name normalization of top-level lambdas

Name: cc::{lambda(cc::PaintOp*)#63}::_FUN(cc::PaintOp*)
Before: cc::{lambda
After: cc::{lambda#63}

This also tweaks Print() output to show # of unique symbols.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2856203004
Cr-Commit-Position: refs/heads/master@{#469070}

[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/function_signature.py
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/function_signature_test.py
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/9a3f5f993acb59b16a6e1d5f157a46f6c7a11df8/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden

Project Member

Comment 34 by bugdroid1@chromium.org, May 6 2017

Project Member

Comment 35 by bugdroid1@chromium.org, May 6 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4

commit 9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4
Author: agrieve <agrieve@chromium.org>
Date: Sat May 06 19:14:07 2017

Supersize: Chrome-specific breakdowns, console tweaks

Adds two chrome-specific categorizing functions:
 * CategorizeByChromeComponent()
 * CategorizeGenerated()

Console Enhancements:
* Make console Print() and Diff() parameters optional
* Show symbol indexes when printing (and doort by default, which
  invalidates indices)
* Single-line output for a list of groups
* Show a decimal for pss < 10 (so it's clear the symbol is shared)
* Show running total percentage alongside running total
* Fix SymbolGroup header sizes to be recursively calculated

README update

BUG= 681694 

Review-Url: https://codereview.chromium.org/2864063002
Cr-Commit-Position: refs/heads/master@{#469874}

[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/README.md
[add] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/canned_queries.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/console.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/file_format.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/integration_test.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/main.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/Archive.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/9c9cc15d81514bb92abaa3252c7c7b01c3e47bc4/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden

Labels: -binary-size Performance-Size
Project Member

Comment 40 by bugdroid1@chromium.org, May 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1f8fe2383c7805bb0385c118b19a8efe008ec741

commit 1f8fe2383c7805bb0385c118b19a8efe008ec741
Author: agrieve <agrieve@chromium.org>
Date: Wed May 10 14:37:29 2017

supersize: Add symbol.template_name, and strip <>s from symbol.name

Details:
 * full_name, template_name, name are now always set (full_name used to
   be None when same as name)
 * full_name (rather than name) is now set by linker_map_parser.
 * Adds: WhereIsTemplate() and WhereTemplateNameMatches()
 * Rename Cluster() -> Clustered() (to match tense of other methods).
 * Rename GroupBy*() -> GroupedBy*() (to match tense of other methods).
 * Fixes a bug in Cluster(), as shown by test goldens. I can't figure
   out what changed though!

Running a query of "WhereIsTemplate()" on libchrome.so shows that
templates comprise 4.97mb of 35.6mb. (14%)

The canned_query of "TemplatesByName" shows:
Top five templates:
0)     188057 (3.5%)  *@Group      188057  base::internal::Invoker::Run (count=5954)
1)     352433 (6.5%)  *@Group      164376  color_xform_RGBA (count=101)
2)     508259 (9.4%)  *@Group      155825  std::__ndk1::vector::__push_back_slow_path (count=1769)
3)     637251 (11.8%) *@Group      128992  std::__ndk1::__sort (count=170)
4)     728739 (13.5%) *@Group      91488   std::__ndk1::__tree::__insert_unique (count=641)

Top templates by namespace:
0)    1543846 (28.6%) *@Group      1543846 std (count=15883)
1)    2099482 (38.9%) *@Group      555636  WTF (count=7275)
2)    2640109 (48.9%) *@Group      540627  blink (count=17540)
3)    3150899 (58.4%) *@Group      510789  v8 (count=3293)
4)    3599574 (66.7%) *@Group      448674  base (count=20460)
5)    3957713 (73.4%) *@Group      358138  mojo (count=2795)
6)    4268254 (79.1%) *@Group      310541  IPC (count=6995)

Top collection classes:
1)     825057 (15.3%) *@Group      395878  std::__ndk1::vector (count=3327)
2)    1050592 (19.5%) *@Group      225534  std::__ndk1::__tree (count=3548)
3)    1275208 (23.6%) *@Group      224616  WTF::HashTable (count=2423)
6)    1873846 (34.7%) *@Group      193488  WTF::Vector (count=2461)
8)    2173194 (40.3%) *@Group      134972  std::__ndk1::deque (count=507)
10)   2386316 (44.2%) *@Group      103163  std::__ndk1::__hash_table (count=2019)

BUG= 681694 

Review-Url: https://codereview.chromium.org/2870743003
Cr-Commit-Position: refs/heads/master@{#470566}

[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/canned_queries.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/cluster_symbols.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/console.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/diff.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/file_format.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/function_signature.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/function_signature_test.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/html_report.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/integration_test.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/linker_map_parser.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/Archive.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/1f8fe2383c7805bb0385c118b19a8efe008ec741/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden

Project Member

Comment 41 by bugdroid1@chromium.org, May 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0c70f4f12d5c4960f3938f330c860d109da4b984

commit 0c70f4f12d5c4960f3938f330c860d109da4b984
Author: agrieve <agrieve@chromium.org>
Date: Wed May 10 14:54:05 2017

supersize: Update README.md with technical details.

Also tweaks Print()s SymbolGroup headers and fix .bss being included in
some totals.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2868003003
Cr-Commit-Position: refs/heads/master@{#470571}

[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/OWNERS
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/README.md
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/0c70f4f12d5c4960f3938f330c860d109da4b984/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden

Status: Fixed (was: Available)
Tool is officially created! Closing as fixed (although we may still some commits here for minor tweaks).
Project Member

Comment 43 by bugdroid1@chromium.org, May 15 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29

commit c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29
Author: agrieve <agrieve@chromium.org>
Date: Mon May 15 15:43:11 2017

supersize: A few fixes for Android+clang builds

BUG= 681694 

Review-Url: https://codereview.chromium.org/2880003002
Cr-Commit-Position: refs/heads/master@{#471773}

[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/README.md
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/function_signature.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/function_signature_test.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/linker_map_parser.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/nm.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/Archive.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_nm.py
[modify] https://crrev.com/c4e87be4dac0e0780ebe2f5d54d4e5b02dd16e29/tools/binary_size/libsupersize/testdata/test.map

Project Member

Comment 45 by bugdroid1@chromium.org, May 16 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/89689737e4beb0d37a4037215b3fd2b2bd32010d

commit 89689737e4beb0d37a4037215b3fd2b2bd32010d
Author: agrieve <agrieve@chromium.org>
Date: Tue May 16 18:11:19 2017

supersize: Move [clone] from name -> flags & rewrite Cluster()

SizeInfo.symbols is now Clustered() by default.
SizeInfo.raw_symbols is now a SymbolGroup rather than a list.

Clustered() now uses GroupedBy() and cluster_symbols.py is no more.

BUG= 681694 

Review-Url: https://codereview.chromium.org/2885073002
Cr-Commit-Position: refs/heads/master@{#472162}

[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/archive.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/canned_queries.py
[delete] https://crrev.com/2ccf86ba657e1450597a26bb941bd332eff3ab8c/tools/binary_size/libsupersize/cluster_symbols.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/console.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/describe.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/diff.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/file_format.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/integration_test.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/models.py
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/Archive.golden
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/Console.golden
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/FullDescription.golden
[modify] https://crrev.com/89689737e4beb0d37a4037215b3fd2b2bd32010d/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden

Project Member

Comment 47 by bugdroid1@chromium.org, May 17 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9380331e38c4f8e1d2a0a4cd40681403d3183845

commit 9380331e38c4f8e1d2a0a4cd40681403d3183845
Author: Andrew Grieve <agrieve@chromium.org>
Date: Wed May 17 04:50:37 2017

supersize: README update (clustering, console example)

BUG= 681694 

Change-Id: I0cfb1bd1b5dedc31648098eb8c23433d8af977c5
Reviewed-on: https://chromium-review.googlesource.com/506827
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Eric Stevenson <estevenson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#472329}
[modify] https://crrev.com/9380331e38c4f8e1d2a0a4cd40681403d3183845/tools/binary_size/README.md
[modify] https://crrev.com/9380331e38c4f8e1d2a0a4cd40681403d3183845/tools/perf/docs/apk_size_regressions.md

Sign in to add a comment