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="G1HeapRegionType" hr_name="G1 Heap Region Type" 130 type="U1" jvm_type="G1HEAPREGIONTYPE"> 131 <value type="UTF8" field="type" label="type" /> 132 </content_type> 133 134 <content_type id="G1YCType" hr_name="G1 YC Type" 135 type="U1" jvm_type="G1YCTYPE"> 136 <value type="UTF8" field="type" label="type" /> 137 </content_type> 138 139 <content_type id="GCThresholdUpdater" hr_name="GC Treshold Updater" 140 type="U1" jvm_type="GCTHRESHOLDUPDATER"> 141 <value type="UTF8" field="updater" label="updater" /> 142 </content_type> 143 144 <content_type id="ReferenceType" hr_name="Reference Type" 145 type="U1" jvm_type="REFERENCETYPE"> 146 <value type="UTF8" field="type" label="type" /> 147 </content_type> 148 149 <content_type id="MetadataType" hr_name="Metadata Type" 150 type="U1" jvm_type="METADATATYPE"> 151 <value type="UTF8" field="type" label="type" /> 152 </content_type> 153 154 <content_type id="MetaspaceObjectType" hr_name="Metaspace Object Type" 155 type="U1" jvm_type="METASPACEOBJTYPE"> 156 <value type="UTF8" field="type" label="type" /> 157 </content_type> 158 159 <content_type id="NARROW_OOP_MODE" hr_name="Narrow Oop Mode" 160 type="U1" jvm_type="NARROWOOPMODE"> 161 <value type="UTF8" field="mode" label="mode" /> 162 </content_type> 163 164 <content_type id="VMOperationType" hr_name="VM Operation Type" 165 type="U2" jvm_type="VMOPERATIONTYPE"> 166 <value type="UTF8" field="type" label="type" /> 167 </content_type> 168 169 <content_type id="CompilerPhaseType" hr_name="Compiler Phase Type" 170 type="U1" jvm_type="COMPILERPHASETYPE"> 171 <value type="UTF8" field="phase" label="phase" /> 172 </content_type> 173 174 <content_type id="FlagValueOrigin" hr_name="Flag Value Origin" 175 type="U1" jvm_type="FLAGVALUEORIGIN"> 176 <value type="UTF8" field="origin" label="origin" /> 177 </content_type> 178 179 <content_type id="CodeBlobType" hr_name="Code Blob Type" 180 type="U1" jvm_type="CODEBLOBTYPE"> 181 <value type="UTF8" field="type" label="type" /> 182 </content_type> 183 184 <content_type id="InflateCause" hr_name="Inflation Cause" 185 type="U1" jvm_type="INFLATECAUSE"> 186 <value type="UTF8" field="cause" label="cause" /> 187 </content_type> 188 </content_types> 189 190 191 <primary_types> 192 <!-- 193 - primary_type takes these attributes: 194 - symbol INTEGER, LONG etc 195 - datatype The trace datatype, see enum DataType 196 - contenttype Either resolved content type or the semantic meaning 197 - type The actual type as used in structures etc 198 - sizeop A function/macro that can be applied on a single 199 - struct value of type "type" and yield the factual byte 200 - size we need to write. The % is replaced by the value 201 --> 202 203 <!-- SIGNED 64bit --> 204 <primary_type symbol="LONG" datatype="LONG" contenttype="NONE" 205 type="s8" sizeop="sizeof(s8)"/> 206 207 <!-- UNSIGNED 64bit --> 208 <primary_type symbol="ULONG" datatype="U8" contenttype="NONE" 209 type="u8" sizeop="sizeof(u8)"/> 210 211 <!-- SIGNED 32bit --> 212 <primary_type symbol="INTEGER" datatype="INT" contenttype="NONE" 213 type="s4" sizeop="sizeof(s4)"/> 214 215 <!-- UNSIGNED 32bit --> 216 <primary_type symbol="UINT" datatype="U4" contenttype="NONE" 217 type="unsigned" sizeop="sizeof(unsigned)"/> 218 219 <!-- UNSIGNED 16bit --> 220 <primary_type symbol="USHORT" datatype="U2" contenttype="NONE" 221 type="u2" sizeop="sizeof(u2)"/> 222 223 <!-- SIGNED 16bit --> 224 <primary_type symbol="SHORT" datatype="SHORT" contenttype="NONE" 225 type="s2" sizeop="sizeof(s2)"/> 226 227 <!-- SIGNED 8bit --> 228 <primary_type symbol="BYTE" datatype="BYTE" contenttype="NONE" 229 type="s1" sizeop="sizeof(s1)"/> 230 231 <!-- UNSIGNED 8bit --> 232 <primary_type symbol="UBYTE" datatype="U1" contenttype="NONE" 233 type="u1" sizeop="sizeof(u1)"/> 234 235 <!-- float 32bit --> 236 <primary_type symbol="FLOAT" datatype="FLOAT" contenttype="NONE" 237 type="float" sizeop="sizeof(float)"/> 238 239 <!-- float 64bit --> 240 <primary_type symbol="DOUBLE" datatype="DOUBLE" contenttype="NONE" 241 type="double" sizeop="sizeof(double)"/> 242 243 <!-- boolean type (1-byte) --> 244 <primary_type symbol="BOOLEAN" datatype="BOOLEAN" contenttype="NONE" 245 type="bool" sizeop="1"/> 246 247 <!-- 32-bit unsigned integer, SEMANTIC value BYTES --> 248 <primary_type symbol="BYTES" datatype="U4" contenttype="BYTES" 249 type="u4" sizeop="sizeof(u4)"/> 250 251 <primary_type symbol="IOBYTES" datatype="U4" contenttype="BYTES" 252 type="u4" sizeop="sizeof(u4)"/> 253 254 <!-- 64-bit unsigned integer, SEMANTIC value BYTES --> 255 <primary_type symbol="BYTES64" datatype="U8" contenttype="BYTES" 256 type="u8" sizeop="sizeof(u8)"/> 257 258 <!-- 64-bit unsigned integer, SEMANTIC value ABSOLUTE MILLISECONDS --> 259 <primary_type symbol="EPOCHMILLIS" datatype="LONG" contenttype="EPOCHMILLIS" 260 type="s8" sizeop="sizeof(s8)"/> 261 262 <!-- 64-bit unsigned integer, SEMANTIC value RELATIVE MILLISECONDS --> 263 <primary_type symbol="MILLIS" datatype="LONG" contenttype="MILLIS" 264 type="s8" sizeop="sizeof(s8)"/> 265 266 <!-- 64-bit unsigned integer, SEMANTIC value RELATIVE NANOSECONDS --> 267 <primary_type symbol="NANOS" datatype="LONG" contenttype="NANOS" 268 type="s8" sizeop="sizeof(s8)"/> 269 270 <!-- 64-bit signed integer, SEMANTIC value TICKS --> 271 <primary_type symbol="TICKS" datatype="LONG" contenttype="TICKS" 272 type="Ticks" sizeop="sizeof(s8)"/> 273 274 <!-- 64-bit signed integer, SEMANTIC value TICKS duration --> 275 <primary_type symbol="TICKSPAN" datatype="LONG" contenttype="TICKS" 276 type="Tickspan" sizeop="sizeof(s8)"/> 277 278 <!-- 64-bit unsigned integer, SEMANTIC value ADDRESS (mem loc) --> 279 <primary_type symbol="ADDRESS" datatype="U8" contenttype="ADDRESS" 280 type="u8" sizeop="sizeof(u8)"/> 281 282 <!-- 32-bit float, SEMANTIC value PERCENTAGE (0.0-1.0) --> 283 <primary_type symbol="PERCENT" datatype="FLOAT" contenttype="PERCENTAGE" 284 type="float" sizeop="sizeof(float)"/> 285 286 <!-- UTF-encoded string, max length 64k --> 287 <primary_type symbol="UTF8" datatype="UTF8" contenttype="NONE" 288 type="const char *" sizeop="sizeof_utf(%)"/> 289 290 <!-- UTF-16 encoded (Unicode) string, max length maxjuint --> 291 <primary_type symbol="STRING" datatype="STRING" contenttype="NONE" 292 type="TraceUnicodeString*" sizeop="sizeof_unicode(%)"/> 293 294 <!-- Symbol* constant. Note that this may currently ONLY be used by 295 classes, methods fields. This restriction might be lifted. --> 296 <primary_type symbol="SYMBOL" datatype="U8" contenttype="SYMBOL" 297 type="Symbol *" sizeop="sizeof(u8)"/> 298 299 <!-- A Klass *. The actual class is marked as "used" and will 300 eventually be written into the recording constant pool --> 301 <primary_type symbol="CLASS" datatype="U8" contenttype="CLASS" 302 type="Klass *" sizeop="sizeof(u8)"/> 303 304 <!-- A Method *. The method is marked as "used" and will eventually be 305 written into the recording constant pool. --> 306 <primary_type symbol="METHOD" datatype="U8" contenttype="METHOD" 307 type="Method *" sizeop="sizeof(u8)"/> 308 309 <!-- The type for stacktraces in the recording. Shoudl not be used by 310 events explicitly --> 311 <primary_type symbol="STACKTRACE" datatype="U8" contenttype="STACKTRACE" 312 type="u8" sizeop="sizeof(u8)"/> 313 314 <!-- OS Thread ID --> 315 <primary_type symbol="OSTHREAD" datatype="U4" contenttype="OSTHREAD" 316 type="u4" sizeop="sizeof(u4)"/> 317 318 <!-- VM Thread ID Note: changed from U2 to U8 for hotspot --> 319 <primary_type symbol="VMTHREAD" datatype="U8" contenttype="VMTHREAD" 320 type="u8" sizeop="sizeof(u8)"/> 321 322 <!-- Java Thread ID --> 323 <primary_type symbol="JAVALANGTHREAD" datatype="LONG" 324 contenttype="JAVALANGTHREAD" type="s8" 325 sizeop="sizeof(s8)"/> 326 327 <!-- Threadgroup THIS TYPE MAY NOT BE USED IN NORMAL EVENTS (ATM). Only 328 for thread constant pool // KK TODO: u8 should be ObjectP --> 329 <primary_type symbol="THREADGROUP" datatype="U4" contenttype="THREADGROUP" 330 type="u8" 331 sizeop="sizeof(u4)"/> 332 333 <!-- FRAMETYPE enum --> 334 <primary_type symbol="FRAMETYPE" datatype="U1" contenttype="FRAMETYPE" 335 type="u1" sizeop="sizeof(u1)"/> 336 337 <!-- THREADSTATE enum --> 338 <primary_type symbol="THREADSTATE" datatype="U2" contenttype="THREADSTATE" 339 type="u2" sizeop="sizeof(u2)"/> 340 341 <!-- GCName --> 342 <primary_type symbol="GCNAME" datatype="U1" contenttype="GCNAME" 343 type="u1" sizeop="sizeof(u1)" /> 344 345 <!-- GCCAUSE --> 346 <primary_type symbol="GCCAUSE" datatype="U2" contenttype="GCCAUSE" 347 type="u2" sizeop="sizeof(u2)" /> 348 349 <!-- GCWHEN --> 350 <primary_type symbol="GCWHEN" datatype="U1" contenttype="GCWHEN" 351 type="u1" sizeop="sizeof(u1)" /> 352 353 <!-- G1HEAPREGIONTYPE --> 354 <primary_type symbol="G1HEAPREGIONTYPE" datatype="U1" contenttype="G1HEAPREGIONTYPE" 355 type="u1" sizeop="sizeof(u1)" /> 356 357 <!-- G1YCType --> 358 <primary_type symbol="G1YCTYPE" datatype="U1" contenttype="G1YCTYPE" 359 type="u1" sizeop="sizeof(u1)" /> 360 361 <!-- GCTHRESHOLDUPDATER --> 362 <primary_type symbol="GCTHRESHOLDUPDATER" datatype="U1" contenttype="GCTHRESHOLDUPDATER" 363 type="u1" sizeop="sizeof(u1)" /> 364 365 <!-- REFERENCETYPE --> 366 <primary_type symbol="REFERENCETYPE" datatype="U1" 367 contenttype="REFERENCETYPE" type="u1" sizeop="sizeof(u1)" /> 368 369 <!-- METADATATYPE --> 370 <primary_type symbol="METADATATYPE" datatype="U1" 371 contenttype="METADATATYPE" type="u1" sizeop="sizeof(u1)" /> 372 373 <!-- METADATAOBJTYPE --> 374 <primary_type symbol="METASPACEOBJTYPE" datatype="U1" 375 contenttype="METASPACEOBJTYPE" type="u1" sizeop="sizeof(u1)" /> 376 377 <!-- NARROWOOPMODE --> 378 <primary_type symbol="NARROWOOPMODE" datatype="U1" 379 contenttype="NARROWOOPMODE" type="u1" sizeop="sizeof(u1)" /> 380 381 <!-- COMPILERPHASETYPE --> 382 <primary_type symbol="COMPILERPHASETYPE" datatype="U1" 383 contenttype="COMPILERPHASETYPE" type="u1" sizeop="sizeof(u1)" /> 384 385 <!-- VMOPERATIONTYPE --> 386 <primary_type symbol="VMOPERATIONTYPE" datatype="U2" contenttype="VMOPERATIONTYPE" 387 type="u2" sizeop="sizeof(u2)" /> 388 389 <!-- FLAGVALUEORIGIN --> 390 <primary_type symbol="FLAGVALUEORIGIN" datatype="U1" 391 contenttype="FLAGVALUEORIGIN" type="u1" sizeop="sizeof(u1)" /> 392 393 <!-- CODEBLOBTYPE --> 394 <primary_type symbol="CODEBLOBTYPE" datatype="U1" 395 contenttype="CODEBLOBTYPE" type="u1" sizeop="sizeof(u1)" /> 396 397 <!-- INFLATECAUSE --> 398 <primary_type symbol="INFLATECAUSE" datatype="U1" 399 contenttype="INFLATECAUSE" type="u1" sizeop="sizeof(u1)" /> 400 </primary_types> 401 </types>