OLD | NEW |
1 ================================================================================ | 1 ================================================================================ |
2 __________ .__ | 2 __________ .__ |
3 \______ \ |__| ____ _____ _______ ___.__. | 3 \______ \ |__| ____ _____ _______ ___.__. |
4 | | _/ | | / \ \__ \ \_ __ \ < | | | 4 | | _/ | | / \ \__ \ \_ __ \ < | | |
5 | | \ | | | | \ / __ \_ | | \/ \___ | | 5 | | \ | | | | \ / __ \_ | | \/ \___ | |
6 |______ / |__| |___| / (____ / |__| / ____| | 6 |______ / |__| |___| / (____ / |__| / ____| |
7 \/ \/ \/ \/ | 7 \/ \/ \/ \/ |
8 _________ .__ ___________ .__ | 8 _________ .__ ___________ .__ |
9 / _____/ |__| ________ ____ \__ ___/ ____ ____ | | | 9 / _____/ |__| ________ ____ \__ ___/ ____ ____ | | |
10 \_____ \ | | \___ / _/ __ \ | | / _ \ / _ \ | | | 10 \_____ \ | | \___ / _/ __ \ | | / _ \ / _ \ | | |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 1. Build your product as you normally would, e.g.: | 45 1. Build your product as you normally would, e.g.: |
46 ninja -C out/Release -j 100 content_shell_apk | 46 ninja -C out/Release -j 100 content_shell_apk |
47 | 47 |
48 2. Build the "binary_size_tool" target from ../../build/all_android.gyp, e.g.: | 48 2. Build the "binary_size_tool" target from ../../build/all_android.gyp, e.g.: |
49 ninja -C out/Release binary_size_tool | 49 ninja -C out/Release binary_size_tool |
50 | 50 |
51 3. Run the tool specifying the library and the output report directory. | 51 3. Run the tool specifying the library and the output report directory. |
52 This command will run the analysis on the Content Shell native library for | 52 This command will run the analysis on the Content Shell native library for |
53 Android using the nm/addr2line binaries from the Android NDK for ARM, | 53 Android using the nm/addr2line binaries from the Android NDK for ARM, |
54 producing an HTMl report in /tmp/report: | 54 producing an HTML report in /tmp/report: |
55 tools/binary_size/run_binary_size_analysis.py \ | 55 tools/binary_size/run_binary_size_analysis.py \ |
56 --library out/Release/lib/libcontent_shell_content_view.so \ | 56 --library out/Release/lib/libcontent_shell_content_view.so \ |
57 --destdir /tmp/report \ | 57 --destdir /tmp/report \ |
58 --arch android-arm | 58 --arch android-arm |
59 | 59 |
60 Of course, there are additional options that you can see by running the tool | 60 Of course, there are additional options that you can see by running the tool |
61 with "--help". | 61 with "--help". |
62 | 62 |
63 This whole process takes about an hour on a modern (circa 2014) quad-core | 63 This whole process takes about an hour on a modern (circa 2014) quad-core |
64 machine. If you have LOTS of RAM, you can use the "--jobs" argument to | 64 machine. If you have LOTS of RAM, you can use the "--jobs" argument to |
(...skipping 15 matching lines...) Expand all Loading... |
80 The report is completely standalone. No external resources are required, so the | 80 The report is completely standalone. No external resources are required, so the |
81 report may be saved and viewed offline with no problems. | 81 report may be saved and viewed offline with no problems. |
82 | 82 |
83 -------------------------------------------------------------------------------- | 83 -------------------------------------------------------------------------------- |
84 Caveats | 84 Caveats |
85 -------------------------------------------------------------------------------- | 85 -------------------------------------------------------------------------------- |
86 The tool is not perfect and has several shortcomings: | 86 The tool is not perfect and has several shortcomings: |
87 | 87 |
88 * Not all space in the binary is accounted for. The cause is still under | 88 * Not all space in the binary is accounted for. The cause is still under |
89 investigation. | 89 investigation. |
| 90 * When dealing with inlining and such, the size cost is attributed to the |
| 91 resource in which the code gets inlined. Depending upon your goals for |
| 92 analysis, this may be either good or bad; fundamentally, the more trickery |
| 93 that the compiler and/or linker do, the less simple the relationship |
| 94 between the original source and the resultant binary. |
90 * The tool is partly written in Java, temporarily tying it to Android | 95 * The tool is partly written in Java, temporarily tying it to Android |
91 purely and solely because it needs Java build logic which is only defined | 96 purely and solely because it needs Java build logic which is only defined |
92 in the Android part of the build system. The Java portions need to be | 97 in the Android part of the build system. The Java portions need to be |
93 rewritten in Python so we can decouple from Android, or we need to find | 98 rewritten in Python so we can decouple from Android, or we need to find |
94 an alternative (readelf, linker maps, etc) to running nm/addr2line. | 99 an alternative (readelf, linker maps, etc) to running nm/addr2line. |
95 * The Java code assumes that the library file is within a Chromium release | 100 * The Java code assumes that the library file is within a Chromium release |
96 directory. This limits it to Chromium-based binaries only. | 101 directory. This limits it to Chromium-based binaries only. |
97 * The Java code has a hack to accurately identify the source of ICU data | 102 * The Java code has a hack to accurately identify the source of ICU data |
98 within the Chromium source tree due to missing symbols in the ICU ASM | 103 within the Chromium source tree due to missing size information in the ICU |
99 output. | 104 ASM output in some build variants. |
100 * The Python script assumes that arm-based and mips-based nm/addr2line | 105 * The Python script assumes that arm-based and mips-based nm/addr2line |
101 binaries exist in ../../third_party. This is true only when dealing with | 106 binaries exist in ../../third_party/android_tools/ndk/toolchains. This is |
102 Android and again limits the tool to Chromium-based binaries. | 107 true only when dealing with Android and again limits the tool to |
| 108 Chromium-based binaries. |
103 * The Python script uses build system variables to construct the classpath | 109 * The Python script uses build system variables to construct the classpath |
104 for running the Java code. | 110 for running the Java code. |
105 * The Javascript code in the HTML report Assumes code lives in Chromium for | 111 * The Javascript code in the HTML report Assumes code lives in Chromium for |
106 generated hyperlinks and will not hyperlink any file that starts with the | 112 generated hyperlinks and will not hyperlink any file that starts with the |
107 substring "out". | 113 substring "out". |
108 | 114 |
109 -------------------------------------------------------------------------------- | 115 -------------------------------------------------------------------------------- |
110 Feature Requests and Bug Reports | 116 Feature Requests and Bug Reports |
111 -------------------------------------------------------------------------------- | 117 -------------------------------------------------------------------------------- |
112 Please file bugs and feature requests here, making sure to use the label | 118 Please file bugs and feature requests here, making sure to use the label |
113 "Binary-Size-Tool": | 119 "Binary-Size-Tool": |
114 https://code.google.com/p/chromium/issues/entry?labels=Binary-Size-Tool | 120 https://code.google.com/p/chromium/issues/entry?labels=Binary-Size-Tool |
115 | 121 |
116 View all open issues here: | 122 View all open issues here: |
117 https://code.google.com/p/chromium/issues/list?can=2&q=label:Binary-Size-Tool | 123 https://code.google.com/p/chromium/issues/list?can=2&q=label:Binary-Size-Tool |
OLD | NEW |