1 /* 2 * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 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.jfr.internal; 26 27 import java.util.Map; 28 import java.util.concurrent.ConcurrentHashMap; 29 30 import jdk.jfr.events.DeserializationEvent; 31 import jdk.jfr.events.ErrorThrownEvent; 32 import jdk.jfr.events.ExceptionStatisticsEvent; 33 import jdk.jfr.events.ExceptionThrownEvent; 34 import jdk.jfr.events.ProcessStartEvent; 35 import jdk.jfr.events.SecurityPropertyModificationEvent; 36 import jdk.jfr.events.SecurityProviderServiceEvent; 37 import jdk.jfr.events.SerializationMisdeclarationEvent; 38 import jdk.jfr.events.SocketReadEvent; 39 import jdk.jfr.events.SocketWriteEvent; 40 import jdk.jfr.events.TLSHandshakeEvent; 41 import jdk.jfr.events.ThreadSleepEvent; 42 import jdk.jfr.events.VirtualThreadEndEvent; 43 import jdk.jfr.events.VirtualThreadPinnedEvent; 44 import jdk.jfr.events.VirtualThreadStartEvent; 45 import jdk.jfr.events.VirtualThreadSubmitFailedEvent; 46 import jdk.jfr.events.X509CertificateEvent; 47 import jdk.jfr.events.X509ValidationEvent; 48 49 /** 50 * This class registers all mirror events. 51 */ 52 final class MirrorEvents { 53 private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>(); 54 55 // Add mirror event mapping here. See MirrorEvent class for details. 56 static { 57 register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class); 58 register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class); 59 register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class); 60 register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class); 61 register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class); 62 register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class); 63 register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class); 64 register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class); 65 register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class); 66 register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class); 67 register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class); 68 register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class); 69 register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class); 70 register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class); 71 register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class); 72 register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class); 73 register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class); 74 register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class); 75 }; 76 77 private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) { 78 mirrorLookup.put(eventClassName, mirrorClass); 79 } 80 81 static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) { 82 return find(eventClass.getClassLoader() == null, eventClass.getName()); 83 } 84 85 static Class<? extends MirrorEvent> find(boolean bootClassLoader, String name) { 86 if (bootClassLoader) { 87 return mirrorLookup.get(name); 88 } 89 return null; 90 } 91 }