Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Side by Side Diff: tools/binary_size/libsupersize/integration_test.py

Issue 2870743003: supersize: Add symbol.template_name, and strip <>s from symbol.name (Closed)
Patch Set: review comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2017 The Chromium Authors. All rights reserved. 2 # Copyright 2017 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 import contextlib 6 import contextlib
7 import copy 7 import copy
8 import difflib 8 import difflib
9 import glob 9 import glob
10 import itertools 10 import itertools
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 else: 114 else:
115 args += ['--no-source-paths'] 115 args += ['--no-source-paths']
116 if use_elf: 116 if use_elf:
117 args += ['--elf-file', _TEST_ELF_PATH] 117 args += ['--elf-file', _TEST_ELF_PATH]
118 _RunApp('archive', args, debug_measures=debug_measures) 118 _RunApp('archive', args, debug_measures=debug_measures)
119 size_info = archive.LoadAndPostProcessSizeInfo(temp_file.name) 119 size_info = archive.LoadAndPostProcessSizeInfo(temp_file.name)
120 # Check that saving & loading is the same as directly parsing the .map. 120 # Check that saving & loading is the same as directly parsing the .map.
121 expected_size_info = self._CloneSizeInfo( 121 expected_size_info = self._CloneSizeInfo(
122 use_output_directory=use_output_directory, use_elf=use_elf) 122 use_output_directory=use_output_directory, use_elf=use_elf)
123 self.assertEquals(expected_size_info.metadata, size_info.metadata) 123 self.assertEquals(expected_size_info.metadata, size_info.metadata)
124 expected = list(describe.GenerateLines(expected_size_info.Cluster())) 124 expected = list(describe.GenerateLines(expected_size_info.Clustered()))
125 actual = list(describe.GenerateLines(size_info.Cluster())) 125 actual = list(describe.GenerateLines(size_info.Clustered()))
126 self.assertEquals(expected, actual) 126 self.assertEquals(expected, actual)
127 127
128 sym_strs = (repr(sym) for sym in size_info.symbols) 128 sym_strs = (repr(sym) for sym in size_info.symbols)
129 stats = describe.DescribeSizeInfoCoverage(size_info) 129 stats = describe.DescribeSizeInfoCoverage(size_info)
130 if size_info.metadata: 130 if size_info.metadata:
131 metadata = describe.DescribeMetadata(size_info.metadata) 131 metadata = describe.DescribeMetadata(size_info.metadata)
132 else: 132 else:
133 metadata = [] 133 metadata = []
134 return itertools.chain(metadata, stats, sym_strs) 134 return itertools.chain(metadata, stats, sym_strs)
135 135
(...skipping 16 matching lines...) Expand all
152 @_CompareWithGolden() 152 @_CompareWithGolden()
153 def test_Console(self): 153 def test_Console(self):
154 with tempfile.NamedTemporaryFile(suffix='.size') as size_file, \ 154 with tempfile.NamedTemporaryFile(suffix='.size') as size_file, \
155 tempfile.NamedTemporaryFile(suffix='.txt') as output_file: 155 tempfile.NamedTemporaryFile(suffix='.txt') as output_file:
156 file_format.SaveSizeInfo(self._CloneSizeInfo(), size_file.name) 156 file_format.SaveSizeInfo(self._CloneSizeInfo(), size_file.name)
157 query = [ 157 query = [
158 'ShowExamples()', 158 'ShowExamples()',
159 'ExpandRegex("_foo_")', 159 'ExpandRegex("_foo_")',
160 'canned_queries.CategorizeGenerated()', 160 'canned_queries.CategorizeGenerated()',
161 'canned_queries.CategorizeByChromeComponent()', 161 'canned_queries.CategorizeByChromeComponent()',
162 'canned_queries.TemplatesByName()',
162 'Print(size_info, to_file=%r)' % output_file.name, 163 'Print(size_info, to_file=%r)' % output_file.name,
163 ] 164 ]
164 ret = _RunApp('console', [size_file.name, '--query', '; '.join(query)]) 165 ret = _RunApp('console', [size_file.name, '--query', '; '.join(query)])
165 with open(output_file.name) as f: 166 with open(output_file.name) as f:
166 ret.extend(l.rstrip() for l in f) 167 ret.extend(l.rstrip() for l in f)
167 return ret 168 return ret
168 169
169 @_CompareWithGolden() 170 @_CompareWithGolden()
170 def test_Diff_NullDiff(self): 171 def test_Diff_NullDiff(self):
171 with tempfile.NamedTemporaryFile(suffix='.size') as temp_file: 172 with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
172 file_format.SaveSizeInfo(self._CloneSizeInfo(), temp_file.name) 173 file_format.SaveSizeInfo(self._CloneSizeInfo(), temp_file.name)
173 return _RunApp('diff', [temp_file.name, temp_file.name]) 174 return _RunApp('diff', [temp_file.name, temp_file.name])
174 175
175 @_CompareWithGolden() 176 @_CompareWithGolden()
176 def test_Diff_Basic(self): 177 def test_Diff_Basic(self):
177 size_info1 = self._CloneSizeInfo(use_elf=False) 178 size_info1 = self._CloneSizeInfo(use_elf=False)
178 size_info2 = self._CloneSizeInfo(use_elf=False) 179 size_info2 = self._CloneSizeInfo(use_elf=False)
179 size_info1.metadata = {"foo": 1, "bar": [1,2,3], "baz": "yes"} 180 size_info1.metadata = {"foo": 1, "bar": [1,2,3], "baz": "yes"}
180 size_info2.metadata = {"foo": 1, "bar": [1,3], "baz": "yes"} 181 size_info2.metadata = {"foo": 1, "bar": [1,3], "baz": "yes"}
181 size_info1.symbols -= size_info1.symbols[:2] 182 size_info1.symbols -= size_info1.symbols[:2]
182 size_info2.symbols -= size_info2.symbols[-3:] 183 size_info2.symbols -= size_info2.symbols[-3:]
183 size_info1.symbols[1].size -= 10 184 size_info1.symbols[1].size -= 10
184 d = diff.Diff(size_info1, size_info2) 185 d = diff.Diff(size_info1, size_info2)
185 d.symbols = d.symbols.Cluster().Sorted() 186 d.symbols = d.symbols.Clustered().Sorted()
186 return describe.GenerateLines(d, verbose=True) 187 return describe.GenerateLines(d, verbose=True)
187 188
188 def test_Diff_Aliases1(self): 189 def test_Diff_Aliases1(self):
189 size_info1 = self._CloneSizeInfo() 190 size_info1 = self._CloneSizeInfo()
190 size_info2 = self._CloneSizeInfo() 191 size_info2 = self._CloneSizeInfo()
191 192
192 # Removing 1 alias should not change the size. 193 # Removing 1 alias should not change the size.
193 a1, _, _ = ( 194 a1, _, _ = (
194 size_info2.symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases) 195 size_info2.symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases)
195 size_info2.symbols -= [a1] 196 size_info2.symbols -= [a1]
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 models.Symbol(S, 55, name='.L__bar_1195', object_path='b'), # 5 252 models.Symbol(S, 55, name='.L__bar_1195', object_path='b'), # 5
252 ] 253 ]
253 size_info2.symbols += [ 254 size_info2.symbols += [
254 models.Symbol(S, 33, name='.L__unnamed_2195', object_path='b'), # 3 255 models.Symbol(S, 33, name='.L__unnamed_2195', object_path='b'), # 3
255 models.Symbol(S, 11, name='.L__unnamed_2194', object_path='a'), # 1 256 models.Symbol(S, 11, name='.L__unnamed_2194', object_path='a'), # 1
256 models.Symbol(S, 22, name='.L__unnamed_2193', object_path='a'), # 2 257 models.Symbol(S, 22, name='.L__unnamed_2193', object_path='a'), # 2
257 models.Symbol(S, 44, name='.L__bar_2195', object_path='b'), # 4 258 models.Symbol(S, 44, name='.L__bar_2195', object_path='b'), # 4
258 models.Symbol(S, 55, name='.L__bar_295', object_path='b'), # 5 259 models.Symbol(S, 55, name='.L__bar_295', object_path='b'), # 5
259 ] 260 ]
260 d = diff.Diff(size_info1, size_info2) 261 d = diff.Diff(size_info1, size_info2)
261 d.symbols = d.symbols.Cluster().Sorted() 262 d.symbols = d.symbols.Clustered().Sorted()
262 self.assertEquals(d.symbols.added_count, 0) 263 self.assertEquals(d.symbols.added_count, 0)
263 self.assertEquals(d.symbols.size, 0) 264 self.assertEquals(d.symbols.size, 0)
264 265
265 266
266 @_CompareWithGolden() 267 @_CompareWithGolden()
267 def test_FullDescription(self): 268 def test_FullDescription(self):
268 return describe.GenerateLines(self._CloneSizeInfo().Cluster(), 269 return describe.GenerateLines(self._CloneSizeInfo().Clustered(),
269 recursive=True, verbose=True) 270 recursive=True, verbose=True)
270 271
271 @_CompareWithGolden() 272 @_CompareWithGolden()
272 def test_SymbolGroupMethods(self): 273 def test_SymbolGroupMethods(self):
273 all_syms = self._CloneSizeInfo().symbols 274 all_syms = self._CloneSizeInfo().symbols
274 global_syms = all_syms.WhereNameMatches('GLOBAL') 275 global_syms = all_syms.WhereNameMatches('GLOBAL')
275 # Tests Filter(), Inverted(), and __sub__(). 276 # Tests Filter(), Inverted(), and __sub__().
276 non_global_syms = global_syms.Inverted() 277 non_global_syms = global_syms.Inverted()
277 self.assertEqual(non_global_syms, (all_syms - global_syms)) 278 self.assertEqual(non_global_syms, (all_syms - global_syms))
278 # Tests Sorted() and __add__(). 279 # Tests Sorted() and __add__().
279 self.assertEqual(all_syms.Sorted(), 280 self.assertEqual(all_syms.Sorted(),
280 (global_syms + non_global_syms).Sorted()) 281 (global_syms + non_global_syms).Sorted())
281 # Tests GroupByNamespace() and __len__(). 282 # Tests GroupedByName() and __len__().
282 return itertools.chain( 283 return itertools.chain(
283 ['GroupByNamespace()'], 284 ['GroupedByName()'],
284 describe.GenerateLines(all_syms.GroupByNamespace()), 285 describe.GenerateLines(all_syms.GroupedByName()),
285 ['GroupByNamespace(depth=1)'], 286 ['GroupedByName(depth=1)'],
286 describe.GenerateLines(all_syms.GroupByNamespace(depth=1)), 287 describe.GenerateLines(all_syms.GroupedByName(depth=1)),
287 ['GroupByNamespace(depth=1, fallback=None)'], 288 ['GroupedByName(depth=-1)'],
288 describe.GenerateLines(all_syms.GroupByNamespace(depth=1, 289 describe.GenerateLines(all_syms.GroupedByName(depth=-1)),
289 fallback=None)), 290 ['GroupedByName(depth=1, min_count=2)'],
290 ['GroupByNamespace(depth=1, min_count=2)'], 291 describe.GenerateLines(all_syms.GroupedByName(depth=1, min_count=2)),
291 describe.GenerateLines(all_syms.GroupByNamespace(depth=1, min_count=2)),
292 ) 292 )
293 293
294 294
295 def main(): 295 def main():
296 argv = sys.argv 296 argv = sys.argv
297 if len(argv) > 1 and argv[1] == '--update': 297 if len(argv) > 1 and argv[1] == '--update':
298 argv.pop(0) 298 argv.pop(0)
299 global update_goldens 299 global update_goldens
300 update_goldens = True 300 update_goldens = True
301 for f in glob.glob(os.path.join(_TEST_DATA_DIR, '*.golden')): 301 for f in glob.glob(os.path.join(_TEST_DATA_DIR, '*.golden')):
302 os.unlink(f) 302 os.unlink(f)
303 303
304 unittest.main(argv=argv, verbosity=2) 304 unittest.main(argv=argv, verbosity=2)
305 305
306 306
307 if __name__ == '__main__': 307 if __name__ == '__main__':
308 main() 308 main()
OLDNEW
« no previous file with comments | « tools/binary_size/libsupersize/html_report.py ('k') | tools/binary_size/libsupersize/linker_map_parser.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698