src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java
branchJEP-349-branch
changeset 57641 5fb8ececb9e6
parent 52698 ca6b58b8ffc5
child 57781 7758008806d1
equal deleted inserted replaced
57640:46a77fccd251 57641:5fb8ececb9e6
   119     private final String eventHandlerXInternalName;
   119     private final String eventHandlerXInternalName;
   120     private final String eventName;
   120     private final String eventName;
   121     private final boolean untypedEventHandler;
   121     private final boolean untypedEventHandler;
   122     private boolean guardHandlerReference;
   122     private boolean guardHandlerReference;
   123     private Class<?> superClass;
   123     private Class<?> superClass;
       
   124     private final static boolean streamingCommit = !SecuritySupport.getBooleanProperty("jfr.instrument.streaming");
   124 
   125 
   125     EventInstrumentation(Class<?> superClass, byte[] bytes, long id) {
   126     EventInstrumentation(Class<?> superClass, byte[] bytes, long id) {
   126         this.superClass = superClass;
   127         this.superClass = superClass;
   127         this.classNode = createClassNode(bytes);
   128         this.classNode = createClassNode(bytes);
   128         this.settingInfos = buildSettingInfos(superClass, classNode);
   129         this.settingInfos = buildSettingInfos(superClass, classNode);
   362             methodVisitor.visitInsn(Opcodes.RETURN);
   363             methodVisitor.visitInsn(Opcodes.RETURN);
   363             methodVisitor.visitMaxs(0, 0);
   364             methodVisitor.visitMaxs(0, 0);
   364         });
   365         });
   365 
   366 
   366         // MyEvent#commit() - Java event writer
   367         // MyEvent#commit() - Java event writer
   367         updateMethod(METHOD_COMMIT, methodVisitor -> {
   368         if (streamingCommit) {
       
   369             updateMethod(METHOD_COMMIT, methodVisitor -> {
       
   370                 // if (shouldCommit()) {
       
   371                 methodVisitor.visitCode();
       
   372                 methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
       
   373                 methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, getInternalClassName(), METHOD_EVENT_SHOULD_COMMIT.getName(), METHOD_EVENT_SHOULD_COMMIT.getDescriptor(), false);
       
   374                 Label end = new Label();
       
   375                 methodVisitor.visitJumpInsn(Opcodes.IFEQ, end);
       
   376                 methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
       
   377                 methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
       
   378                 //   startTime = EventHandler.timestamp() - duration;
       
   379                 methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, TYPE_EVENT_HANDLER.getInternalName(), METHOD_TIME_STAMP.getName(),
       
   380                         METHOD_TIME_STAMP.getDescriptor(), false);
       
   381                 methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
       
   382                 methodVisitor.visitFieldInsn(Opcodes.GETFIELD, getInternalClassName(), FIELD_DURATION, "J");
       
   383                 methodVisitor.visitInsn(Opcodes.LSUB);
       
   384                 methodVisitor.visitFieldInsn(Opcodes.PUTFIELD, getInternalClassName(), FIELD_START_TIME, "J");
       
   385                 //   eventHandlerX.write(...);
       
   386                 getEventHandler(methodVisitor);
       
   387                 methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, eventHandlerXInternalName);
       
   388                 for (FieldInfo fi : fieldInfos) {
       
   389                     methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
       
   390                     methodVisitor.visitFieldInsn(Opcodes.GETFIELD, fi.internalClassName, fi.fieldName, fi.fieldDescriptor);
       
   391                 }
       
   392                 methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, eventHandlerXInternalName, writeMethod.getName(), writeMethod.getDescriptor(), false);
       
   393                 // }
       
   394                 methodVisitor.visitLabel(end);
       
   395                 methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
       
   396                 methodVisitor.visitInsn(Opcodes.RETURN);
       
   397                 methodVisitor.visitEnd();
       
   398             });
       
   399         } else {
       
   400             updateMethod(METHOD_COMMIT, methodVisitor -> {
   368                 // if (!isEnable()) {
   401                 // if (!isEnable()) {
   369                 // return;
   402                 // return;
   370                 // }
   403                 // }
   371                 methodVisitor.visitCode();
   404                 methodVisitor.visitCode();
   372                 methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
   405                 methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
   429                 methodVisitor.visitLabel(end);
   462                 methodVisitor.visitLabel(end);
   430                 methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
   463                 methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
   431                 methodVisitor.visitInsn(Opcodes.RETURN);
   464                 methodVisitor.visitInsn(Opcodes.RETURN);
   432                 methodVisitor.visitEnd();
   465                 methodVisitor.visitEnd();
   433             });
   466             });
       
   467         }
   434 
   468 
   435         // MyEvent#shouldCommit()
   469         // MyEvent#shouldCommit()
   436         updateMethod(METHOD_EVENT_SHOULD_COMMIT, methodVisitor -> {
   470         updateMethod(METHOD_EVENT_SHOULD_COMMIT, methodVisitor -> {
   437             Label fail = new Label();
   471             Label fail = new Label();
   438             if (guardHandlerReference) {
   472             if (guardHandlerReference) {