< prev index next >

core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/parser/synthetic/SettingsTransformer.java

Print this page

        

@@ -124,46 +124,46 @@
 
         @SuppressWarnings("nls")
         private static HashMap<String, Map<String, String>> buildRenameMap() {
                 // NOTE: Replace the last string argument with an identifier reference if a matching one is added to JfrAttributes.
                 HashMap<String, Map<String, String>> map = new HashMap<>();
-                addRenameEntry(map, JdkTypeIDsPreJdk9.THREAD_PARK, "klass", "parkedClass");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.MONITOR_ENTER, "klass", JdkAttributes.MONITOR_CLASS.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.MONITOR_WAIT, "klass", JdkAttributes.MONITOR_CLASS.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.INT_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.INT_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.UINT_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.UINT_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.LONG_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.LONG_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.ULONG_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.ULONG_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.DOUBLE_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.DOUBLE_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.BOOLEAN_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.BOOLEAN_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.STRING_FLAG_CHANGED, "old_value", "oldValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.STRING_FLAG_CHANGED, "new_value", "newValue");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.GC_DETAILED_EVACUATION_INFO, "allocRegionsUsedBefore",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.THREAD_PARK, "klass", "parkedClass");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.MONITOR_ENTER, "klass", JdkAttributes.MONITOR_CLASS.getIdentifier());
+                addRenameEntry(map, JdkTypeIDsPreJdk11.MONITOR_WAIT, "klass", JdkAttributes.MONITOR_CLASS.getIdentifier());
+                addRenameEntry(map, JdkTypeIDsPreJdk11.INT_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.INT_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.UINT_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.UINT_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.LONG_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.LONG_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.ULONG_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.ULONG_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.DOUBLE_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.DOUBLE_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.BOOLEAN_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.BOOLEAN_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.STRING_FLAG_CHANGED, "old_value", "oldValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.STRING_FLAG_CHANGED, "new_value", "newValue");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.GC_DETAILED_EVACUATION_INFO, "allocRegionsUsedBefore",
                                 "allocationRegionsUsedBefore");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.GC_DETAILED_EVACUATION_INFO, "allocRegionsUsedAfter",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.GC_DETAILED_EVACUATION_INFO, "allocRegionsUsedAfter",
                                 "allocationRegionsUsedAfter");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.SWEEP_CODE_CACHE, "sweepIndex", "sweepId");
-                addRenameEntry(map, JdkTypeIDsPreJdk9.ALLOC_INSIDE_TLAB, "class",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.SWEEP_CODE_CACHE, "sweepIndex", "sweepId");
+                addRenameEntry(map, JdkTypeIDsPreJdk11.ALLOC_INSIDE_TLAB, "class",
                                 JdkAttributes.ALLOCATION_CLASS.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.ALLOC_OUTSIDE_TLAB, "class",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.ALLOC_OUTSIDE_TLAB, "class",
                                 JdkAttributes.ALLOCATION_CLASS.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.OBJECT_COUNT, "class", JdkAttributes.OBJECT_CLASS.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.COMPILER_PHASE, "compileID",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.OBJECT_COUNT, "class", JdkAttributes.OBJECT_CLASS.getIdentifier());
+                addRenameEntry(map, JdkTypeIDsPreJdk11.COMPILER_PHASE, "compileID",
                                 JdkAttributes.COMPILER_COMPILATION_ID.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.COMPILATION, "compileID",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.COMPILATION, "compileID",
                                 JdkAttributes.COMPILER_COMPILATION_ID.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.COMPILER_FAILURE, "compileID",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.COMPILER_FAILURE, "compileID",
                                 JdkAttributes.COMPILER_COMPILATION_ID.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.COMPILER_FAILURE, "failure",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.COMPILER_FAILURE, "failure",
                                 JdkAttributes.COMPILER_FAILED_MESSAGE.getIdentifier());
-                addRenameEntry(map, JdkTypeIDsPreJdk9.GC_DETAILED_OBJECT_COUNT_AFTER_GC, "class",
+                addRenameEntry(map, JdkTypeIDsPreJdk11.GC_DETAILED_OBJECT_COUNT_AFTER_GC, "class",
                                 JdkAttributes.OBJECT_CLASS.getIdentifier());
                 return map;
         }
 
         private static void addRenameEntry(

@@ -176,11 +176,10 @@
                 attrMap.put(pre9AttrId, attrId);
         }
 
         SettingsTransformer(IEventSinkFactory sinkFactory, String label, String[] category, String description,
                         List<ValueField> dataStructure) {
-                sink = sinkFactory.create(JdkTypeIDs.RECORDING_SETTING, label, category, description, FIELDS);
                 for (int i = 0; i < dataStructure.size(); i++) {
                         ValueField vf = dataStructure.get(i);
                         if (vf.matches(JfrAttributes.END_TIME)) {
                                 endTimeIndex = i;
                         } else if (vf.matches(SyntheticAttributeExtension.REC_SETTING_EVENT_ID_ATTRIBUTE)) {

@@ -193,23 +192,39 @@
                                 thresholdIndex = i;
                         } else if (vf.matches(REC_SETTINGS_ATTR_PERIOD)) {
                                 periodIndex = i;
                         }
                 }
+                if (endTimeIndex >= 0) {
+                        sink = sinkFactory.create(JdkTypeIDs.RECORDING_SETTING, label, category, description, FIELDS);
+                } else {
+                        sink = sinkFactory.create(JdkTypeIDs.RECORDING_SETTING, label, category, description, dataStructure);
+                }
         }
 
         boolean isValid() {
                 return endTimeIndex >= 0 && typeIndex >= 0 && enabledIndex >= 0 && stacktraceIndex >= 0 && thresholdIndex >= 0
                                 && periodIndex >= 0;
         }
 
