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