comparison src/share/vm/trace/tracetypes.xml @ 10405:f2110083203d

8005849: JEP 167: Event-Based JVM Tracing Reviewed-by: acorn, coleenp, sla Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author sla
date Mon, 10 Jun 2013 11:30:51 +0200
parents
children 060ae9b7ffea
comparison
equal deleted inserted replaced
10404:d0add7016434 10405:f2110083203d
1 <?xml version="1.0" encoding="utf-8"?>
2 <!--
3 Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
4 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
6 This code is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License version 2 only, as
8 published by the Free Software Foundation.
9
10 This code is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 version 2 for more details (a copy is included in the LICENSE file that
14 accompanied this code).
15
16 You should have received a copy of the GNU General Public License version
17 2 along with this work; if not, write to the Free Software Foundation,
18 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 or visit www.oracle.com if you need additional information or have any
22 questions.
23 -->
24
25 <!DOCTYPE types SYSTEM "trace.dtd">
26
27 <!--
28
29 Content types (complex) should create constant pool data
30 in the recording.
31 Currently at least, there is _NO_ verification that whatever
32 writer you have is actually writing correctly. So BE CAREFUL!
33
34 Declared with the 'content_type' tag.
35
36 <type> is the ID type, i.e the integer type that resolves this. Most often
37 U4 or U8, but for example really small number constants, like GCTYPE uses U1.
38
39 <content-type> is where it gets interesting. 'builtin_type' means we're
40 defining how we resolve one of the trace built-in types (Class, Thread etc),
41 jvm_type means defining a new one for our own use.
42
43 Example: (GcMode)
44
45 <content_type id="GCMode" hr_name="GC mode" type="U1" jvm_type="GCMODE">
46 <value type="UTF8" field="desc" description="Description"/>
47 </content_type>
48
49 This creates a content type CONTENT_TYPE_GCMODE
50 The field type referencing it is u1 (U1), and the constant pool struct has one field, the name.
51
52 Before we can use it we need also define a primary field data type:
53
54 <primary_type symbol="GCMODE" datatype="U1" contenttype="NONE"
55 type="u8" sizeop="sizeof(u1)"/>
56
57 Now we can use the content + data type in declaring event fields.
58 Remember however, that for us to be able to resolve the value later we must also add
59 creating the constant pool data in VM_JFRCheckpoint::write_checkpoint
60
61 ...
62 //CGMODE
63 w->be_uint(CONTENT_TYPE_GCMODE);
64 w->be_uint(MM_GC_MODE_UNINITIALIZED);
65 for (i = 0; i < MM_GC_MODE_UNINITIALIZED; i++) {
66 w->uchar(i);
67 w->write_utf8(gcModeGetName(i));
68 }
69
70 -->
71
72 <types>
73 <content_types>
74 <content_type id="Thread" hr_name="Thread"
75 type="U4" builtin_type="OSTHREAD">
76 <value type="UTF8" field="name" label="Thread name"/>
77 </content_type>
78
79 <content_type id="VMThread" hr_name="VM Thread"
80 type="U8" jvm_type="VMTHREAD">
81 <value type="OSTHREAD" field="thread" label="VM Thread"/>
82 </content_type>
83
84 <!-- The first argument ("JavaThread") is misleading, it's really a
85 java.lang.Thread id (long), but Mission Control depends on the name
86 being "JavaThread" so it shouldn't be changed.
87 -->
88 <content_type id="JavaThread" hr_name="Java thread"
89 type="U8" builtin_type="JAVALANGTHREAD">
90 <value type="OSTHREAD" field="thread" label="OS Thread ID"/>
91 <value type="BYTES64" field="allocInsideTla"
92 label="Allocated bytes inside TLAs"/>
93 <value type="BYTES64" field="allocOutsideTla"
94 label="Allocated bytes outside TLAs"/>
95 <value type="THREADGROUP" field="group" label="Java Thread Group"/>
96 </content_type>
97
98 <content_type id="ThreadGroup" hr_name="Thread group"
99 type="U4" jvm_type="THREADGROUP">
100 <value type="THREADGROUP" field="parent" label="Parent"/>
101 <value type="UTF8" field="name" label="Name"/>
102 </content_type>
103
104 <content_type id="StackTrace" hr_name="Stacktrace"
105 type="U8" builtin_type="STACKTRACE">
106 <value type="BOOLEAN" field="truncated" label="Truncated"/>
107 <structarray type="StackFrame" field="frames" label="Stack frames"/>
108 </content_type>
109
110 <content_type id="Class" hr_name="Java class"
111 type="U8" builtin_type="CLASS">
112 <value type="CLASS" field="loaderClass" label="ClassLoader"/>
113 <value type="SYMBOL" field="name" label="Name"/>
114 <value type="SHORT" field="modifiers" label="Access modifiers"/>
115 </content_type>
116
117 <content_type id="Method" hr_name="Java method"
118 type="U8" jvm_type="METHOD">
119 <value type="CLASS" field="class" label="Class"/>
120 <value type="SYMBOL" field="name" label="Name"/>
121 <value type="SYMBOL" field="signature" label="Signature"/>
122 <value type="SHORT" field="modifiers" label="Access modifiers"/>
123 </content_type>
124
125 <content_type id="UTFConstant" hr_name="UTF constant"
126 type="U8" jvm_type="SYMBOL">
127 <value type="UTF8" field="utf8" label="UTF8 data"/>
128 </content_type>
129
130 <content_type id="ThreadState" hr_name="Java Thread State"
131 type="U2" jvm_type="THREADSTATE">
132 <value type="UTF8" field="name" label="Name"/>
133 </content_type>
134
135 <content_type id="FrameType" hr_name="Frame type"
136 type="U1" jvm_type="FRAMETYPE">
137 <value type="UTF8" field="desc" label="Description"/>
138 </content_type>
139
140 <struct_type id="StackFrame">
141 <value type="METHOD" field="method" label="Java Method"/>
142 <value type="INTEGER" field="line" label="Line number"/>
143 <value type="FRAMETYPE" field="type" label="Frame type"/>
144 </struct_type>
145
146 <content_type id="GCName" hr_name="GC Name"
147 type="U1" jvm_type="GCNAME">
148 <value type="UTF8" field="name" label="name" />
149 </content_type>
150
151 <content_type id="GCCause" hr_name="GC Cause"
152 type="U2" jvm_type="GCCAUSE">
153 <value type="UTF8" field="cause" label="cause" />
154 </content_type>
155
156 <content_type id="GCWhen" hr_name="GC When"
157 type="U1" jvm_type="GCWHEN">
158 <value type="UTF8" field="when" label="when" />
159 </content_type>
160
161 <content_type id="G1YCType" hr_name="G1 YC Type"
162 type="U1" jvm_type="G1YCTYPE">
163 <value type="UTF8" field="type" label="type" />
164 </content_type>
165
166 <content_type id="ReferenceType" hr_name="Reference Type"
167 type="U1" jvm_type="REFERENCETYPE">
168 <value type="UTF8" field="type" label="type" />
169 </content_type>
170
171 <content_type id="NARROW_OOP_MODE" hr_name="Narrow Oop Mode"
172 type="U1" jvm_type="NARROWOOPMODE">
173 <value type="UTF8" field="mode" label="mode" />
174 </content_type>
175
176 <content_type id="VMOperationType" hr_name="VM Operation Type"
177 type="U2" jvm_type="VMOPERATIONTYPE">
178 <value type="UTF8" field="type" label="type" />
179 </content_type>
180
181 <content_type id="CompilerPhaseType" hr_name="Compiler Phase Type"
182 type="U1" jvm_type="COMPILERPHASETYPE">
183 <value type="UTF8" field="phase" label="phase" />
184 </content_type>
185
186 </content_types>
187
188
189 <primary_types>
190 <!--
191 - primary_type takes these attributes:
192 - symbol INTEGER, LONG etc
193 - datatype The trace datatype, see enum DataType
194 - contenttype Either resolved content type or the semantic meaning
195 - type The actual type as used in structures etc
196 - sizeop A function/macro that can be applied on a single
197 - struct value of type "type" and yield the factual byte
198 - size we need to write. The % is replaced by the value
199 -->
200
201 <!-- SIGNED 64bit -->
202 <primary_type symbol="LONG" datatype="LONG" contenttype="NONE"
203 type="s8" sizeop="sizeof(s8)"/>
204
205 <!-- UNSIGNED 64bit -->
206 <primary_type symbol="ULONG" datatype="U8" contenttype="NONE"
207 type="u8" sizeop="sizeof(u8)"/>
208
209 <!-- SIGNED 32bit -->
210 <primary_type symbol="INTEGER" datatype="INT" contenttype="NONE"
211 type="s4" sizeop="sizeof(s4)"/>
212
213 <!-- UNSIGNED 32bit -->
214 <primary_type symbol="UINT" datatype="U4" contenttype="NONE"
215 type="unsigned" sizeop="sizeof(unsigned)"/>
216
217 <!-- UNSIGNED 16bit -->
218 <primary_type symbol="USHORT" datatype="U2" contenttype="NONE"
219 type="u2" sizeop="sizeof(u2)"/>
220
221 <!-- SIGNED 16bit -->
222 <primary_type symbol="SHORT" datatype="SHORT" contenttype="NONE"
223 type="s2" sizeop="sizeof(s2)"/>
224
225 <!-- SIGNED 8bit -->
226 <primary_type symbol="BYTE" datatype="BYTE" contenttype="NONE"
227 type="s1" sizeop="sizeof(s1)"/>
228
229 <!-- UNSIGNED 8bit -->
230 <primary_type symbol="UBYTE" datatype="U1" contenttype="NONE"
231 type="u1" sizeop="sizeof(u1)"/>
232
233 <!-- float 32bit -->
234 <primary_type symbol="FLOAT" datatype="FLOAT" contenttype="NONE"
235 type="float" sizeop="sizeof(float)"/>
236
237 <!-- float 64bit -->
238 <primary_type symbol="DOUBLE" datatype="DOUBLE" contenttype="NONE"
239 type="double" sizeop="sizeof(double)"/>
240
241 <!-- boolean type (1-byte) -->
242 <primary_type symbol="BOOLEAN" datatype="BOOLEAN" contenttype="NONE"
243 type="bool" sizeop="1"/>
244
245 <!-- 32-bit unsigned integer, SEMANTIC value BYTES -->
246 <primary_type symbol="BYTES" datatype="U4" contenttype="BYTES"
247 type="u4" sizeop="sizeof(u4)"/>
248
249 <primary_type symbol="IOBYTES" datatype="U4" contenttype="BYTES"
250 type="u4" sizeop="sizeof(u4)"/>
251
252 <!-- 64-bit unsigned integer, SEMANTIC value BYTES -->
253 <primary_type symbol="BYTES64" datatype="U8" contenttype="BYTES"
254 type="u8" sizeop="sizeof(u8)"/>
255
256 <!-- 64-bit unsigned integer, SEMANTIC value ABSOLUTE MILLISECONDS -->
257 <primary_type symbol="EPOCHMILLIS" datatype="LONG" contenttype="EPOCHMILLIS"
258 type="s8" sizeop="sizeof(s8)"/>
259
260 <!-- 64-bit unsigned integer, SEMANTIC value RELATIVE MILLISECONDS -->
261 <primary_type symbol="MILLIS" datatype="LONG" contenttype="MILLIS"
262 type="s8" sizeop="sizeof(s8)"/>
263
264 <!-- 64-bit unsigned integer, SEMANTIC value RELATIVE NANOSECONDS -->
265 <primary_type symbol="NANOS" datatype="LONG" contenttype="NANOS"
266 type="s8" sizeop="sizeof(s8)"/>
267
268 <!-- 64-bit signed integer, SEMANTIC value ABSOLUTE TICKS -->
269 <primary_type symbol="TICKS" datatype="LONG" contenttype="TICKS"
270 type="s8" sizeop="sizeof(s8)"/>
271
272 <!-- 64-bit signed integer, SEMANTIC value RELATIVE TICKS -->
273 <primary_type symbol="RELATIVE_TICKS" datatype="LONG" contenttype="TICKS"
274 type="s8" sizeop="sizeof(s8)"/>
275
276 <!-- 64-bit unsigned integer, SEMANTIC value ADDRESS (mem loc) -->
277 <primary_type symbol="ADDRESS" datatype="U8" contenttype="ADDRESS"
278 type="u8" sizeop="sizeof(u8)"/>
279
280 <!-- 32-bit float, SEMANTIC value PERCENTAGE (0.0-1.0) -->
281 <primary_type symbol="PERCENT" datatype="FLOAT" contenttype="PERCENTAGE"
282 type="float" sizeop="sizeof(float)"/>
283
284 <!-- UTF-encoded string, max length 64k -->
285 <primary_type symbol="UTF8" datatype="UTF8" contenttype="NONE"
286 type="const char *" sizeop="sizeof_utf(%)"/>
287
288 <!-- Symbol* constant. Note that this may currently ONLY be used by
289 classes, methods fields. This restriction might be lifted. -->
290 <primary_type symbol="SYMBOL" datatype="U8" contenttype="SYMBOL"
291 type="Symbol *" sizeop="sizeof(u8)"/>
292
293 <!-- A Klass *. The actual class is marked as "used" and will
294 eventually be written into the recording constant pool -->
295 <primary_type symbol="CLASS" datatype="U8" contenttype="CLASS"
296 type="Klass *" sizeop="sizeof(u8)"/>
297
298 <!-- A Method *. The method is marked as "used" and will eventually be
299 written into the recording constant pool. -->
300 <primary_type symbol="METHOD" datatype="U8" contenttype="METHOD"
301 type="Method *" sizeop="sizeof(u8)"/>
302
303 <!-- The type for stacktraces in the recording. Shoudl not be used by
304 events explicitly -->
305 <primary_type symbol="STACKTRACE" datatype="U8" contenttype="STACKTRACE"
306 type="u8" sizeop="sizeof(u8)"/>
307
308 <!-- OS Thread ID -->
309 <primary_type symbol="OSTHREAD" datatype="U4" contenttype="OSTHREAD"
310 type="u4" sizeop="sizeof(u4)"/>
311
312 <!-- VM Thread ID Note: changed from U2 to U8 for hotspot -->
313 <primary_type symbol="VMTHREAD" datatype="U8" contenttype="VMTHREAD"
314 type="u8" sizeop="sizeof(u8)"/>
315
316 <!-- Java Thread ID -->
317 <primary_type symbol="JAVALANGTHREAD" datatype="LONG"
318 contenttype="JAVALANGTHREAD" type="s8"
319 sizeop="sizeof(s8)"/>
320
321 <!-- Threadgroup THIS TYPE MAY NOT BE USED IN NORMAL EVENTS (ATM). Only
322 for thread constant pool // KK TODO: u8 should be ObjectP -->
323 <primary_type symbol="THREADGROUP" datatype="U4" contenttype="THREADGROUP"
324 type="u8"
325 sizeop="sizeof(u4)"/>
326
327 <!-- FRAMETYPE enum -->
328 <primary_type symbol="FRAMETYPE" datatype="U1" contenttype="FRAMETYPE"
329 type="u1" sizeop="sizeof(u1)"/>
330
331 <!-- THREADSTATE enum -->
332 <primary_type symbol="THREADSTATE" datatype="U2" contenttype="THREADSTATE"
333 type="u2" sizeop="sizeof(u2)"/>
334
335 <!-- GCName -->
336 <primary_type symbol="GCNAME" datatype="U1" contenttype="GCNAME"
337 type="u1" sizeop="sizeof(u1)" />
338
339 <!-- GCCAUSE -->
340 <primary_type symbol="GCCAUSE" datatype="U2" contenttype="GCCAUSE"
341 type="u2" sizeop="sizeof(u2)" />
342
343 <!-- GCWHEN -->
344 <primary_type symbol="GCWHEN" datatype="U1" contenttype="GCWHEN"
345 type="u1" sizeop="sizeof(u1)" />
346
347 <!-- G1YCType -->
348 <primary_type symbol="G1YCTYPE" datatype="U1" contenttype="G1YCTYPE"
349 type="u1" sizeop="sizeof(u1)" />
350
351 <!-- REFERENCETYPE -->
352 <primary_type symbol="REFERENCETYPE" datatype="U1"
353 contenttype="REFERENCETYPE" type="u1" sizeop="sizeof(u1)" />
354
355 <!-- NARROWOOPMODE -->
356 <primary_type symbol="NARROWOOPMODE" datatype="U1"
357 contenttype="NARROWOOPMODE" type="u1" sizeop="sizeof(u1)" />
358
359 <!-- COMPILERPHASETYPE -->
360 <primary_type symbol="COMPILERPHASETYPE" datatype="U1"
361 contenttype="COMPILERPHASETYPE" type="u1" sizeop="sizeof(u1)" />
362
363 <!-- VMOPERATIONTYPE -->
364 <primary_type symbol="VMOPERATIONTYPE" datatype="U2" contenttype="VMOPERATIONTYPE"
365 type="u2" sizeop="sizeof(u2)" />
366
367 </primary_types>
368 </types>