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

Side by Side Diff: tools/unittests/ignition_perf_report_test.py

Issue 1783503002: [Interpreter] Add Ignition profile visualization tool. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@run-perf
Patch Set: Test symbol name regex w/ template instantiations. Created 4 years, 9 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
« tools/ignition_perf_report.py ('K') | « tools/ignition_perf_report.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2016 the V8 project authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import ignition_perf_report as ipr
6 import StringIO
7 import unittest
8
9
10 ## perf script test output.
11
12 PERF_SCRIPT_OUTPUT = """
13 # This line is a comment
14 # This should be ignored too
15 #
16 # cdefab01 aRandomSymbol::Name(to, be, ignored)
17
18 00000000 firstSymbol
19 00000123 secondSymbol
20
21 01234567 foo
22 abcdef76 BytecodeHandler:bar
23 76543210 baz
24
25 # Indentation shouldn't matter (neither should this line)
26
27 01234567 foo
28 abcdef76 BytecodeHandler:bar
29 76543210 baz
30
31 01234567 beep
32 abcdef76 BytecodeHandler:bar
33 76543210 baz
34
35 01234567 hello
36 abcdef76 Builtin:CompileLazy
37 76543210 world
38 11111111 BytecodeHandler:nope
39 """
40
41 ## hide_compile_time = False test data.
42
43 PERF_SCRIPT_YIELDED_CALLCHAINS = [
44 ["foo", "BytecodeHandler:bar"],
45 ["foo", "BytecodeHandler:bar"],
46 ["beep", "BytecodeHandler:bar"],
47 ["hello", "Builtin:CompileLazy", "world", "BytecodeHandler:nope"],
48 ]
49
50
51 CALLCHAINS_COUNTERS = [
52 ('BytecodeHandler:bar;foo', 2),
53 ('BytecodeHandler:bar;beep', 1),
54 ('BytecodeHandler:nope;world;Builtin:CompileLazy;hello', 1),
55 ]
56
57
58 HANDLER_SAMPLE_COUNTERS = [
59 ("bar", 3),
60 ("nope", 1),
61 ]
62
63
64 ## hide_compile_time = True test data.
65
66 PERF_SCRIPT_YIELDED_CALLCHAINS_HIDE_COMPILE = [
67 ["foo", "BytecodeHandler:bar"],
68 ["foo", "BytecodeHandler:bar"],
69 ["beep", "BytecodeHandler:bar"],
70 ]
71
72
73 CALLCHAINS_COUNTERS_HIDE_COMPILE = [
74 ('BytecodeHandler:bar;foo', 2),
75 ('BytecodeHandler:bar;beep', 1),
76 ]
77
78
79 HANDLER_SAMPLE_COUNTERS_HIDE_COMPILE = [
80 ("bar", 3),
81 ]
82
83 ## Regex test cases.
84
85 COMPILER_SYMBOLS = [
86 "Builtin:CompileLazy",
87 "Builtin:CompileOptimizedConcurrent",
88 "LazyCompile:foo",
89 "v8::internal::Compile::foo",
90 ]
91
92
93 SYMBOLS_AND_NAMES = [
94 ("foo::(anonymous namespace)::bar(baz)", "foo::(anonymous namespace)::bar"),
95 ("foo::bar<baz<beep>, blop>(hello, world)", "foo::bar<baz<beep>, blop>"),
96 ("hello(world)", "hello"),
97 ]
98
99
100 class IgnitionPerfReportTest(unittest.TestCase):
rmcilroy 2016/03/11 11:26:49 Are these tests run on the bots? If not they are p
101 def testYieldCollapsedCallchains(self):
102 perf_stream = StringIO.StringIO(PERF_SCRIPT_OUTPUT)
103 callchains = list(ipr.yield_collapsed_callchains(perf_stream, False))
104 self.assertListEqual(callchains, PERF_SCRIPT_YIELDED_CALLCHAINS)
105
106 def testYieldCollapsedCallchainsHideCompile(self):
107 perf_stream = StringIO.StringIO(PERF_SCRIPT_OUTPUT)
108 callchains = list(ipr.yield_collapsed_callchains(perf_stream, True))
109 self.assertListEqual(callchains,
110 PERF_SCRIPT_YIELDED_CALLCHAINS_HIDE_COMPILE)
111
112 def testCountCallchains(self):
113 counters = ipr.count_callchains(PERF_SCRIPT_YIELDED_CALLCHAINS)
114 self.assertItemsEqual(counters, CALLCHAINS_COUNTERS)
rmcilroy 2016/03/11 11:26:49 nit - could you make CALLCHAINS_COUNTERS a constan
Stefano Sanfilippo 2016/03/11 16:33:51 I'd prefer to keep them all outside, in case we ad
rmcilroy 2016/03/14 12:26:52 I disagree - the tests should be easy to reason ab
Stefano Sanfilippo 2016/03/14 13:14:20 I see. Done.
115
116 def testCountCallchainsHideCompile(self):
117 counters = ipr.count_callchains(PERF_SCRIPT_YIELDED_CALLCHAINS_HIDE_COMPILE)
118 self.assertItemsEqual(counters, CALLCHAINS_COUNTERS_HIDE_COMPILE)
119
120 def testCountHandlerSamples(self):
121 counters = ipr.count_handler_samples(PERF_SCRIPT_YIELDED_CALLCHAINS)
122 self.assertItemsEqual(counters, HANDLER_SAMPLE_COUNTERS)
123
124 def testCountHandlerSamplesHideCompile(self):
125 counters = ipr.count_handler_samples(
126 PERF_SCRIPT_YIELDED_CALLCHAINS_HIDE_COMPILE)
127 self.assertItemsEqual(counters, HANDLER_SAMPLE_COUNTERS_HIDE_COMPILE)
128
129 def testCompilerSymbolsRegex(self):
130 for compiler_symbol in COMPILER_SYMBOLS:
131 self.assertTrue(ipr.COMPILER_SYMBOLS_RE.match(compiler_symbol))
132
133 def testSymbolNameRegex(self):
134 for symbol, name in SYMBOLS_AND_NAMES:
135 self.assertEqual(ipr.SYMBOL_NAME_RE.match(symbol).group(1), name)
OLDNEW
« tools/ignition_perf_report.py ('K') | « tools/ignition_perf_report.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698