Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / v8_log_importer_test.js
1 // Copyright (c) 2013 The Chromium 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 'use strict';
6
7 tvcm.require('tracing.test_utils');
8 tvcm.require('tracing.importer.v8_log_importer');
9
10 tvcm.unittest.testSuite('tracing.importer.v8_log_importer_test', function() {
11   var V8LogImporter = tracing.importer.V8LogImporter;
12
13   test('tickEventInSharedLibrary', function() {
14     var lines = [
15       'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729',
16       'tick,0x99d8aae4,12158,0,0x0,5'];
17     var m = new tracing.TraceModel(lines.join('\n'), false);
18     var p = m.processes[-32];
19     var t = p.findAllThreadsNamed('V8')[0];
20     assertEquals(1, t.samples.length);
21     assertEquals('V8 PC', t.samples[0].title);
22     assertEquals(12158 / 1000, t.samples[0].start);
23     assertEquals('/usr/lib/libc++.1.dylib', t.samples[0].leafStackFrame.title);
24   });
25
26   test('tickEventInGeneratedCode', function() {
27     var lines = [
28       'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729',
29       'code-creation,Stub,2,0x5b60ce80,1259,"StringAddStub"',
30       'tick,0x5b60ce84,12158,0,0x0,5'];
31     var m = new tracing.TraceModel(lines.join('\n'), false);
32     var p = m.processes[-32];
33     var threads = p.findAllThreadsNamed('V8');
34     var t = threads[0];
35     assertEquals(1, t.samples.length);
36     assertEquals('StringAddStub', t.samples[0].leafStackFrame.title);
37   });
38
39   test('tickEventInUknownCode', function() {
40     var lines = [
41       'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729',
42       'code-creation,Stub,2,0x5b60ce80,1259,"StringAddStub"',
43       'tick,0x4,0xbff02f08,12158,0,0x0,5'];
44     var m = new tracing.TraceModel(lines.join('\n'), false);
45     var p = m.processes[-32];
46     var threads = p.findAllThreadsNamed('V8');
47     var t = threads[0];
48     assertEquals(1, t.samples.length);
49     assertEquals('Unknown', t.samples[0].leafStackFrame.title);
50   });
51
52   test('tickEventWithStack', function() {
53     var lines = [
54       'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck
55       'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304'];
56     var m = new tracing.TraceModel(lines.join('\n'), false);
57     var p = m.processes[-32];
58     var t = p.findAllThreadsNamed('V8')[0];
59     assertEquals(1, t.samples.length);
60     assertArrayEquals(
61         ['v8: InstantiateFunction native apinatives.js:26:29'],
62         t.samples[0].getUserFriendlyStackTrace());
63   });
64
65   test('twoTickEventsWithStack', function() {
66     var lines = [
67       'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck
68       'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304',
69       'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304'];
70     var m = new tracing.TraceModel(lines.join('\n'), false);
71     var p = m.processes[-32];
72     var t = p.findAllThreadsNamed('V8')[0];
73     assertEquals(2, t.samples.length);
74     assertEquals(528674 / 1000, t.samples[0].start);
75     assertEquals(536213 / 1000, t.samples[1].start);
76     assertArrayEquals(
77         ['v8: InstantiateFunction native apinatives.js:26:29'],
78         t.samples[0].getUserFriendlyStackTrace());
79     assertArrayEquals(
80         ['v8: InstantiateFunction native apinatives.js:26:29'],
81         t.samples[1].getUserFriendlyStackTrace());
82     assertEquals(t.samples[0].leafStackFrame,
83                  t.samples[1].leafStackFrame);
84   });
85
86   test('twoTickEventsWithTwoStackFrames', function() {
87     var lines = [
88       'code-creation,LazyCompile,0,0x2904d560,876,"Instantiate native apinatives.js:9:21",0x56b190c8,~', // @suppress longLineCheck
89       'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck
90       'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304,0x2904d6e8',
91       'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304,0x2904d6e8'];
92     var m = new tracing.TraceModel(lines.join('\n'), false);
93     var p = m.processes[-32];
94     var t = p.findAllThreadsNamed('V8')[0];
95     assertEquals(2, t.samples.length);
96
97     assertEquals(528674 / 1000, t.samples[0].start);
98     assertEquals(536213 / 1000, t.samples[1].start);
99     assertArrayEquals(
100         ['v8: Instantiate native apinatives.js:9:21',
101          'v8: InstantiateFunction native apinatives.js:26:29'],
102         t.samples[0].getUserFriendlyStackTrace());
103     assertArrayEquals(
104         ['v8: Instantiate native apinatives.js:9:21',
105          'v8: InstantiateFunction native apinatives.js:26:29'],
106         t.samples[1].getUserFriendlyStackTrace());
107
108     var childStackFrame = t.samples[0].leafStackFrame;
109     assertEquals(childStackFrame, t.samples[1].leafStackFrame);
110     assertEquals(0, childStackFrame.children.length);
111
112     var parentStackFrame = childStackFrame.parentFrame;
113     assertEquals(1, parentStackFrame.children.length);
114     assertEquals(childStackFrame, parentStackFrame.children[0]);
115
116   });
117
118   test('threeTickEventsWithTwoStackFrames', function() {
119     var lines = [
120       'code-creation,LazyCompile,0,0x2904d560,876,"Instantiate native apinatives.js:9:21",0x56b190c8,~', // @suppress longLineCheck
121       'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck
122       'tick,0x7fd7f75c,518328,0,0x81d86da8,2,0x2904d6e8',
123       'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304,0x2904d6e8',
124       'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304,0x2904d6e8'];
125     var m = new tracing.TraceModel(lines.join('\n'), false);
126     var p = m.processes[-32];
127     var threads = p.findAllThreadsNamed('V8');
128
129     var t = threads[0];
130     assertEquals(3, t.samples.length);
131     assertEquals(518328 / 1000, t.samples[0].start);
132     assertEquals(528674 / 1000, t.samples[1].start);
133     assertEquals(536213 / 1000, t.samples[2].start);
134     assertArrayEquals(
135         ['v8: Instantiate native apinatives.js:9:21'],
136         t.samples[0].getUserFriendlyStackTrace());
137     assertArrayEquals(
138         ['v8: Instantiate native apinatives.js:9:21',
139          'v8: InstantiateFunction native apinatives.js:26:29'],
140         t.samples[1].getUserFriendlyStackTrace());
141     assertArrayEquals(
142         ['v8: Instantiate native apinatives.js:9:21',
143          'v8: InstantiateFunction native apinatives.js:26:29'],
144         t.samples[2].getUserFriendlyStackTrace());
145
146     var topLevelStackFrame = t.samples[0].leafStackFrame;
147     var childStackFrame = t.samples[1].leafStackFrame;
148     assertEquals(childStackFrame, t.samples[2].leafStackFrame);
149     assertEquals(topLevelStackFrame, childStackFrame.parentFrame);
150     assertEquals(1, topLevelStackFrame.children.length);
151     assertEquals(0, childStackFrame.children.length);
152     assertEquals(childStackFrame, topLevelStackFrame.children[0]);
153   });
154
155   test('twoSubStacks', function() {
156     var lines = [
157       'code-creation,LazyCompile,0,0x2904d560,876,"Instantiate native apinatives.js:9:21",0x56b190c8,~', // @suppress longLineCheck
158       'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck
159       'tick,0x7fd7f75c,518328,0,0x81d86da8,2,0x2904d6e8',
160       'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304,0x2904d6e8',
161       'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304,0x2904d6e8',
162       'code-creation,Script,0,0x2906a7c0,792,"http://www.google.com/",0x5b12fe50,~', // @suppress longLineCheck
163       'tick,0xb6f51d30,794049,0,0xb6f7b368,2,0x2906a914',
164       'tick,0xb6f51d30,799146,0,0xb6f7b368,0,0x2906a914'
165     ];
166     var m = new tracing.TraceModel(lines.join('\n'), false);
167     var p = m.processes[-32];
168     var threads = p.findAllThreadsNamed('V8');
169     var t = threads[0];
170     assertEquals(5, t.samples.length);
171
172     assertEquals(518328 / 1000, t.samples[0].start);
173     assertEquals(528674 / 1000, t.samples[1].start);
174     assertEquals(536213 / 1000, t.samples[2].start);
175     assertEquals(794049 / 1000, t.samples[3].start);
176     assertEquals(799146 / 1000, t.samples[4].start);
177
178     assertArrayEquals(
179         ['v8: Instantiate native apinatives.js:9:21'],
180         t.samples[0].getUserFriendlyStackTrace());
181     assertArrayEquals(
182         ['v8: Instantiate native apinatives.js:9:21',
183          'v8: InstantiateFunction native apinatives.js:26:29'],
184         t.samples[1].getUserFriendlyStackTrace());
185     assertArrayEquals(
186         ['v8: Instantiate native apinatives.js:9:21',
187          'v8: InstantiateFunction native apinatives.js:26:29'],
188         t.samples[2].getUserFriendlyStackTrace());
189     assertArrayEquals(['v8: http://www.google.com/'],
190                       t.samples[3].getUserFriendlyStackTrace());
191     assertArrayEquals(['v8: http://www.google.com/'],
192                       t.samples[4].getUserFriendlyStackTrace());
193
194     var firsStackTopLevelStackFrame = t.samples[0].leafStackFrame;
195     var firsStackChildStackFrame = t.samples[1].leafStackFrame;
196     assertEquals(firsStackChildStackFrame, t.samples[2].leafStackFrame);
197     assertEquals(firsStackTopLevelStackFrame,
198                  firsStackChildStackFrame.parentFrame);
199     assertEquals(1, firsStackTopLevelStackFrame.children.length);
200     assertEquals(0, firsStackChildStackFrame.children.length);
201     assertEquals(firsStackChildStackFrame,
202                  firsStackTopLevelStackFrame.children[0]);
203
204     var secondStackStackFrame = t.samples[3].leafStackFrame;
205     assertEquals(secondStackStackFrame, t.samples[4].leafStackFrame);
206     assertEquals(0, secondStackStackFrame.children.length);
207     assertEquals(undefined, secondStackStackFrame.parentFrame);
208   });
209
210   test('timerEventSliceCreation', function() {
211     var lines = ['timer-event,"V8.External",38189483,3'];
212     var m = new tracing.TraceModel(lines.join('\n'), false);
213     var p = m.processes[-32];
214     var threads = p.findAllThreadsNamed('V8 Timers');
215     assertNotUndefined(threads);
216     assertEquals(1, threads.length);
217     var t = threads[0];
218     assertEquals(1, t.sliceGroup.length);
219   });
220
221   test('processThreadCreation', function() {
222     var lines = ['timer-event,"V8.External",38189483,3'];
223     var m = new tracing.TraceModel(lines.join('\n'), false);
224     assertNotUndefined(m);
225     var p = m.processes[-32];
226     assertNotUndefined(p);
227     var threads = p.findAllThreadsNamed('V8 Timers');
228     assertNotUndefined(threads);
229     assertEquals(threads.length, 1);
230     var t = threads[0];
231     assertEquals(t.name, 'V8 Timers');
232   });
233
234   test('canImport', function() {
235     assertTrue(V8LogImporter.canImport(
236         'timer-event,"V8.External",38189483,3'));
237     assertFalse(V8LogImporter.canImport(''));
238     assertFalse(V8LogImporter.canImport([]));
239   });
240 });