| OLD | NEW |
| 1 # Tools for analyzing Chrome's binary size | 1 # Tools for analyzing Chrome's binary size |
| 2 | 2 |
| 3 # diagnose_bloat.py |
| 4 |
| 5 Determine the cause of binary size bloat between two commits. Works for Android |
| 6 and partially works for Linux (crbug/717550). |
| 7 |
| 8 ## Example Usage: |
| 9 |
| 10 # Build and diff HEAD^ and HEAD. |
| 11 tools/binary_size/diagnose_bloat.py HEAD |
| 12 |
| 13 # Diff OTHERREV and REV using downloaded build artifacts. |
| 14 tools/binary_size/diagnose_bloat.py REV --reference-rev OTHERREV --cloud |
| 15 |
| 16 # Build and diff all contiguous revs in range OTHERREV..REV for src/v8. |
| 17 tools/binary_size/diagnose_bloat.py REV --reference-rev OTHERREV --subrepo v
8 --all |
| 18 |
| 19 # Display detailed usage info (there are many options). |
| 20 tools/binary_size/diagnose_bloat.py -h |
| 21 |
| 3 # Super Size | 22 # Super Size |
| 4 | 23 |
| 5 Collect, archive, and analyze Chrome's binary size. | 24 Collect, archive, and analyze Chrome's binary size. |
| 6 | 25 |
| 7 ## "archive" | 26 ## "archive" |
| 8 | 27 |
| 9 Collect size information and dump it into a `.size` file. Mainly consists of | 28 Collect size information and dump it into a `.size` file. Mainly consists of |
| 10 symbol information parsed from a linker .map file. | 29 symbol information parsed from a linker .map file. |
| 11 | 30 |
| 12 ### Example Usage: | 31 ### Example Usage: |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 tools/binary_size/supersize console chrome.size | 72 tools/binary_size/supersize console chrome.size |
| 54 | 73 |
| 55 ## "diff" | 74 ## "diff" |
| 56 | 75 |
| 57 A convenience command equivalent to: `console before.size after.size --query='Pr
int(Diff(size_info1, size_info2))'` | 76 A convenience command equivalent to: `console before.size after.size --query='Pr
int(Diff(size_info1, size_info2))'` |
| 58 | 77 |
| 59 ### Example Usage: | 78 ### Example Usage: |
| 60 | 79 |
| 61 tools/binary_size/supersize diff before.size after.size --all | 80 tools/binary_size/supersize diff before.size after.size --all |
| 62 | 81 |
| 63 # diagnose_bloat.py | |
| 64 | |
| 65 Determine the cause of binary size bloat between two commits. Works for Android | |
| 66 and partially works for Linux (crbug/717550). | |
| 67 | |
| 68 ## Example Usage: | |
| 69 | |
| 70 # Build and diff HEAD^ and HEAD. | |
| 71 tools/binary_size/diagnose_bloat.py HEAD | |
| 72 | |
| 73 # Diff OTHERREV and REV using downloaded build artifacts. | |
| 74 tools/binary_size/diagnose_bloat.py REV --reference-rev OTHERREV --cloud | |
| 75 | |
| 76 # Build and diff all contiguous revs in range OTHERREV..REV for src/v8. | |
| 77 tools/binary_size/diagnose_bloat.py REV --reference-rev OTHERREV --subrepo v
8 --all | |
| 78 | |
| 79 # Display detailed usage info (there are many options). | |
| 80 tools/binary_size/diagnose_bloat.py -h | |
| 81 | |
| 82 # Roadmap for Super Size: | 82 # Roadmap for Super Size: |
| 83 | 83 |
| 84 Tracked in https://crbug.com/681694 | 84 Tracked in https://crbug.com/681694 |
| 85 | 85 |
| 86 1. Better Linux support (clang/lld). |
| 86 1. More `archive` features: | 87 1. More `archive` features: |
| 87 | 88 |
| 88 * Find out more about 0xffffffffffffffff addresses, and why such large | 89 * Find out more about 0xffffffffffffffff addresses, and why such large |
| 89 gaps exist after them. | 90 gaps exist after them. |
| 90 * Use nm to get the full list of symbols that share the same address. | |
| 91 * Collect java symbol information | 91 * Collect java symbol information |
| 92 * Collect .pak file information (using .o.whitelist files) | 92 * Collect .pak file information (using .o.whitelist files) |
| 93 * Collect .apk entry information | 93 * Collect .apk entry information |
| 94 | 94 |
| 95 1. More `console` features: | 95 1. More `console` features: |
| 96 | 96 |
| 97 * Template Symbols - shows when templates lead to code bloat. | 97 * Template Symbols - shows when templates lead to code bloat. |
| 98 * Duplicate Symbols - shows when statics in headers are an issue. | 98 * Duplicate Symbols - shows when statics in headers are an issue. |
| 99 * Overloaded Symbols - shows when overloads are excessive. | 99 * Overloaded Symbols - shows when overloads are excessive. |
| 100 * Per-class / namespace size (no way to distinguish class vs namespace). | 100 * Per-class / namespace size (no way to distinguish class vs namespace). |
| 101 * Per-Chrome package (Chrome-specific grouping. e.g. name prefixes). | |
| 102 * CSV output (for pasting into a spreadsheet). | 101 * CSV output (for pasting into a spreadsheet). |
| 102 * Make Where\*() methods filter recursively on already-grouped SymbolGroups. |
| 103 * Add symbols.SplitByNamespace() - which will be like GroupByNamespace, but be |
| 104 recursive. |
| 103 | 105 |
| 104 1. More `html_report` features: | 106 1. More `html_report` features: |
| 105 | 107 |
| 106 * Break down by other groupings (e.g. create from nested `SymbolGroups`) | 108 * Break down by other groupings (Create from result of SplitByNamespace()) |
| 109 * Render as simple tree view rather than 2d boxes |
| 107 | 110 |
| 108 1. Integrate with `resource_sizes.py` so that it tracks size of major | 111 1. Integrate with `resource_sizes.py` so that it tracks size of major |
| 109 components separately: chrome vs blink vs skia vs v8. | 112 components separately: chrome vs blink vs skia vs v8. |
| 110 1. Speed up some steps (like normalizing names) via multiprocessing. | |
| 111 1. Add dependency graph info, perhaps just on a per-file basis. | 113 1. Add dependency graph info, perhaps just on a per-file basis. |
| 112 | |
| 113 # Roadmap for diagnose_bloat.py: | |
| 114 1. More `diagnose_bloat.py` features: | |
| 115 | |
| 116 * Add more diff types (pak files, Java symbols). | |
| OLD | NEW |