< prev index next >

core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/internal/parser/v1/TypeManager.java

Print this page




 103                 public void addEvent(Object[] fieldValues) {
 104                         Iterator<Integer> skipIter = skipFields.iterator();
 105                         int skipNext = skipIter.next();
 106                         int j = 0;
 107                         for (int i = 0; i < fieldValues.length; i++) {
 108                                 if (i != skipNext) {
 109                                         reusableStruct[j++] = fieldValues[i];
 110                                 } else if (skipIter.hasNext()) {
 111                                         skipNext = skipIter.next();
 112                                 }
 113                         }
 114                         subSink.addEvent(reusableStruct);
 115                 }
 116         }
 117 
 118         // NOTE: Using constant pool id as identifier.
 119         private static final Map<Long, StructContentType<Object[]>> STRUCT_TYPES = new HashMap<>();
 120 
 121         private class TypeEntry {
 122                 private static final String STRUCT_TYPE_STACK_TRACE = "com.oracle.jfr.types.StackTrace"; //$NON-NLS-1$

 123                 private static final String STRUCT_TYPE_STACK_FRAME = "com.oracle.jfr.types.StackFrame"; //$NON-NLS-1$

 124                 private static final String STRUCT_TYPE_METHOD = "com.oracle.jfr.types.Method"; //$NON-NLS-1$

 125                 private static final String STRUCT_TYPE_CLASS = "java.lang.Class"; //$NON-NLS-1$
 126                 private static final String STRUCT_TYPE_CLASS_LOADER = "com.oracle.jfr.types.ClassLoader"; //$NON-NLS-1$

 127                 private static final String STRUCT_TYPE_MODULE = "com.oracle.jfr.types.Module"; //$NON-NLS-1$

 128                 private static final String STRUCT_TYPE_PACKAGE = "com.oracle.jfr.types.Package"; //$NON-NLS-1$

 129                 private static final String STRUCT_TYPE_OLD_OBJECT = "com.oracle.jfr.types.OldObject"; //$NON-NLS-1$

 130                 private static final String STRUCT_TYPE_OLD_OBJECT_ARRAY = "com.oracle.jfr.types.OldObjectArray"; //$NON-NLS-1$

 131                 private static final String STRUCT_TYPE_OLD_OBJECT_FIELD = "com.oracle.jfr.types.OldObjectField"; //$NON-NLS-1$

 132                 private static final String STRUCT_TYPE_OLD_OBJECT_GC_ROOT = "com.oracle.jfr.types.OldObjectGcRoot"; //$NON-NLS-1$

 133                 private static final String STRUCT_TYPE_THREAD_GROUP = "com.oracle.jfr.types.ThreadGroup"; //$NON-NLS-1$

 134                 private static final String STRUCT_TYPE_THREAD = "java.lang.Thread"; //$NON-NLS-1$
 135 
 136                 final ClassElement element;
 137                 final FastAccessNumberMap<Object> constants;
 138                 private IValueReader reader;
 139 
 140                 TypeEntry(ClassElement element) {
 141                         this(element, new FastAccessNumberMap<>());
 142                 }
 143 
 144                 /**
 145                  * Temporary constructor for sharing constants. Only used for Strings.
 146                  */
 147                 TypeEntry(ClassElement element, FastAccessNumberMap<Object> constants) {
 148                         this.element = element;
 149                         this.constants = constants;
 150                 }
 151 
 152                 public IValueReader getReader() throws InvalidJfrFileException {
 153                         if (reader == null) {


 171                                                         element.description, fieldCount);
 172                                         // assign before resolving field since it may be recursive
 173                                         reader = typeReader;
 174                                         for (int i = 0; i < fieldCount; i++) {
 175                                                 FieldElement fe = element.fields.get(i);
 176                                                 IValueReader reader = createFieldReader(fe, null);
 177                                                 String labelOrId = (fe.label == null) ? fe.fieldIdentifier : fe.label;
 178                                                 typeReader.addField(fe.fieldIdentifier, labelOrId, fe.description, reader);
 179                                         }
 180                                 }
 181                         }
 182                         return reader;
 183                 }
 184 
 185                 private AbstractStructReader createStructReader(
 186                         String identifier, String name, String description, int fieldCount) {
 187                         switch (identifier) {
 188                         case STRUCT_TYPE_THREAD:
 189                                 return new ReflectiveReader(JfrThread.class, fieldCount, UnitLookup.THREAD);
 190                         case STRUCT_TYPE_THREAD_GROUP:

 191                                 return new ReflectiveReader(JfrThreadGroup.class, fieldCount, UnitLookup.THREAD_GROUP);
 192                         case STRUCT_TYPE_CLASS:
 193                                 return new ReflectiveReader(JfrJavaClass.class, fieldCount, UnitLookup.CLASS);
 194                         case STRUCT_TYPE_CLASS_LOADER:

 195                                 return new ReflectiveReader(JfrJavaClassLoader.class, fieldCount, UnitLookup.CLASS_LOADER);
 196                         case STRUCT_TYPE_OLD_OBJECT_GC_ROOT:

 197                                 return new ReflectiveReader(JfrOldObjectGcRoot.class, fieldCount, UnitLookup.OLD_OBJECT_GC_ROOT);
 198                         case STRUCT_TYPE_OLD_OBJECT:

 199                                 return new ReflectiveReader(JfrOldObject.class, fieldCount, UnitLookup.OLD_OBJECT);
 200                         case STRUCT_TYPE_OLD_OBJECT_ARRAY:

 201                                 return new ReflectiveReader(JfrOldObjectArray.class, fieldCount, UnitLookup.OLD_OBJECT_ARRAY);
 202                         case STRUCT_TYPE_OLD_OBJECT_FIELD:

 203                                 return new ReflectiveReader(JfrOldObjectField.class, fieldCount, UnitLookup.OLD_OBJECT_FIELD);
 204                         case STRUCT_TYPE_METHOD:

 205                                 return new ReflectiveReader(JfrMethod.class, fieldCount, UnitLookup.METHOD);
 206                         case STRUCT_TYPE_STACK_FRAME:

 207                                 return new ReflectiveReader(JfrFrame.class, fieldCount, UnitLookup.STACKTRACE_FRAME);
 208                         case STRUCT_TYPE_STACK_TRACE:

 209                                 return new ReflectiveReader(JfrStackTrace.class, fieldCount, UnitLookup.STACKTRACE);
 210                         case STRUCT_TYPE_MODULE:

 211                                 return new ReflectiveReader(JfrJavaModule.class, fieldCount, UnitLookup.MODULE);
 212                         case STRUCT_TYPE_PACKAGE:

 213                                 return new ReflectiveReader(JfrJavaPackage.class, fieldCount, UnitLookup.PACKAGE);
 214                         default:
 215                                 synchronized (STRUCT_TYPES) {
 216                                         StructContentType<Object[]> structType = STRUCT_TYPES.get(element.classId);
 217                                         if (structType == null) {
 218                                                 structType = new StructContentType<>(element.typeIdentifier, element.label,
 219                                                                 element.description);
 220                                                 STRUCT_TYPES.put(element.classId, structType);
 221                                         }
 222                                         return new StructReader(structType, fieldCount);
 223                                 }
 224                         }
 225                 }
 226 
 227                 void resolveConstants() throws InvalidJfrFileException {
 228                         IValueReader r = reader;
 229                         if (r != null) {
 230                                 for (Object c : constants) {
 231                                         r.resolve(c);
 232                                         // FIXME: During resolve, some constants may become equal. Should we ensure canonical constants?




 103                 public void addEvent(Object[] fieldValues) {
 104                         Iterator<Integer> skipIter = skipFields.iterator();
 105                         int skipNext = skipIter.next();
 106                         int j = 0;
 107                         for (int i = 0; i < fieldValues.length; i++) {
 108                                 if (i != skipNext) {
 109                                         reusableStruct[j++] = fieldValues[i];
 110                                 } else if (skipIter.hasNext()) {
 111                                         skipNext = skipIter.next();
 112                                 }
 113                         }
 114                         subSink.addEvent(reusableStruct);
 115                 }
 116         }
 117 
 118         // NOTE: Using constant pool id as identifier.
 119         private static final Map<Long, StructContentType<Object[]>> STRUCT_TYPES = new HashMap<>();
 120 
 121         private class TypeEntry {
 122                 private static final String STRUCT_TYPE_STACK_TRACE = "com.oracle.jfr.types.StackTrace"; //$NON-NLS-1$
 123                 private static final String STRUCT_TYPE_STACK_TRACE2 = "jdk.types.StackTrace"; //$NON-NLS-1$
 124                 private static final String STRUCT_TYPE_STACK_FRAME = "com.oracle.jfr.types.StackFrame"; //$NON-NLS-1$
 125                 private static final String STRUCT_TYPE_STACK_FRAME2 = "jdk.types.StackFrame"; //$NON-NLS-1$
 126                 private static final String STRUCT_TYPE_METHOD = "com.oracle.jfr.types.Method"; //$NON-NLS-1$
 127                 private static final String STRUCT_TYPE_METHOD2 = "jdk.types.Method"; //$NON-NLS-1$
 128                 private static final String STRUCT_TYPE_CLASS = "java.lang.Class"; //$NON-NLS-1$
 129                 private static final String STRUCT_TYPE_CLASS_LOADER = "com.oracle.jfr.types.ClassLoader"; //$NON-NLS-1$
 130                 private static final String STRUCT_TYPE_CLASS_LOADER2 = "jdk.types.ClassLoader"; //$NON-NLS-1$
 131                 private static final String STRUCT_TYPE_MODULE = "com.oracle.jfr.types.Module"; //$NON-NLS-1$
 132                 private static final String STRUCT_TYPE_MODULE2 = "jdk.types.Module"; //$NON-NLS-1$
 133                 private static final String STRUCT_TYPE_PACKAGE = "com.oracle.jfr.types.Package"; //$NON-NLS-1$
 134                 private static final String STRUCT_TYPE_PACKAGE2 = "jdk.types.Package"; //$NON-NLS-1$
 135                 private static final String STRUCT_TYPE_OLD_OBJECT = "com.oracle.jfr.types.OldObject"; //$NON-NLS-1$
 136                 private static final String STRUCT_TYPE_OLD_OBJECT2 = "jdk.types.OldObject"; //$NON-NLS-1$
 137                 private static final String STRUCT_TYPE_OLD_OBJECT_ARRAY = "com.oracle.jfr.types.OldObjectArray"; //$NON-NLS-1$
 138                 private static final String STRUCT_TYPE_OLD_OBJECT_ARRAY2 = "jdk.types.OldObjectArray"; //$NON-NLS-1$
 139                 private static final String STRUCT_TYPE_OLD_OBJECT_FIELD = "com.oracle.jfr.types.OldObjectField"; //$NON-NLS-1$
 140                 private static final String STRUCT_TYPE_OLD_OBJECT_FIELD2 = "jdk.types.OldObjectField"; //$NON-NLS-1$
 141                 private static final String STRUCT_TYPE_OLD_OBJECT_GC_ROOT = "com.oracle.jfr.types.OldObjectGcRoot"; //$NON-NLS-1$
 142                 private static final String STRUCT_TYPE_OLD_OBJECT_GC_ROOT2 = "jdk.types.OldObjectGcRoot"; //$NON-NLS-1$
 143                 private static final String STRUCT_TYPE_THREAD_GROUP = "com.oracle.jfr.types.ThreadGroup"; //$NON-NLS-1$
 144                 private static final String STRUCT_TYPE_THREAD_GROUP2 = "jdk.types.ThreadGroup"; //$NON-NLS-1$
 145                 private static final String STRUCT_TYPE_THREAD = "java.lang.Thread"; //$NON-NLS-1$
 146 
 147                 final ClassElement element;
 148                 final FastAccessNumberMap<Object> constants;
 149                 private IValueReader reader;
 150 
 151                 TypeEntry(ClassElement element) {
 152                         this(element, new FastAccessNumberMap<>());
 153                 }
 154 
 155                 /**
 156                  * Temporary constructor for sharing constants. Only used for Strings.
 157                  */
 158                 TypeEntry(ClassElement element, FastAccessNumberMap<Object> constants) {
 159                         this.element = element;
 160                         this.constants = constants;
 161                 }
 162 
 163                 public IValueReader getReader() throws InvalidJfrFileException {
 164                         if (reader == null) {


 182                                                         element.description, fieldCount);
 183                                         // assign before resolving field since it may be recursive
 184                                         reader = typeReader;
 185                                         for (int i = 0; i < fieldCount; i++) {
 186                                                 FieldElement fe = element.fields.get(i);
 187                                                 IValueReader reader = createFieldReader(fe, null);
 188                                                 String labelOrId = (fe.label == null) ? fe.fieldIdentifier : fe.label;
 189                                                 typeReader.addField(fe.fieldIdentifier, labelOrId, fe.description, reader);
 190                                         }
 191                                 }
 192                         }
 193                         return reader;
 194                 }
 195 
 196                 private AbstractStructReader createStructReader(
 197                         String identifier, String name, String description, int fieldCount) {
 198                         switch (identifier) {
 199                         case STRUCT_TYPE_THREAD:
 200                                 return new ReflectiveReader(JfrThread.class, fieldCount, UnitLookup.THREAD);
 201                         case STRUCT_TYPE_THREAD_GROUP:
 202                         case STRUCT_TYPE_THREAD_GROUP2:
 203                                 return new ReflectiveReader(JfrThreadGroup.class, fieldCount, UnitLookup.THREAD_GROUP);
 204                         case STRUCT_TYPE_CLASS:
 205                                 return new ReflectiveReader(JfrJavaClass.class, fieldCount, UnitLookup.CLASS);
 206                         case STRUCT_TYPE_CLASS_LOADER:
 207                         case STRUCT_TYPE_CLASS_LOADER2:
 208                                 return new ReflectiveReader(JfrJavaClassLoader.class, fieldCount, UnitLookup.CLASS_LOADER);
 209                         case STRUCT_TYPE_OLD_OBJECT_GC_ROOT:
 210                         case STRUCT_TYPE_OLD_OBJECT_GC_ROOT2:
 211                                 return new ReflectiveReader(JfrOldObjectGcRoot.class, fieldCount, UnitLookup.OLD_OBJECT_GC_ROOT);
 212                         case STRUCT_TYPE_OLD_OBJECT:
 213                         case STRUCT_TYPE_OLD_OBJECT2:
 214                                 return new ReflectiveReader(JfrOldObject.class, fieldCount, UnitLookup.OLD_OBJECT);
 215                         case STRUCT_TYPE_OLD_OBJECT_ARRAY:
 216                         case STRUCT_TYPE_OLD_OBJECT_ARRAY2:
 217                                 return new ReflectiveReader(JfrOldObjectArray.class, fieldCount, UnitLookup.OLD_OBJECT_ARRAY);
 218                         case STRUCT_TYPE_OLD_OBJECT_FIELD:
 219                         case STRUCT_TYPE_OLD_OBJECT_FIELD2:
 220                                 return new ReflectiveReader(JfrOldObjectField.class, fieldCount, UnitLookup.OLD_OBJECT_FIELD);
 221                         case STRUCT_TYPE_METHOD:
 222                         case STRUCT_TYPE_METHOD2:
 223                                 return new ReflectiveReader(JfrMethod.class, fieldCount, UnitLookup.METHOD);
 224                         case STRUCT_TYPE_STACK_FRAME:
 225                         case STRUCT_TYPE_STACK_FRAME2:
 226                                 return new ReflectiveReader(JfrFrame.class, fieldCount, UnitLookup.STACKTRACE_FRAME);
 227                         case STRUCT_TYPE_STACK_TRACE:
 228                         case STRUCT_TYPE_STACK_TRACE2:
 229                                 return new ReflectiveReader(JfrStackTrace.class, fieldCount, UnitLookup.STACKTRACE);
 230                         case STRUCT_TYPE_MODULE:
 231                         case STRUCT_TYPE_MODULE2:
 232                                 return new ReflectiveReader(JfrJavaModule.class, fieldCount, UnitLookup.MODULE);
 233                         case STRUCT_TYPE_PACKAGE:
 234                         case STRUCT_TYPE_PACKAGE2:
 235                                 return new ReflectiveReader(JfrJavaPackage.class, fieldCount, UnitLookup.PACKAGE);
 236                         default:
 237                                 synchronized (STRUCT_TYPES) {
 238                                         StructContentType<Object[]> structType = STRUCT_TYPES.get(element.classId);
 239                                         if (structType == null) {
 240                                                 structType = new StructContentType<>(element.typeIdentifier, element.label,
 241                                                                 element.description);
 242                                                 STRUCT_TYPES.put(element.classId, structType);
 243                                         }
 244                                         return new StructReader(structType, fieldCount);
 245                                 }
 246                         }
 247                 }
 248 
 249                 void resolveConstants() throws InvalidJfrFileException {
 250                         IValueReader r = reader;
 251                         if (r != null) {
 252                                 for (Object c : constants) {
 253                                         r.resolve(c);
 254                                         // FIXME: During resolve, some constants may become equal. Should we ensure canonical constants?


< prev index next >