< prev index next >

src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java

Print this page




  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 
  26 package jdk.jfr.internal.instrument;
  27 
  28 import java.util.ArrayList;
  29 import java.util.List;
  30 
  31 import jdk.internal.module.Modules;
  32 import jdk.jfr.Event;
  33 import jdk.jfr.FlightRecorder;
  34 import jdk.jfr.events.ActiveRecordingEvent;
  35 import jdk.jfr.events.ActiveSettingEvent;
  36 import jdk.jfr.events.ErrorThrownEvent;
  37 import jdk.jfr.events.ExceptionStatisticsEvent;
  38 import jdk.jfr.events.ExceptionThrownEvent;
  39 import jdk.jfr.events.FileForceEvent;
  40 import jdk.jfr.events.FileReadEvent;
  41 import jdk.jfr.events.FileWriteEvent;
  42 import jdk.jfr.events.SocketReadEvent;
  43 import jdk.jfr.events.SocketWriteEvent;
  44 import jdk.jfr.internal.JVM;
  45 import jdk.jfr.internal.LogLevel;
  46 import jdk.jfr.internal.LogTag;
  47 import jdk.jfr.internal.Logger;
  48 import jdk.jfr.internal.RequestEngine;
  49 import jdk.jfr.internal.SecuritySupport;
  50 import jdk.jfr.internal.Utils;
  51 
  52 public final class JDKEvents {
  53 







  54     private static final Class<?>[] eventClasses = {
  55         FileForceEvent.class,
  56         FileReadEvent.class,
  57         FileWriteEvent.class,
  58         SocketReadEvent.class,
  59         SocketWriteEvent.class,
  60         ExceptionThrownEvent.class,
  61         ExceptionStatisticsEvent.class,
  62         ErrorThrownEvent.class,
  63         ActiveSettingEvent.class,
  64         ActiveRecordingEvent.class




  65     };
  66 
  67     // This is a list of the classes with instrumentation code that should be applied.
  68     private static final Class<?>[] instrumentationClasses = new Class<?>[] {
  69         FileInputStreamInstrumentor.class,
  70         FileOutputStreamInstrumentor.class,
  71         RandomAccessFileInstrumentor.class,
  72         FileChannelImplInstrumentor.class,
  73         SocketInputStreamInstrumentor.class,
  74         SocketOutputStreamInstrumentor.class,
  75         SocketChannelImplInstrumentor.class
  76     };
  77 
  78     private static final Class<?>[] targetClasses = new Class<?>[instrumentationClasses.length];
  79     private static final JVM jvm = JVM.getJVM();
  80     private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
  81     private static boolean initializationTriggered;
  82 
  83     @SuppressWarnings("unchecked")
  84     public synchronized static void initialize() {
  85         try {
  86             if (initializationTriggered == false) {
  87                 Module jdkJfrModule = Event.class.getModule();
  88                 Module javaBaseModule = Object.class.getModule();
  89                 Modules.addReads(javaBaseModule, jdkJfrModule);
  90                 Modules.addExports(jdkJfrModule, Utils.EVENTS_PACKAGE_NAME, javaBaseModule);
  91                 Modules.addExports(jdkJfrModule, Utils.INSTRUMENT_PACKAGE_NAME, javaBaseModule);
  92                 Modules.addExports(jdkJfrModule, Utils.HANDLERS_PACKAGE_NAME, javaBaseModule);



  93                 for (Class<?> eventClass : eventClasses) {
  94                     SecuritySupport.registerEvent((Class<? extends Event>) eventClass);
  95                 }
  96                 initializationTriggered = true;
  97                 FlightRecorder.addPeriodicEvent(ExceptionStatisticsEvent.class, emitExceptionStatistics);
  98             }
  99         } catch (Exception e) {
 100             Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
 101         }
 102     }
 103 
 104     public static void addInstrumentation() {
 105         try {
 106             List<Class<?>> list = new ArrayList<>();
 107             for (int i = 0; i < instrumentationClasses.length; i++) {
 108                 JIInstrumentationTarget tgt = instrumentationClasses[i].getAnnotation(JIInstrumentationTarget.class);
 109                 Class<?> clazz = Class.forName(tgt.value());
 110                 targetClasses[i] = clazz;
 111                 list.add(clazz);
 112             }




  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 
  26 package jdk.jfr.internal.instrument;
  27 
  28 import java.util.ArrayList;
  29 import java.util.List;
  30 
  31 import jdk.internal.module.Modules;
  32 import jdk.jfr.Event;
  33 import jdk.jfr.FlightRecorder;
  34 import jdk.jfr.events.*;









  35 import jdk.jfr.internal.JVM;
  36 import jdk.jfr.internal.LogLevel;
  37 import jdk.jfr.internal.LogTag;
  38 import jdk.jfr.internal.Logger;
  39 import jdk.jfr.internal.RequestEngine;
  40 import jdk.jfr.internal.SecuritySupport;
  41 import jdk.jfr.internal.Utils;
  42 
  43 public final class JDKEvents {
  44 
  45     private static final Class<?>[] mirrorEventClasses = {
  46         SecurityPropertyModificationEvent.class,
  47         TLSHandshakeEvent.class,
  48         X509CertificateEvent.class,
  49         X509ValidationEvent.class
  50     };
  51 
  52     private static final Class<?>[] eventClasses = {
  53         FileForceEvent.class,
  54         FileReadEvent.class,
  55         FileWriteEvent.class,
  56         SocketReadEvent.class,
  57         SocketWriteEvent.class,
  58         ExceptionThrownEvent.class,
  59         ExceptionStatisticsEvent.class,
  60         ErrorThrownEvent.class,
  61         ActiveSettingEvent.class,
  62         ActiveRecordingEvent.class,
  63         jdk.internal.event.SecurityPropertyModificationEvent.class,
  64         jdk.internal.event.TLSHandshakeEvent.class,
  65         jdk.internal.event.X509CertificateEvent.class,
  66         jdk.internal.event.X509ValidationEvent.class
  67     };
  68 
  69     // This is a list of the classes with instrumentation code that should be applied.
  70     private static final Class<?>[] instrumentationClasses = new Class<?>[] {
  71         FileInputStreamInstrumentor.class,
  72         FileOutputStreamInstrumentor.class,
  73         RandomAccessFileInstrumentor.class,
  74         FileChannelImplInstrumentor.class,
  75         SocketInputStreamInstrumentor.class,
  76         SocketOutputStreamInstrumentor.class,
  77         SocketChannelImplInstrumentor.class
  78     };
  79 
  80     private static final Class<?>[] targetClasses = new Class<?>[instrumentationClasses.length];
  81     private static final JVM jvm = JVM.getJVM();
  82     private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
  83     private static boolean initializationTriggered;
  84 
  85     @SuppressWarnings("unchecked")
  86     public synchronized static void initialize() {
  87         try {
  88             if (initializationTriggered == false) {
  89                 Module jdkJfrModule = Event.class.getModule();
  90                 Module javaBaseModule = Object.class.getModule();
  91                 Modules.addReads(javaBaseModule, jdkJfrModule);
  92                 Modules.addExports(jdkJfrModule, Utils.EVENTS_PACKAGE_NAME, javaBaseModule);
  93                 Modules.addExports(jdkJfrModule, Utils.INSTRUMENT_PACKAGE_NAME, javaBaseModule);
  94                 Modules.addExports(jdkJfrModule, Utils.HANDLERS_PACKAGE_NAME, javaBaseModule);
  95                 for (Class<?> mirrorEventClass : mirrorEventClasses) {
  96                     SecuritySupport.registerMirror(((Class<? extends Event>)mirrorEventClass));
  97                 }
  98                 for (Class<?> eventClass : eventClasses) {
  99                     SecuritySupport.registerEvent((Class<? extends Event>) eventClass);
 100                 }
 101                 initializationTriggered = true;
 102                 FlightRecorder.addPeriodicEvent(ExceptionStatisticsEvent.class, emitExceptionStatistics);
 103             }
 104         } catch (Exception e) {
 105             Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
 106         }
 107     }
 108 
 109     public static void addInstrumentation() {
 110         try {
 111             List<Class<?>> list = new ArrayList<>();
 112             for (int i = 0; i < instrumentationClasses.length; i++) {
 113                 JIInstrumentationTarget tgt = instrumentationClasses[i].getAnnotation(JIInstrumentationTarget.class);
 114                 Class<?> clazz = Class.forName(tgt.value());
 115                 targetClasses[i] = clazz;
 116                 list.add(clazz);
 117             }


< prev index next >