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

Side by Side Diff: tools/cygprofile/patch_orderfile_unittest.py

Issue 886563002: Switch from nm to objdump for the cygprofile tools. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 10 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/python 1 #!/usr/bin/python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 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 unittest
7
6 import patch_orderfile 8 import patch_orderfile
7 import unittest 9 import symbol_extractor
8 10
9 11
10 class TestPatchOrderFile(unittest.TestCase): 12 class TestPatchOrderFile(unittest.TestCase):
11 def testRemoveClone(self): 13 def testRemoveClone(self):
12 no_clone = "this.does.not.contain.clone" 14 no_clone = "this.does.not.contain.clone"
13 self.assertEquals(no_clone, patch_orderfile._RemoveClone(no_clone)) 15 self.assertEquals(no_clone, patch_orderfile._RemoveClone(no_clone))
14 with_clone = "this.does.contain.clone." 16 with_clone = "this.does.contain.clone."
15 self.assertEquals( 17 self.assertEquals(
16 "this.does.contain", patch_orderfile._RemoveClone(with_clone)) 18 "this.does.contain", patch_orderfile._RemoveClone(with_clone))
17 19
18 def testGetSymbolInfosFromStreamWithSize(self): 20 def testAliasClonedSymbols(self):
19 lines = [ 21 symbol_infos = [
20 "00210d59 00000002 t _ZN34BrowserPluginHostMsg_Attach_ParamsD2Ev"] 22 symbol_extractor.SymbolInfo(name='aSymbol', offset=0x42, size=0x12,
21 test_name = "_ZN34BrowserPluginHostMsg_Attach_ParamsD2Ev" 23 section='.text'),
22 test_offset = 0x210d59 24 symbol_extractor.SymbolInfo(name='aSymbol.clone.', offset=8, size=1,
25 section='.text')]
23 (offset_to_symbol_infos, name_to_symbol_infos) = \ 26 (offset_to_symbol_infos, name_to_symbol_infos) = \
24 patch_orderfile._GetSymbolInfosFromStream(lines) 27 patch_orderfile._GroupSymbolInfos(symbol_infos)
28 self.assertEquals(len(offset_to_symbol_infos), 2)
29 for i in range(2):
30 s = symbol_infos[i]
31 matching = offset_to_symbol_infos[s.offset][0]
32 self.assertEquals(matching.offset, s.offset)
33 self.assertEquals(matching.size, s.size)
34 self.assertEquals(len(name_to_symbol_infos), 1)
35 self.assertEquals(len(name_to_symbol_infos['aSymbol']), 2)
36
37 def testGroupSymbolsByOffset(self):
38 symbol_infos = (
39 symbol_extractor.SymbolInfo(name='aSymbol', offset=0x42, size=0x12,
40 section='.text'),
41 symbol_extractor.SymbolInfo(name='anotherSymbol', offset=0x42, size=1,
42 section='.text'))
43 (offset_to_symbol_infos, _) = \
44 patch_orderfile._GroupSymbolInfos(symbol_infos)
25 self.assertEquals(len(offset_to_symbol_infos), 1) 45 self.assertEquals(len(offset_to_symbol_infos), 1)
26 self.assertEquals(len(name_to_symbol_infos), 1) 46 self.assertEquals(tuple(offset_to_symbol_infos[0x42]), symbol_infos)
27 self.assertIn(test_name, name_to_symbol_infos)
28 self.assertIn(test_offset, offset_to_symbol_infos)
29
30 self.assertEquals(len(name_to_symbol_infos[test_name]), 1)
31 s = name_to_symbol_infos[test_name][0]
32 self.assertEquals(test_offset, s.offset)
33 self.assertEquals(2, s.size)
34 self.assertEquals(test_name, s.name)
35
36 self.assertEquals(len(offset_to_symbol_infos[test_offset]), 1)
37 s = offset_to_symbol_infos[test_offset][0]
38 self.assertEquals(test_offset, s.offset)
39 self.assertEquals(2, s.size)
40 self.assertEquals(test_name, s.name)
41
42 def testGetSymbolInfosFromStreamWithoutSize(self):
43 lines = [
44 "0070ee8c T WebRtcSpl_ComplexBitReverse"]
45 test_name = "WebRtcSpl_ComplexBitReverse"
46 test_offset = 0x70ee8c
47 (offset_to_symbol_infos, name_to_symbol_infos) = \
48 patch_orderfile._GetSymbolInfosFromStream(lines)
49 self.assertEquals(len(offset_to_symbol_infos), 1)
50 self.assertEquals(len(name_to_symbol_infos), 1)
51 self.assertIn(test_name, name_to_symbol_infos)
52 self.assertIn(test_offset, offset_to_symbol_infos)
53
54 self.assertEquals(len(name_to_symbol_infos[test_name]), 1)
55 s = name_to_symbol_infos[test_name][0]
56 self.assertEquals(test_offset, s.offset)
57 self.assertEquals(-1, s.size)
58 self.assertEquals(test_name, s.name)
59
60 self.assertEquals(len(offset_to_symbol_infos[test_offset]), 1)
61 s = offset_to_symbol_infos[test_offset][0]
62 self.assertEquals(test_offset, s.offset)
63 self.assertEquals(-1, s.size)
64 self.assertEquals(test_name, s.name)
65
66 def testGetSymbolsFromStream(self):
67 lines = [".text.startup.",
68 ".text.with.a.prefix",
69 "",
70 "_ZN2v88internal33HEnvironmentLivenessAnalysisPhase3RunEv",
71 ".text",
72 ".text.*"]
73 names = patch_orderfile._GetSymbolsFromStream(lines)
74 self.assertEquals(len(names), 2)
75 self.assertEquals(
76 names[0], "with.a.prefix")
77 self.assertEquals(
78 names[1], "_ZN2v88internal33HEnvironmentLivenessAnalysisPhase3RunEv")
79
80 47
81 def testExpandSymbols(self): 48 def testExpandSymbols(self):
82 symbol_name = "dummySymbol" 49 symbol_name = "dummySymbol"
83 symbol_name2 = "other" 50 symbol_name2 = "other"
84 profiled_symbol_names = [symbol_name, "symbolThatShouldntMatch"] 51 profiled_symbol_names = [symbol_name, "symbolThatShouldntMatch"]
85 name_to_symbol_infos = {symbol_name: [ 52 name_to_symbol_infos = {symbol_name: [
86 patch_orderfile.SymbolInfo(0x42, 0x12, symbol_name)]} 53 symbol_extractor.SymbolInfo(symbol_name, 0x42, 0x12,
54 section='.text')]}
87 offset_to_symbol_infos = { 55 offset_to_symbol_infos = {
88 0x42: [patch_orderfile.SymbolInfo(0x42, 0x12, symbol_name), 56 0x42: [symbol_extractor.SymbolInfo(symbol_name, 0x42, 0x12,
89 patch_orderfile.SymbolInfo(0x42, 0x12, symbol_name2)]} 57 section='.text'),
58 symbol_extractor.SymbolInfo(symbol_name2, 0x42, 0x12,
59 section='.text')]}
90 symbol_names = patch_orderfile._ExpandSymbols( 60 symbol_names = patch_orderfile._ExpandSymbols(
91 profiled_symbol_names, name_to_symbol_infos, offset_to_symbol_infos) 61 profiled_symbol_names, name_to_symbol_infos, offset_to_symbol_infos)
92 self.assertEquals(len(symbol_names), 3) 62 self.assertEquals(len(symbol_names), 3)
93 self.assertEquals(symbol_names[0], symbol_name) 63 self.assertEquals(symbol_names[0], symbol_name)
94 self.assertEquals(symbol_names[1], symbol_name2) 64 self.assertEquals(symbol_names[1], symbol_name2)
95 self.assertEquals(symbol_names[2], "symbolThatShouldntMatch") 65 self.assertEquals(symbol_names[2], "symbolThatShouldntMatch")
96 66
97 def testPrintSymbolWithPrefixes(self): 67 def testPrintSymbolWithPrefixes(self):
98 class FakeOutputFile(object): 68 class FakeOutputFile(object):
99 def __init__(self): 69 def __init__(self):
100 self.output = '' 70 self.output = ''
101 def write(self, s): 71 def write(self, s):
102 self.output = self.output + s 72 self.output = self.output + s
103 test_symbol = "dummySymbol" 73 test_symbol = "dummySymbol"
104 symbol_names = [test_symbol] 74 symbol_names = [test_symbol]
105 fake_output = FakeOutputFile() 75 fake_output = FakeOutputFile()
106 patch_orderfile._PrintSymbolsWithPrefixes(symbol_names, fake_output) 76 patch_orderfile._PrintSymbolsWithPrefixes(symbol_names, fake_output)
107 expected_output = """.text.startup.dummySymbol 77 expected_output = """.text.startup.dummySymbol
108 .text.hot.dummySymbol 78 .text.hot.dummySymbol
109 .text.unlikely.dummySymbol 79 .text.unlikely.dummySymbol
110 .text.dummySymbol 80 .text.dummySymbol
111 """ 81 """
112 self.assertEquals(fake_output.output, expected_output) 82 self.assertEquals(fake_output.output, expected_output)
113 83
114 84
115 if __name__ == "__main__": 85 if __name__ == "__main__":
116 unittest.main() 86 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698