1a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Copyright 2009 the V8 project authors. All rights reserved.
2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without
3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are
4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met:
5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//
6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Redistributions of source code must retain the above copyright
7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       notice, this list of conditions and the following disclaimer.
8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Redistributions in binary form must reproduce the above
9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       copyright notice, this list of conditions and the following
10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       disclaimer in the documentation and/or other materials provided
11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       with the distribution.
12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Neither the name of Google Inc. nor the names of its
13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       contributors may be used to endorse or promote products derived
14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       from this software without specific prior written permission.
15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//
16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Load implementations from <project root>/tools.
29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Files: tools/splaytree.js tools/codemap.js tools/csvparser.js
30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Files: tools/consarray.js tools/profile.js tools/profile_view.js
31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Files: tools/logreader.js tools/tickprocessor.js
32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Env: TEST_FILE_NAME
33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block(function testArgumentsProcessor() {
36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var p_default = new ArgumentsProcessor([]);
37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(p_default.parse());
38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(ArgumentsProcessor.DEFAULTS, p_default.result());
39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var p_logFile = new ArgumentsProcessor(['logfile.log']);
41a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(p_logFile.parse());
42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals('logfile.log', p_logFile.result().logFileName);
43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var p_platformAndLog = new ArgumentsProcessor(['--windows', 'winlog.log']);
45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(p_platformAndLog.parse());
46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals('windows', p_platformAndLog.result().platform);
47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals('winlog.log', p_platformAndLog.result().logFileName);
48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
49a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var p_flags = new ArgumentsProcessor(['--gc', '--separate-ic']);
50a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(p_flags.parse());
51a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(TickProcessor.VmStates.GC, p_flags.result().stateFilter);
52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(p_flags.result().separateIc);
53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
54a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var p_nmAndLog = new ArgumentsProcessor(['--nm=mn', 'nmlog.log']);
55a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(p_nmAndLog.parse());
56a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals('mn', p_nmAndLog.result().nm);
57a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals('nmlog.log', p_nmAndLog.result().logFileName);
58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var p_bad = new ArgumentsProcessor(['--unknown', 'badlog.log']);
60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertFalse(p_bad.parse());
61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block})();
62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block(function testUnixCppEntriesProvider() {
65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var oldLoadSymbols = UnixCppEntriesProvider.prototype.loadSymbols;
66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // shell executable
68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  UnixCppEntriesProvider.prototype.loadSymbols = function(libName) {
69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    this.symbols = [[
70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '         U operator delete[](void*)@@GLIBCXX_3.4',
71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '08049790 T _init',
72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '08049f50 T _start',
73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '08139150 00000b4b t v8::internal::Runtime_StringReplaceRegExpWithString(v8::internal::Arguments)',
74a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '08139ca0 000003f1 T v8::internal::Runtime::GetElementOrCharAt(v8::internal::Handle<v8::internal::Object>, unsigned int)',
75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '0813a0b0 00000855 t v8::internal::Runtime_DebugGetPropertyDetails(v8::internal::Arguments)',
76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '0818b220 00000036 W v8::internal::RegExpMacroAssembler::CheckPosition(int, v8::internal::Label*)',
77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '         w __gmon_start__',
78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '081f08a0 00000004 B stdout\n'
79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    ].join('\n'), ''];
80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
81a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
82a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var shell_prov = new UnixCppEntriesProvider();
83a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var shell_syms = [];
84a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  shell_prov.parseVmSymbols('shell', 0x08048000, 0x081ee000,
85a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        shell_syms.push(Array.prototype.slice.apply(arguments, [0]));
87a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
88a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
89a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [['_init', 0x08049790, 0x08049f50],
90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['_start', 0x08049f50, 0x08139150],
91a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::Runtime_StringReplaceRegExpWithString(v8::internal::Arguments)', 0x08139150, 0x08139150 + 0xb4b],
92a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::Runtime::GetElementOrCharAt(v8::internal::Handle<v8::internal::Object>, unsigned int)', 0x08139ca0, 0x08139ca0 + 0x3f1],
93a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::Runtime_DebugGetPropertyDetails(v8::internal::Arguments)', 0x0813a0b0, 0x0813a0b0 + 0x855],
94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::RegExpMacroAssembler::CheckPosition(int, v8::internal::Label*)', 0x0818b220, 0x0818b220 + 0x36]],
95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      shell_syms);
96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // libc library
98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  UnixCppEntriesProvider.prototype.loadSymbols = function(libName) {
99a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    this.symbols = [[
100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '000162a0 00000005 T __libc_init_first',
101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0002a5f0 0000002d T __isnan',
102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0002a5f0 0000002d W isnan',
103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0002aaa0 0000000d W scalblnf',
104a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0002aaa0 0000000d W scalbnf',
105a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0011a340 00000048 T __libc_thread_freeres',
106a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '00128860 00000024 R _itoa_lower_digits\n'].join('\n'), ''];
107a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
108a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var libc_prov = new UnixCppEntriesProvider();
109a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var libc_syms = [];
110a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  libc_prov.parseVmSymbols('libc', 0xf7c5c000, 0xf7da5000,
111a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
112a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        libc_syms.push(Array.prototype.slice.apply(arguments, [0]));
113a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
114a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var libc_ref_syms = [['__libc_init_first', 0x000162a0, 0x000162a0 + 0x5],
115a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['__isnan', 0x0002a5f0, 0x0002a5f0 + 0x2d],
116a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['scalblnf', 0x0002aaa0, 0x0002aaa0 + 0xd],
117a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['__libc_thread_freeres', 0x0011a340, 0x0011a340 + 0x48]];
118a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  for (var i = 0; i < libc_ref_syms.length; ++i) {
119a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    libc_ref_syms[i][1] += 0xf7c5c000;
120a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    libc_ref_syms[i][2] += 0xf7c5c000;
121a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
122a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(libc_ref_syms, libc_syms);
123a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
124a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  UnixCppEntriesProvider.prototype.loadSymbols = oldLoadSymbols;
125a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block})();
126a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
127a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
128a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block(function testMacCppEntriesProvider() {
129a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var oldLoadSymbols = MacCppEntriesProvider.prototype.loadSymbols;
130a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
131a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // shell executable
132a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  MacCppEntriesProvider.prototype.loadSymbols = function(libName) {
133a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    this.symbols = [[
134a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '         U operator delete[]',
135a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '00001000 A __mh_execute_header',
136a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '00001b00 T start',
137a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '00001b40 t dyld_stub_binding_helper',
138a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '0011b710 T v8::internal::RegExpMacroAssembler::CheckPosition',
139a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '00134250 t v8::internal::Runtime_StringReplaceRegExpWithString',
140a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '00137220 T v8::internal::Runtime::GetElementOrCharAt',
141a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '00137400 t v8::internal::Runtime_DebugGetPropertyDetails',
142a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '001c1a80 b _private_mem\n'
143a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    ].join('\n'), ''];
144a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
145a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
146a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var shell_prov = new MacCppEntriesProvider();
147a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var shell_syms = [];
148a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  shell_prov.parseVmSymbols('shell', 0x00001b00, 0x00163156,
149a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
150a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        shell_syms.push(Array.prototype.slice.apply(arguments, [0]));
151a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
152a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
153a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [['start', 0x00001b00, 0x00001b40],
154a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['dyld_stub_binding_helper', 0x00001b40, 0x0011b710],
155a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::RegExpMacroAssembler::CheckPosition', 0x0011b710, 0x00134250],
156a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::Runtime_StringReplaceRegExpWithString', 0x00134250, 0x00137220],
157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::Runtime::GetElementOrCharAt', 0x00137220, 0x00137400],
158a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::internal::Runtime_DebugGetPropertyDetails', 0x00137400, 0x00163156]],
159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      shell_syms);
160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
161a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // stdc++ library
162a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  MacCppEntriesProvider.prototype.loadSymbols = function(libName) {
163a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    this.symbols = [[
164a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0000107a T __gnu_cxx::balloc::__mini_vector<std::pair<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*, __gnu_cxx::bitmap_allocator<char>::_Alloc_block*> >::__mini_vector',
165a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0002c410 T std::basic_streambuf<char, std::char_traits<char> >::pubseekoff',
166a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '0002c488 T std::basic_streambuf<char, std::char_traits<char> >::pubseekpos',
167a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        '000466aa T ___cxa_pure_virtual\n'].join('\n'), ''];
168a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
169a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var stdc_prov = new MacCppEntriesProvider();
170a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var stdc_syms = [];
171a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  stdc_prov.parseVmSymbols('stdc++', 0x95728fb4, 0x95770005,
172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
173a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        stdc_syms.push(Array.prototype.slice.apply(arguments, [0]));
174a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
175a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var stdc_ref_syms = [['__gnu_cxx::balloc::__mini_vector<std::pair<__gnu_cxx::bitmap_allocator<char>::_Alloc_block*, __gnu_cxx::bitmap_allocator<char>::_Alloc_block*> >::__mini_vector', 0x0000107a, 0x0002c410],
176a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['std::basic_streambuf<char, std::char_traits<char> >::pubseekoff', 0x0002c410, 0x0002c488],
177a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['std::basic_streambuf<char, std::char_traits<char> >::pubseekpos', 0x0002c488, 0x000466aa],
178a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['___cxa_pure_virtual', 0x000466aa, 0x95770005 - 0x95728fb4]];
179a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  for (var i = 0; i < stdc_ref_syms.length; ++i) {
180a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    stdc_ref_syms[i][1] += 0x95728fb4;
181a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    stdc_ref_syms[i][2] += 0x95728fb4;
182a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
183a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(stdc_ref_syms, stdc_syms);
184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
185a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  MacCppEntriesProvider.prototype.loadSymbols = oldLoadSymbols;
186a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block})();
187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block(function testWindowsCppEntriesProvider() {
190a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var oldLoadSymbols = WindowsCppEntriesProvider.prototype.loadSymbols;
191a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
192a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  WindowsCppEntriesProvider.prototype.loadSymbols = function(libName) {
193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    this.symbols = [
194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' Start         Length     Name                   Class',
195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000000 000ac902H .text                   CODE',
196a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:000ac910 000005e2H .text$yc                CODE',
197a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      '  Address         Publics by Value              Rva+Base       Lib:Object',
198a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0000:00000000       __except_list              00000000     <absolute>',
199a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000000       ?ReadFile@@YA?AV?$Handle@VString@v8@@@v8@@PBD@Z 00401000 f   shell.obj',
200a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:000000a0       ?Print@@YA?AV?$Handle@VValue@v8@@@v8@@ABVArguments@2@@Z 004010a0 f   shell.obj',
201a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00001230       ??1UTF8Buffer@internal@v8@@QAE@XZ 00402230 f   v8_snapshot:scanner.obj',
202a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00001230       ??1Utf8Value@String@v8@@QAE@XZ 00402230 f   v8_snapshot:api.obj',
203a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:000954ba       __fclose_nolock            004964ba f   LIBCMT:fclose.obj',
204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0002:00000000       __imp__SetThreadPriority@8 004af000     kernel32:KERNEL32.dll',
205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0003:00000418       ?in_use_list_@PreallocatedStorage@internal@v8@@0V123@A 00544418     v8_snapshot:allocation.obj',
206a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' Static symbols',
207a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000b70       ?DefaultFatalErrorHandler@v8@@YAXPBD0@Z 00401b70 f   v8_snapshot:api.obj',
208a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:000010b0       ?EnsureInitialized@v8@@YAXPBD@Z 004020b0 f   v8_snapshot:api.obj',
209a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:000ad17b       ??__Fnomem@?5???2@YAPAXI@Z@YAXXZ 004ae17b f   LIBCMT:new.obj'
210a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    ].join('\r\n');
211a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
212a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var shell_prov = new WindowsCppEntriesProvider();
213a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var shell_syms = [];
214a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  shell_prov.parseVmSymbols('shell.exe', 0x00400000, 0x0057c000,
215a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
216a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        shell_syms.push(Array.prototype.slice.apply(arguments, [0]));
217a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
218a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
219a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [['ReadFile', 0x00401000, 0x004010a0],
220a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['Print', 0x004010a0, 0x00402230],
221a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::String::?1Utf8Value', 0x00402230, 0x004964ba],
222a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::DefaultFatalErrorHandler', 0x00401b70, 0x004020b0],
223a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['v8::EnsureInitialized', 0x004020b0, 0x0057c000]],
224a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      shell_syms);
225a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
226a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  WindowsCppEntriesProvider.prototype.loadSymbols = oldLoadSymbols;
227a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block})();
228a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
229a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
230a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// http://code.google.com/p/v8/issues/detail?id=427
231a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block(function testWindowsProcessExeAndDllMapFile() {
232a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  function exeSymbols(exeName) {
233a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    return [
234a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0000:00000000       ___ImageBase               00400000     <linker-defined>',
235a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000780       ?RunMain@@YAHHQAPAD@Z      00401780 f   shell.obj',
236a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000ac0       _main                      00401ac0 f   shell.obj',
237a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ''
238a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    ].join('\r\n');
239a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
240a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
241a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  function dllSymbols(dllName) {
242a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    return [
243a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0000:00000000       ___ImageBase               01c30000     <linker-defined>',
244a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000780       _DllMain@12                01c31780 f   libcmt:dllmain.obj',
245a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ' 0001:00000ac0       ___DllMainCRTStartup       01c31ac0 f   libcmt:dllcrt0.obj',
246a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      ''
247a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    ].join('\r\n');
248a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
249a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
250a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var oldRead = read;
251a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
252a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  read = exeSymbols;
253a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var exe_exe_syms = [];
254a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  (new WindowsCppEntriesProvider()).parseVmSymbols(
255a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'chrome.exe', 0x00400000, 0x00472000,
256a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
257a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        exe_exe_syms.push(Array.prototype.slice.apply(arguments, [0]));
258a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
259a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
260a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [['RunMain', 0x00401780, 0x00401ac0],
261a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['_main', 0x00401ac0, 0x00472000]],
262a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      exe_exe_syms, '.exe with .exe symbols');
263a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
264a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  read = dllSymbols;
265a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var exe_dll_syms = [];
266a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  (new WindowsCppEntriesProvider()).parseVmSymbols(
267a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'chrome.exe', 0x00400000, 0x00472000,
268a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
269a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        exe_dll_syms.push(Array.prototype.slice.apply(arguments, [0]));
270a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
271a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
272a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [],
273a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      exe_dll_syms, '.exe with .dll symbols');
274a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
275a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  read = dllSymbols;
276a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var dll_dll_syms = [];
277a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  (new WindowsCppEntriesProvider()).parseVmSymbols(
278a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'chrome.dll', 0x01c30000, 0x02b80000,
279a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
280a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        dll_dll_syms.push(Array.prototype.slice.apply(arguments, [0]));
281a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
282a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
283a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [['_DllMain@12', 0x01c31780, 0x01c31ac0],
284a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block       ['___DllMainCRTStartup', 0x01c31ac0, 0x02b80000]],
285a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      dll_dll_syms, '.dll with .dll symbols');
286a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
287a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  read = exeSymbols;
288a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var dll_exe_syms = [];
289a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  (new WindowsCppEntriesProvider()).parseVmSymbols(
290a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'chrome.dll', 0x01c30000, 0x02b80000,
291a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      function (name, start, end) {
292a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        dll_exe_syms.push(Array.prototype.slice.apply(arguments, [0]));
293a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      });
294a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals(
295a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      [],
296a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      dll_exe_syms, '.dll with .exe symbols');
297a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
298a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  read = oldRead;
299a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block})();
300a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
301a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
302a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction CppEntriesProviderMock() {
303a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
304a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
305a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
306a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockCppEntriesProviderMock.prototype.parseVmSymbols = function(
307a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    name, startAddr, endAddr, symbolAdder) {
308a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var symbols = {
309a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    'shell':
310a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        [['v8::internal::JSObject::LocalLookupRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*)', 0x080f8800, 0x080f8d90],
311a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block         ['v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*)', 0x080f8210, 0x080f8800],
312a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block         ['v8::internal::Runtime_Math_exp(v8::internal::Arguments)', 0x08123b20, 0x08123b80]],
313a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    '/lib32/libm-2.7.so':
314a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        [['exp', startAddr + 0x00009e80, startAddr + 0x00009e80 + 0xa3],
315a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block         ['fegetexcept', startAddr + 0x000061e0, startAddr + 0x000061e0 + 0x15]],
316a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    'ffffe000-fffff000': []};
317a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(name in symbols);
318a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var syms = symbols[name];
319a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  for (var i = 0; i < syms.length; ++i) {
320a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    symbolAdder.apply(null, syms[i]);
321a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
322a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
323a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
324a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
325a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction PrintMonitor(outputOrFileName) {
326a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var expectedOut = typeof outputOrFileName == 'string' ?
327a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      this.loadExpectedOutput(outputOrFileName) : outputOrFileName;
328a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var outputPos = 0;
329a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var diffs = this.diffs = [];
330a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var realOut = this.realOut = [];
331a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var unexpectedOut = this.unexpectedOut = null;
332a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
333a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  this.oldPrint = print;
334a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  print = function(str) {
335a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    var strSplit = str.split('\n');
336a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    for (var i = 0; i < strSplit.length; ++i) {
337d91b9f7d46489a9ee00f9cb415630299c76a502bLeon Clarke      var s = strSplit[i];
338a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      realOut.push(s);
339a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      if (outputPos < expectedOut.length) {
340a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        if (expectedOut[outputPos] != s) {
341a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block          diffs.push('line ' + outputPos + ': expected <' +
342a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block                     expectedOut[outputPos] + '> found <' + s + '>\n');
343a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        }
344a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        outputPos++;
345a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      } else {
346a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block        unexpectedOut = true;
347a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      }
348a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    }
349a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
350a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
351a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
352a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
353a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockPrintMonitor.prototype.loadExpectedOutput = function(fileName) {
354a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var output = readFile(fileName);
355a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  return output.split('\n');
356a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
357a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
358a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
359a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockPrintMonitor.prototype.finish = function() {
360a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  print = this.oldPrint;
361a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  if (this.diffs.length > 0 || this.unexpectedOut != null) {
362a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    print(this.realOut.join('\n'));
363a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    assertEquals([], this.diffs);
364a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    assertNull(this.unexpectedOut);
365a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
366a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
367a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
368a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
369a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction driveTickProcessorTest(
370a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    separateIc, ignoreUnknown, stateFilter, logInput, refOutput) {
371a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // TEST_FILE_NAME must be provided by test runner.
372a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertEquals('string', typeof TEST_FILE_NAME);
373a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var pathLen = TEST_FILE_NAME.lastIndexOf('/');
374a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  if (pathLen == -1) {
375a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    pathLen = TEST_FILE_NAME.lastIndexOf('\\');
376a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
377a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  assertTrue(pathLen != -1);
378a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var testsPath = TEST_FILE_NAME.substr(0, pathLen + 1);
3793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var tp = new TickProcessor(new CppEntriesProviderMock(),
3803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                             separateIc,
3813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                             TickProcessor.CALL_GRAPH_SIZE,
3823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                             ignoreUnknown,
3833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                             stateFilter);
384a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var pm = new PrintMonitor(testsPath + refOutput);
3853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  tp.processLogFileInTest(testsPath + logInput);
386a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  tp.printStatistics();
387a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  pm.finish();
388a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
389a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
390a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
391a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block(function testProcessing() {
392a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  var testData = {
393a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    'Default': [
394a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      false, false, null,
395a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'tickprocessor-test.log', 'tickprocessor-test.default'],
396a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    'SeparateIc': [
397a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      true, false, null,
398a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'tickprocessor-test.log', 'tickprocessor-test.separate-ic'],
399a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    'IgnoreUnknown': [
400a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      false, true, null,
401a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      'tickprocessor-test.log', 'tickprocessor-test.ignore-unknown'],
402a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    'GcState': [
403a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      false, false, TickProcessor.VmStates.GC,
404d91b9f7d46489a9ee00f9cb415630299c76a502bLeon Clarke      'tickprocessor-test.log', 'tickprocessor-test.gc-state'],
405d91b9f7d46489a9ee00f9cb415630299c76a502bLeon Clarke    'FunctionInfo': [
406d91b9f7d46489a9ee00f9cb415630299c76a502bLeon Clarke      false, false, null,
407d91b9f7d46489a9ee00f9cb415630299c76a502bLeon Clarke      'tickprocessor-test-func-info.log', 'tickprocessor-test.func-info']
408a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
409a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  for (var testName in testData) {
410a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    print('=== testProcessing-' + testName + ' ===');
411a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    driveTickProcessorTest.apply(null, testData[testName]);
412a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
413a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block})();
414