OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Describe the size difference of two binaries. | 6 """Describe the size difference of two binaries. |
7 | 7 |
8 Generates a description of the size difference of two binaries based | 8 Generates a description of the size difference of two binaries based |
9 on the difference of the size of various symbols. | 9 on the difference of the size of various symbols. |
10 | 10 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 | 59 |
60 cache1 = {} | 60 cache1 = {} |
61 cache2 = {} | 61 cache2 = {} |
62 # Make a map of (file, symbol_type) : (symbol_name, symbol_size) | 62 # Make a map of (file, symbol_type) : (symbol_name, symbol_size) |
63 for cache, symbols in ((cache1, symbols1), (cache2, symbols2)): | 63 for cache, symbols in ((cache1, symbols1), (cache2, symbols2)): |
64 for symbol_name, symbol_type, symbol_size, file_path in symbols: | 64 for symbol_name, symbol_type, symbol_size, file_path in symbols: |
65 if 'vtable for ' in symbol_name: | 65 if 'vtable for ' in symbol_name: |
66 symbol_type = '@' # hack to categorize these separately | 66 symbol_type = '@' # hack to categorize these separately |
67 if file_path: | 67 if file_path: |
68 file_path = os.path.normpath(file_path) | 68 file_path = os.path.normpath(file_path) |
| 69 if sys.platform.startswith('win'): |
| 70 file_path = file_path.replace('\\', '/') |
69 else: | 71 else: |
70 file_path = '(No Path)' | 72 file_path = '(No Path)' |
71 key = (file_path, symbol_type) | 73 key = (file_path, symbol_type) |
72 bucket = cache.setdefault(key, {}) | 74 bucket = cache.setdefault(key, {}) |
73 size_list = bucket.setdefault(symbol_name, []) | 75 size_list = bucket.setdefault(symbol_name, []) |
74 size_list.append(symbol_size) | 76 size_list.append(symbol_size) |
75 | 77 |
76 # Now diff them. We iterate over the elements in cache1. For each symbol | 78 # Now diff them. We iterate over the elements in cache1. For each symbol |
77 # that we find in cache2, we record whether it was deleted, changed, or | 79 # that we find in cache2, we record whether it was deleted, changed, or |
78 # unchanged. We then remove it from cache2; all the symbols that remain | 80 # unchanged. We then remove it from cache2; all the symbols that remain |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 with file(path, 'r') as nm_input: | 353 with file(path, 'r') as nm_input: |
352 if opts.verbose: | 354 if opts.verbose: |
353 print 'parsing ' + path + '...' | 355 print 'parsing ' + path + '...' |
354 symbols.append(list(binary_size_utils.ParseNm(nm_input))) | 356 symbols.append(list(binary_size_utils.ParseNm(nm_input))) |
355 (added, removed, changed, unchanged) = Compare(symbols[0], symbols[1]) | 357 (added, removed, changed, unchanged) = Compare(symbols[0], symbols[1]) |
356 CrunchStats(added, removed, changed, unchanged, | 358 CrunchStats(added, removed, changed, unchanged, |
357 opts.showsources | opts.showsymbols, opts.showsymbols) | 359 opts.showsources | opts.showsymbols, opts.showsymbols) |
358 | 360 |
359 if __name__ == '__main__': | 361 if __name__ == '__main__': |
360 sys.exit(main()) | 362 sys.exit(main()) |
OLD | NEW |