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 --> 59 60 <types> 61 <content_types> 62 <content_type id="Thread" hr_name="Thread" 63 type="U4" builtin_type="OSTHREAD"> 64 <value type="UTF8" field="name" label="Thread name"/> 65 </content_type> 66 67 <content_type id="VMThread" hr_name="VM Thread" 68 type="U8" jvm_type="VMTHREAD"> 69 <value type="OSTHREAD" field="thread" label="VM Thread"/> 70 </content_type> 71 72 <content_type id="JavaThread" hr_name="Java thread" 73 type="U8" builtin_type="JAVALANGTHREAD"> 74 <value type="OSTHREAD" field="thread" label="OS Thread ID"/> 75 <value type="BYTES64" field="allocInsideTla" 76 label="Allocated bytes inside TLAs"/> 77 <value type="BYTES64" field="allocOutsideTla" 78 label="Allocated bytes outside TLAs"/> 79 <value type="THREADGROUP" field="group" label="Java Thread Group"/> 80 </content_type> 81 82 <content_type id="ThreadGroup" hr_name="Thread group" 83 type="U4" jvm_type="THREADGROUP"> 84 <value type="THREADGROUP" field="parent" label="Parent"/> 85 <value type="UTF8" field="name" label="Name"/> 86 </content_type> 87 88 <content_type id="Class" hr_name="Java class" 89 type="U8" builtin_type="CLASS"> 90 <value type="CLASS" field="loaderClass" label="ClassLoader"/> 91 <value type="SYMBOL" field="name" label="Name"/> 92 <value type="SHORT" field="modifiers" label="Access modifiers"/> 93 </content_type> 94 95 <content_type id="Method" hr_name="Java method" 96 type="U8" jvm_type="METHOD"> 97 <value type="CLASS" field="class" label="Class"/> 98 <value type="SYMBOL" field="name" label="Name"/> 99 <value type="SYMBOL" field="signature" label="Signature"/> 100 <value type="SHORT" field="modifiers" label="Access modifiers"/> 101 <value type="BOOLEAN" field="hidden" label="Hidden"/> 102 </content_type> 103 104 <content_type id="UTFConstant" hr_name="UTF constant" 105 type="U8" jvm_type="SYMBOL"> 106 <value type="UTF8" field="utf8" label="UTF8 data"/> 107 </content_type> 108 109 <content_type id="ThreadState" hr_name="Java Thread State" 110 type="U2" jvm_type="THREADSTATE"> 111 <value type="UTF8" field="name" label="Name"/> 112 </content_type> 113 114 <content_type id="GCName" hr_name="GC Name" 115 type="U1" jvm_type="GCNAME"> 116 <value type="UTF8" field="name" label="name" /> 117 </content_type> 118 119 <content_type id="GCCause" hr_name="GC Cause" 120 type="U2" jvm_type="GCCAUSE"> 121 <value type="UTF8" field="cause" label="cause" /> 122 </content_type> 123 124 <content_type id="GCWhen" hr_name="GC When" 125 type="U1" jvm_type="GCWHEN"> 126 <value type="UTF8" field="when" label="when" /> 127 </content_type> 128 129 <content_type id="G1YCType" hr_name="G1 YC Type" 130 type="U1" jvm_type="G1YCTYPE"> 131 <value type="UTF8" field="type" label="type" /> 132 </content_type> 133 134 <content_type id="GCThresholdUpdater" hr_name="GC Treshold Updater" 135 type="U1" jvm_type="GCTHRESHOLDUPDATER"> 136 <value type="UTF8" field="updater" label="updater" /> 137 </content_type> 138 139 <content_type id="ReferenceType" hr_name="Reference Type" 140 type="U1" jvm_type="REFERENCETYPE"> 141 <value type="UTF8" field="type" label="type" /> 142 </content_type> 143 144 <content_type id="MetadataType" hr_name="Metadata Type" 145 type="U1" jvm_type="METADATATYPE"> 146 <value type="UTF8" field="type" label="type" /> 147 </content_type> 148 149 <content_type id="MetaspaceObjectType" hr_name="Metaspace Object Type" 150 type="U1" jvm_type="METASPACEOBJTYPE"> 151 <value type="UTF8" field="type" label="type" /> 152 </content_type> 153 154 <content_type id="NARROW_OOP_MODE" hr_name="Narrow Oop Mode" 155 type="U1" jvm_type="NARROWOOPMODE"> 156 <value type="UTF8" field="mode" label="mode" /> 157 </content_type> 158 159 <content_type id="VMOperationType" hr_name="VM Operation Type" 160 type="U2" jvm_type="VMOPERATIONTYPE"> 161 <value type="UTF8" field="type" label="type" /> 162 </content_type> 163 164 <content_type id="CompilerPhaseType" hr_name="Compiler Phase Type" 165 type="U1" jvm_type="COMPILERPHASETYPE"> 166 <value type="UTF8" field="phase" label="phase" /> 167 </content_type> 168 169 <content_type id="FlagValueOrigin" hr_name="Flag Value Origin" 170 type="U1" jvm_type="FLAGVALUEORIGIN"> 171 <value type="UTF8" field="origin" label="origin" /> 172 </content_type> 173 174 </content_types> 175 176 177 <primary_types> 178 <!-- 179 - primary_type takes these attributes: 180 - symbol INTEGER, LONG etc 181 - datatype The trace datatype, see enum DataType 182 - contenttype Either resolved content type or the semantic meaning 183 - type The actual type as used in structures etc 184 - sizeop A function/macro that can be applied on a single 185 - struct value of type "type" and yield the factual byte 186 - size we need to write. The % is replaced by the value 187 --> 188 189 <!-- SIGNED 64bit --> 190 <primary_type symbol="LONG" datatype="LONG" contenttype="NONE" 191 type="s8" sizeop="sizeof(s8)"/> 192 193 <!-- UNSIGNED 64bit --> 194 <primary_type symbol="ULONG" datatype="U8" contenttype="NONE" 195 type="u8" sizeop="sizeof(u8)"/> 196 197 <!-- SIGNED 32bit --> 198 <primary_type symbol="INTEGER" datatype="INT" contenttype="NONE" 199 type="s4" sizeop="sizeof(s4)"/> 200 201 <!-- UNSIGNED 32bit --> 202 <primary_type symbol="UINT" datatype="U4" contenttype="NONE" 203 type="unsigned" sizeop="sizeof(unsigned)"/> 204 205 <!-- UNSIGNED 16bit --> 206 <primary_type symbol="USHORT" datatype="U2" contenttype="NONE" 207 type="u2" sizeop="sizeof(u2)"/> 208 209 <!-- SIGNED 16bit --> 210 <primary_type symbol="SHORT" datatype="SHORT" contenttype="NONE" 211 type="s2" sizeop="sizeof(s2)"/> 212 213 <!-- SIGNED 8bit --> 214 <primary_type symbol="BYTE" datatype="BYTE" contenttype="NONE" 215 type="s1" sizeop="sizeof(s1)"/> 216 217 <!-- UNSIGNED 8bit --> 218 <primary_type symbol="UBYTE" datatype="U1" contenttype="NONE" 219 type="u1" sizeop="sizeof(u1)"/> 220 221 <!-- float 32bit --> 222 <primary_type symbol="FLOAT" datatype="FLOAT" contenttype="NONE" 223 type="float" sizeop="sizeof(float)"/> 224 225 <!-- float 64bit --> 226 <primary_type symbol="DOUBLE" datatype="DOUBLE" contenttype="NONE" 227 type="double" sizeop="sizeof(double)"/> 228 229 <!-- boolean type (1-byte) --> 230 <primary_type symbol="BOOLEAN" datatype="BOOLEAN" contenttype="NONE" 231 type="bool" sizeop="1"/> 232 233 <!-- 32-bit unsigned integer, SEMANTIC value BYTES --> 234 <primary_type symbol="BYTES" datatype="U4" contenttype="BYTES" 235 type="u4" sizeop="sizeof(u4)"/> 236 237 <primary_type symbol="IOBYTES" datatype="U4" contenttype="BYTES" 238 type="u4" sizeop="sizeof(u4)"/> 239 240 <!-- 64-bit unsigned integer, SEMANTIC value BYTES --> 241 <primary_type symbol="BYTES64" datatype="U8" contenttype="BYTES" 242 type="u8" sizeop="sizeof(u8)"/> 243 244 <!-- 64-bit unsigned integer, SEMANTIC value ABSOLUTE MILLISECONDS --> 245 <primary_type symbol="EPOCHMILLIS" datatype="LONG" contenttype="EPOCHMILLIS" 246 type="s8" sizeop="sizeof(s8)"/> 247 248 <!-- 64-bit unsigned integer, SEMANTIC value RELATIVE MILLISECONDS --> 249 <primary_type symbol="MILLIS" datatype="LONG" contenttype="MILLIS" 250 type="s8" sizeop="sizeof(s8)"/> 251 252 <!-- 64-bit unsigned integer, SEMANTIC value RELATIVE NANOSECONDS --> 253 <primary_type symbol="NANOS" datatype="LONG" contenttype="NANOS" 254 type="s8" sizeop="sizeof(s8)"/> 255 256 <!-- 64-bit signed integer, SEMANTIC value TICKS --> 257 <primary_type symbol="TICKS" datatype="LONG" contenttype="TICKS" 258 type="Ticks" sizeop="sizeof(s8)"/> 259 260 <!-- 64-bit signed integer, SEMANTIC value TICKS duration --> 261 <primary_type symbol="TICKSPAN" datatype="LONG" contenttype="TICKS" 262 type="Tickspan" sizeop="sizeof(s8)"/> 263 264 <!-- 64-bit unsigned integer, SEMANTIC value ADDRESS (mem loc) --> 265 <primary_type symbol="ADDRESS" datatype="U8" contenttype="ADDRESS" 266 type="u8" sizeop="sizeof(u8)"/> 267 268 <!-- 32-bit float, SEMANTIC value PERCENTAGE (0.0-1.0) --> 269 <primary_type symbol="PERCENT" datatype="FLOAT" contenttype="PERCENTAGE" 270 type="float" sizeop="sizeof(float)"/> 271 272 <!-- UTF-encoded string, max length 64k --> 273 <primary_type symbol="UTF8" datatype="UTF8" contenttype="NONE" 274 type="const char *" sizeop="sizeof_utf(%)"/> 275 276 <!-- UTF-16 encoded (Unicode) string, max length maxjuint --> 277 <primary_type symbol="STRING" datatype="STRING" contenttype="NONE" 278 type="TraceUnicodeString*" sizeop="sizeof_unicode(%)"/> 279 280 <!-- Symbol* constant. Note that this may currently ONLY be used by 281 classes, methods fields. This restriction might be lifted. --> 282 <primary_type symbol="SYMBOL" datatype="U8" contenttype="SYMBOL" 283 type="Symbol *" sizeop="sizeof(u8)"/> 284 285 <!-- A Klass *. The actual class is marked as "used" and will 286 eventually be written into the recording constant pool --> 287 <primary_type symbol="CLASS" datatype="U8" contenttype="CLASS" 288 type="Klass *" sizeop="sizeof(u8)"/> 289 290 <!-- A Method *. The method is marked as "used" and will eventually be 291 written into the recording constant pool. --> 292 <primary_type symbol="METHOD" datatype="U8" contenttype="METHOD" 293 type="Method *" sizeop="sizeof(u8)"/> 294 295 <!-- The type for stacktraces in the recording. Shoudl not be used by 296 events explicitly --> 297 <primary_type symbol="STACKTRACE" datatype="U8" contenttype="STACKTRACE" 298 type="u8" sizeop="sizeof(u8)"/> 299 300 <!-- OS Thread ID --> 301 <primary_type symbol="OSTHREAD" datatype="U4" contenttype="OSTHREAD" 302 type="u4" sizeop="sizeof(u4)"/> 303 304 <!-- VM Thread ID Note: changed from U2 to U8 for hotspot --> 305 <primary_type symbol="VMTHREAD" datatype="U8" contenttype="VMTHREAD" 306 type="u8" sizeop="sizeof(u8)"/> 307 308 <!-- Java Thread ID --> 309 <primary_type symbol="JAVALANGTHREAD" datatype="LONG" 310 contenttype="JAVALANGTHREAD" type="s8" 311 sizeop="sizeof(s8)"/> 312 313 <!-- Threadgroup THIS TYPE MAY NOT BE USED IN NORMAL EVENTS (ATM). Only 314 for thread constant pool // KK TODO: u8 should be ObjectP --> 315 <primary_type symbol="THREADGROUP" datatype="U4" contenttype="THREADGROUP" 316 type="u8" 317 sizeop="sizeof(u4)"/> 318 319 <!-- FRAMETYPE enum --> 320 <primary_type symbol="FRAMETYPE" datatype="U1" contenttype="FRAMETYPE" 321 type="u1" sizeop="sizeof(u1)"/> 322 323 <!-- THREADSTATE enum --> 324 <primary_type symbol="THREADSTATE" datatype="U2" contenttype="THREADSTATE" 325 type="u2" sizeop="sizeof(u2)"/> 326 327 <!-- GCName --> 328 <primary_type symbol="GCNAME" datatype="U1" contenttype="GCNAME" 329 type="u1" sizeop="sizeof(u1)" /> 330 331 <!-- GCCAUSE --> 332 <primary_type symbol="GCCAUSE" datatype="U2" contenttype="GCCAUSE" 333 type="u2" sizeop="sizeof(u2)" /> 334 335 <!-- GCWHEN --> 336 <primary_type symbol="GCWHEN" datatype="U1" contenttype="GCWHEN" 337 type="u1" sizeop="sizeof(u1)" /> 338 339 <!-- G1YCType --> 340 <primary_type symbol="G1YCTYPE" datatype="U1" contenttype="G1YCTYPE" 341 type="u1" sizeop="sizeof(u1)" /> 342 343 <!-- GCTHRESHOLDUPDATER --> 344 <primary_type symbol="GCTHRESHOLDUPDATER" datatype="U1" contenttype="GCTHRESHOLDUPDATER" 345 type="u1" sizeop="sizeof(u1)" /> 346 347 <!-- REFERENCETYPE --> 348 <primary_type symbol="REFERENCETYPE" datatype="U1" 349 contenttype="REFERENCETYPE" type="u1" sizeop="sizeof(u1)" /> 350 351 <!-- METADATATYPE --> 352 <primary_type symbol="METADATATYPE" datatype="U1" 353 contenttype="METADATATYPE" type="u1" sizeop="sizeof(u1)" /> 354 355 <!-- METADATAOBJTYPE --> 356 <primary_type symbol="METASPACEOBJTYPE" datatype="U1" 357 contenttype="METASPACEOBJTYPE" type="u1" sizeop="sizeof(u1)" /> 358 359 <!-- NARROWOOPMODE --> 360 <primary_type symbol="NARROWOOPMODE" datatype="U1" 361 contenttype="NARROWOOPMODE" type="u1" sizeop="sizeof(u1)" /> 362 363 <!-- COMPILERPHASETYPE --> 364 <primary_type symbol="COMPILERPHASETYPE" datatype="U1" 365 contenttype="COMPILERPHASETYPE" type="u1" sizeop="sizeof(u1)" /> 366 367 <!-- VMOPERATIONTYPE --> 368 <primary_type symbol="VMOPERATIONTYPE" datatype="U2" contenttype="VMOPERATIONTYPE" 369 type="u2" sizeop="sizeof(u2)" /> 370 371 <!-- FLAGVALUEORIGIN --> 372 <primary_type symbol="FLAGVALUEORIGIN" datatype="U1" 373 contenttype="FLAGVALUEORIGIN" type="u1" sizeop="sizeof(u1)" /> 374 375 </primary_types> 376 </types>