18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package jdk.test.lib.jfr; 26 27 import static jdk.test.lib.Asserts.assertEquals; 28 import static jdk.test.lib.Asserts.assertNotEquals; 29 import static jdk.test.lib.Asserts.assertNotNull; 30 import static jdk.test.lib.Asserts.assertNull; 31 import static jdk.test.lib.Asserts.fail; 32 33 import java.io.FileOutputStream; 34 import java.io.IOException; 35 import java.io.PrintStream; 36 import java.lang.management.GarbageCollectorMXBean; 37 import java.lang.management.ManagementFactory; 38 import java.time.Instant; 39 import java.util.ArrayList; 40 import java.util.Arrays; 41 import java.util.Collections; 42 import java.util.HashMap; 43 import java.util.HashSet; 44 import java.util.List; 45 import java.util.Map; 46 import java.util.Set; 47 import java.util.Stack; 48 49 import jdk.jfr.ValueDescriptor; 50 import jdk.jfr.consumer.RecordedEvent; 51 52 /** 53 * Mixed helper classes to test GC events. 54 */ 55 public class GCHelper { 56 public static final String event_garbage_collection = EventNames.GarbageCollection; 57 public static final String event_young_garbage_collection = EventNames.YoungGarbageCollection; 154 // Add all events except those with gcId = min/max gcId 155 List<RecordedEvent> filteredEvents = new ArrayList<>(); 156 for (RecordedEvent event : events) { 157 if (Events.hasField(event, "gcId")) { 158 int gcId = Events.assertField(event, "gcId").getValue(); 159 if (gcId != minGcId && gcId != maxGcId) { 160 filteredEvents.add(event); 161 } 162 } 163 } 164 return filteredEvents; 165 } 166 167 public static Map<String, Boolean> beanCollectorTypes = new HashMap<>(); 168 public static Set<String> collectorOverrides = new HashSet<>(); 169 public static Map<String, String[]> requiredEvents = new HashMap<>(); 170 171 static { 172 // young GarbageCollectionMXBeans. 173 beanCollectorTypes.put("G1 Young Generation", true); 174 beanCollectorTypes.put("Copy", true); 175 beanCollectorTypes.put("PS Scavenge", true); 176 beanCollectorTypes.put("ParNew", true); 177 178 // old GarbageCollectionMXBeans. 179 beanCollectorTypes.put("G1 Old Generation", false); 180 beanCollectorTypes.put("ConcurrentMarkSweep", false); 181 beanCollectorTypes.put("PS MarkSweep", false); 182 beanCollectorTypes.put("MarkSweepCompact", false); 183 184 // List of expected collector overrides. "A.B" means that collector A may use collector B. 185 collectorOverrides.add("G1Old.G1Full"); 186 collectorOverrides.add("ConcurrentMarkSweep.SerialOld"); 187 collectorOverrides.add("SerialOld.PSMarkSweep"); 188 189 requiredEvents.put(gcG1New, new String[] {event_heap_summary, event_young_garbage_collection}); 190 requiredEvents.put(gcParNew, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_young_garbage_collection}); 191 requiredEvents.put(gcDefNew, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_young_garbage_collection}); 192 requiredEvents.put(gcParallelScavenge, new String[] {event_heap_summary, event_heap_ps_summary, event_heap_metaspace_summary, event_reference_statistics, event_phases_pause, event_phases_level_1, event_young_garbage_collection}); 193 requiredEvents.put(gcG1Old, new String[] {event_heap_summary, event_old_garbage_collection}); 194 requiredEvents.put(gcG1Full, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_old_garbage_collection}); 195 requiredEvents.put(gcConcurrentMarkSweep, new String[] {event_phases_pause, event_phases_level_1, event_old_garbage_collection}); 196 requiredEvents.put(gcSerialOld, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_old_garbage_collection}); 197 requiredEvents.put(gcParallelOld, new String[] {event_heap_summary, event_heap_ps_summary, event_heap_metaspace_summary, event_reference_statistics, event_phases_pause, event_phases_level_1, event_old_garbage_collection, event_parold_garbage_collection}); 198 199 String[] g1HeapRegionTypeLiterals = new String[] { | 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package jdk.test.lib.jfr; 26 27 import static jdk.test.lib.Asserts.assertEquals; 28 import static jdk.test.lib.Asserts.assertNotEquals; 29 import static jdk.test.lib.Asserts.assertNotNull; 30 import static jdk.test.lib.Asserts.assertNull; 31 import static jdk.test.lib.Asserts.fail; 32 33 import java.io.FileOutputStream; 34 import java.io.IOException; 35 import java.io.PrintStream; 36 import java.lang.management.GarbageCollectorMXBean; 37 import java.lang.management.ManagementFactory; 38 import com.sun.management.HotSpotDiagnosticMXBean; 39 import com.sun.management.VMOption; 40 import java.time.Instant; 41 import java.util.ArrayList; 42 import java.util.Arrays; 43 import java.util.Collections; 44 import java.util.HashMap; 45 import java.util.HashSet; 46 import java.util.List; 47 import java.util.Map; 48 import java.util.Set; 49 import java.util.Stack; 50 51 import jdk.jfr.ValueDescriptor; 52 import jdk.jfr.consumer.RecordedEvent; 53 54 /** 55 * Mixed helper classes to test GC events. 56 */ 57 public class GCHelper { 58 public static final String event_garbage_collection = EventNames.GarbageCollection; 59 public static final String event_young_garbage_collection = EventNames.YoungGarbageCollection; 156 // Add all events except those with gcId = min/max gcId 157 List<RecordedEvent> filteredEvents = new ArrayList<>(); 158 for (RecordedEvent event : events) { 159 if (Events.hasField(event, "gcId")) { 160 int gcId = Events.assertField(event, "gcId").getValue(); 161 if (gcId != minGcId && gcId != maxGcId) { 162 filteredEvents.add(event); 163 } 164 } 165 } 166 return filteredEvents; 167 } 168 169 public static Map<String, Boolean> beanCollectorTypes = new HashMap<>(); 170 public static Set<String> collectorOverrides = new HashSet<>(); 171 public static Map<String, String[]> requiredEvents = new HashMap<>(); 172 173 static { 174 // young GarbageCollectionMXBeans. 175 beanCollectorTypes.put("G1 Young Generation", true); 176 beanCollectorTypes.put("G1 Young", true); 177 beanCollectorTypes.put("Copy", true); 178 beanCollectorTypes.put("PS Scavenge", true); 179 beanCollectorTypes.put("ParNew", true); 180 181 // old GarbageCollectionMXBeans. 182 beanCollectorTypes.put("G1 Old Generation", false); 183 beanCollectorTypes.put("G1 Mixed", false); 184 beanCollectorTypes.put("G1 Concurrent Cycle", false); 185 beanCollectorTypes.put("G1 Full", false); 186 beanCollectorTypes.put("ConcurrentMarkSweep", false); 187 beanCollectorTypes.put("PS MarkSweep", false); 188 beanCollectorTypes.put("MarkSweepCompact", false); 189 190 // List of expected collector overrides. "A.B" means that collector A may use collector B. 191 collectorOverrides.add("G1Old.G1Full"); 192 collectorOverrides.add("ConcurrentMarkSweep.SerialOld"); 193 collectorOverrides.add("SerialOld.PSMarkSweep"); 194 195 requiredEvents.put(gcG1New, new String[] {event_heap_summary, event_young_garbage_collection}); 196 requiredEvents.put(gcParNew, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_young_garbage_collection}); 197 requiredEvents.put(gcDefNew, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_young_garbage_collection}); 198 requiredEvents.put(gcParallelScavenge, new String[] {event_heap_summary, event_heap_ps_summary, event_heap_metaspace_summary, event_reference_statistics, event_phases_pause, event_phases_level_1, event_young_garbage_collection}); 199 requiredEvents.put(gcG1Old, new String[] {event_heap_summary, event_old_garbage_collection}); 200 requiredEvents.put(gcG1Full, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_old_garbage_collection}); 201 requiredEvents.put(gcConcurrentMarkSweep, new String[] {event_phases_pause, event_phases_level_1, event_old_garbage_collection}); 202 requiredEvents.put(gcSerialOld, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_old_garbage_collection}); 203 requiredEvents.put(gcParallelOld, new String[] {event_heap_summary, event_heap_ps_summary, event_heap_metaspace_summary, event_reference_statistics, event_phases_pause, event_phases_level_1, event_old_garbage_collection, event_parold_garbage_collection}); 204 205 String[] g1HeapRegionTypeLiterals = new String[] { |