+        boolean isValidV1() {
+                return typeIndex >= 0;
+        }
+
         @Override
         public void addEvent(Object[] values) {
                 LabeledIdentifier type = (LabeledIdentifier) values[typeIndex];
                 if (type != null) {
-                        type = new LabeledIdentifier(JdkTypeIDsPreJdk9.translate(type.getInterfaceId()), type.getImplementationId(),
-                                        type.getName(), type.getDeclaredDescription());
+                        if (JdkTypeIDsPreJdk11.needTransform(type.getInterfaceId())) {
+                                type = new LabeledIdentifier(JdkTypeIDsPreJdk11.translate(type.getInterfaceId()),
+                                                type.getImplementationId(), type.getName(), type.getDeclaredDescription());
+                        }
+                        if (endTimeIndex < 0) {
+                                values[typeIndex] = type;
+                                sink.addEvent(values);
+                                return;
+                        }
                 }
                 Object startTime = values[endTimeIndex];
 
                 addSettingEvent(startTime, type, REC_SETTING_NAME_ENABLED, values[enabledIndex]);
                 addSettingEvent(startTime, type, REC_SETTING_NAME_STACKTRACE, values[stacktraceIndex]);

@@ -263,21 +278,24 @@
 
                         @Override
                         public IEventSink create(
                                 String identifier, String label, String[] category, String description,
                                 List<ValueField> dataStructure) {
-                                if (JdkTypeIDsPreJdk9.RECORDING_SETTING.equals(identifier)) {
+                                boolean needsTransform = JdkTypeIDsPreJdk11.needTransform(identifier);
+                                if (JdkTypeIDsPreJdk11.RECORDING_SETTING.equals(identifier) ||
+                                                (needsTransform &&
+                                                                JdkTypeIDs.RECORDING_SETTING.equals(JdkTypeIDsPreJdk11.translate(identifier)))) {
                                         SettingsTransformer st = new SettingsTransformer(subFactory, label, category, description,
                                                         dataStructure);
-                                        if (st.isValid()) {
+                                        if (st.isValid() || (needsTransform && st.isValidV1())) {
                                                 return st;
                                         } else {
                                                 // FIXME: Avoid System.err.println
                                                 System.err
                                                                 .println("Cannot create SettingsTransformer from fields: " + dataStructure.toString()); //$NON-NLS-1$
                                         }
-                                } else if (JdkTypeIDsPreJdk9.RECORDINGS.equals(identifier)) {
+                                } else if (JdkTypeIDsPreJdk11.RECORDINGS.equals(identifier)) {
                                         /*
                                          * NOTE: Renaming 'duration' and 'startTime' attributes for JDK 8 'Recording'
                                          * events so that they won't conflict with general attributes with the same
                                          * names in JDK 9+ recordings.
                                          */

@@ -291,19 +309,19 @@
                                                 }
                                                 struct[i] = vf;
                                         }
                                         return subFactory.create(JdkTypeIDs.RECORDINGS, label, category, description,
                                                         Arrays.asList(struct));
-                                } else if (JdkTypeIDsPreJdk9.CODE_CACHE_STATISTICS.equals(identifier)) {
+                                } else if (JdkTypeIDsPreJdk11.CODE_CACHE_STATISTICS.equals(identifier)) {
                                         for (int i = 0; i < dataStructure.size(); i++) {
                                                 if (UNALLOCATED_CAPACITY_FIELD_ID.equals(dataStructure.get(i).getIdentifier())) {
-                                                        return new FixCodeCacheSink(i, subFactory.create(JdkTypeIDsPreJdk9.translate(identifier),
+                                                        return new FixCodeCacheSink(i, subFactory.create(JdkTypeIDsPreJdk11.translate(identifier),
                                                                         label, category, description, dataStructure));
                                                 }
                                         }
                                 }
-                                return subFactory.create(JdkTypeIDsPreJdk9.translate(identifier), label, category, description,
+                                return subFactory.create(JdkTypeIDsPreJdk11.translate(identifier), label, category, description,
                                                 translate(identifier, dataStructure));
                         }
 
                         private List<ValueField> translate(String identifier, List<ValueField> dataStructure) {
                                 Map<String, String> attrMap = attributeRenameMap.get(identifier);
< prev index next >