Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / etw / thread_parser_test.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7
8 <link rel="import" href="/tracing/test_utils.html">
9 <link rel="import" href="/tracing/importer/etw_importer.html">
10 <link rel="import" href="/tracing/importer/etw/thread_parser.html">
11
12 <script>
13 'use strict';
14
15 tv.unittest.testSuite(function() {
16
17   // Constants for Thread events.
18   var guid = '3D6FA8D1-FE05-11D0-9DDA-00C04FD7BA7C';
19   var kThreadStartOpcode = 1;
20   var kThreadEndOpcode = 2;
21   var kThreadDCStartOpcode = 3;
22   var kThreadCSwitchOpcode = 36;
23
24   var kThreadStartPayload32bitV1 =
25       'BAAAAEwHAAAAYLfzADC38wAAAAAAAAAAhdse9wAAAAD/AAAA';
26
27   var kThreadEndPayload32bitV1 = 'BAAAALQAAAA=';
28
29
30   var kThreadDCStartPayload64bitV2 =
31       'AAAAAAAAAAAAYPUCAPj//wAA9QIA+P//AAAAAAAAAAAAAAAAAAAAAIAlxwEA+P//gCXHA' +
32       'QD4//8AAAAAAAAAAAAAAAA=';
33
34   var kThreadStartPayload32bitV3 =
35       'LAIAACwTAAAAUJixACCYsQAA1QAAwNQAAwAAAOkDq3cA4P1/AAAAAAkFAgA=';
36
37   var kThreadStartPayload64bitV3 =
38       'eCEAAJQUAAAAMA4nAND//wDQDScA0P//MP0LBgAAAAAAgAsGAAAAAP8AAAAAAAAALP1YX' +
39       'AAAAAAAwBL/AAAAAAAAAAAIBQIA';
40
41   var kThreadCSwitchPayload32bitV2 = 'AAAAACwRAAAACQAAFwABABIAAAAmSAAA';
42   var kThreadCSwitchPayload64bitV2 = 'zAgAAAAAAAAIAAEAAAACBAEAAACHbYg0';
43
44   test('DecodeFields', function() {
45
46     var importer = new tracing.importer.EtwImporter('dummy', []);
47     var decoder = importer.decoder_;
48     var parser = new tracing.importer.etw.ThreadParser(importer);
49     var header;
50     var fields;
51
52     // Validate a version 1 32-bit payload.
53     header = { guid: guid, opcode: kThreadStartOpcode, version: 1, is64: 0 };
54     decoder.reset(kThreadStartPayload32bitV1);
55     fields = parser.decodeFields(header, decoder);
56
57     assertTrue(fields.processId == 4);
58     assertTrue(fields.threadId == 1868);
59     assertTrue(fields.stackBase == 4088881152);
60     assertTrue(fields.stackLimit == 4088868864);
61     assertTrue(fields.userStackBase == 0);
62     assertTrue(fields.userStackLimit == 0);
63     assertTrue(fields.startAddr == 4145994629);
64     assertTrue(fields.win32StartAddr == 0);
65     assertTrue(fields.waitMode == -1);
66
67     // Validate an End version 1 32-bit payload.
68     header = { guid: guid, opcode: kThreadEndOpcode, version: 1, is64: 0 };
69     decoder.reset(kThreadStartPayload32bitV1);
70     fields = parser.decodeFields(header, decoder);
71
72     assertTrue(fields.processId == 4);
73     assertTrue(fields.threadId == 1868);
74
75     // Validate a version 2 64-bit payload.
76     header = { guid: guid, opcode: kThreadDCStartOpcode, version: 2, is64: 1 };
77     decoder.reset(kThreadDCStartPayload64bitV2);
78     fields = parser.decodeFields(header, decoder);
79
80     assertTrue(fields.processId == 0);
81     assertTrue(fields.threadId == 0);
82     assertTrue(fields.stackBase === 'fffff80002f56000');
83     assertTrue(fields.stackLimit == 'fffff80002f50000');
84     assertTrue(fields.userStackBase === '0000000000000000');
85     assertTrue(fields.userStackLimit === '0000000000000000');
86     assertTrue(fields.startAddr === 'fffff80001c72580');
87     assertTrue(fields.win32StartAddr === 'fffff80001c72580');
88     assertTrue(fields.tebBase === '0000000000000000');
89     assertTrue(fields.subProcessTag == 0);
90
91     // Validate a version 3 32-bit payload.
92     header = { guid: guid, opcode: kThreadStartOpcode, version: 3, is64: 0 };
93     decoder.reset(kThreadStartPayload32bitV3);
94     fields = parser.decodeFields(header, decoder);
95
96     assertTrue(fields.processId == 556);
97     assertTrue(fields.threadId == 4908);
98     assertTrue(fields.stackBase == 2979549184);
99     assertTrue(fields.stackLimit == 2979536896);
100     assertTrue(fields.userStackBase == 13959168);
101     assertTrue(fields.userStackLimit == 13942784);
102     assertTrue(fields.affinity == 3);
103     assertTrue(fields.win32StartAddr == 2007696361);
104     assertTrue(fields.tebBase == 2147344384);
105     assertTrue(fields.subProcessTag == 0);
106     assertTrue(fields.basePriority == 9);
107     assertTrue(fields.pagePriority == 5);
108     assertTrue(fields.ioPriority == 2);
109     assertTrue(fields.threadFlags == 0);
110
111     // Validate a version 3 64-bit payload.
112     header = { guid: guid, opcode: kThreadStartOpcode, version: 3, is64: 1 };
113     decoder.reset(kThreadStartPayload64bitV3);
114     fields = parser.decodeFields(header, decoder);
115
116     assertTrue(fields.processId == 8568);
117     assertTrue(fields.threadId == 5268);
118     assertTrue(fields.stackBase === 'ffffd000270e3000');
119     assertTrue(fields.stackLimit === 'ffffd000270dd000');
120     assertTrue(fields.userStackBase === '00000000060bfd30');
121     assertTrue(fields.userStackLimit === '00000000060b8000');
122     assertTrue(fields.affinity === '00000000000000ff');
123     assertTrue(fields.win32StartAddr === '000000005c58fd2c');
124     assertTrue(fields.tebBase === '00000000ff12c000');
125     assertTrue(fields.subProcessTag == 0);
126     assertTrue(fields.basePriority == 8);
127     assertTrue(fields.pagePriority == 5);
128     assertTrue(fields.ioPriority == 2);
129     assertTrue(fields.threadFlags == 0);
130   });
131
132   test('DecodeCSwitchFields', function() {
133     var importer = new tracing.importer.EtwImporter('dummy', []);
134     var decoder = importer.decoder_;
135     var parser = new tracing.importer.etw.ThreadParser(importer);
136     var header;
137     var fields;
138
139
140     // Validate a version 2 CSwitch 32-bit payload.
141     header = { guid: guid, opcode: kThreadCSwitchOpcode, version: 2, is64: 0 };
142     decoder.reset(kThreadCSwitchPayload32bitV2);
143     fields = parser.decodeCSwitchFields(header, decoder);
144
145     assertTrue(fields.newThreadId == 0);
146     assertTrue(fields.oldThreadId == 4396);
147     assertTrue(fields.newThreadPriority == 0);
148     assertTrue(fields.oldThreadPriority == 9);
149     assertTrue(fields.previousCState == 0);
150     assertTrue(fields.spareByte == 0);
151     assertTrue(fields.oldThreadWaitReason == 23);
152     assertTrue(fields.oldThreadWaitMode == 0);
153     assertTrue(fields.oldThreadState == 1);
154     assertTrue(fields.oldThreadWaitIdealProcessor == 0);
155     assertTrue(fields.newThreadWaitTime == 18);
156     assertTrue(fields.reserved == 18470);
157
158     // Validate a version 2 CSwitch 64-bit payload.
159     header = { guid: guid, opcode: kThreadCSwitchOpcode, version: 2, is64: 1 };
160     decoder.reset(kThreadCSwitchPayload64bitV2);
161     fields = parser.decodeCSwitchFields(header, decoder);
162
163     assertTrue(fields.newThreadId == 2252);
164     assertTrue(fields.oldThreadId == 0);
165     assertTrue(fields.newThreadPriority == 8);
166     assertTrue(fields.oldThreadPriority == 0);
167     assertTrue(fields.previousCState == 1);
168     assertTrue(fields.spareByte == 0);
169     assertTrue(fields.oldThreadWaitReason == 0);
170     assertTrue(fields.oldThreadWaitMode == 0);
171     assertTrue(fields.oldThreadState == 2);
172     assertTrue(fields.oldThreadWaitIdealProcessor == 4);
173     assertTrue(fields.newThreadWaitTime == 1);
174     assertTrue(fields.reserved == 881356167);
175
176   });
177 });
178 </script>
179