src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java
changeset 58863 c16ac7a2eba4
parent 58836 31ec3e55fa3d
equal deleted inserted replaced
58861:2c3cc4b01880 58863:c16ac7a2eba4
    44 import jdk.jfr.Period;
    44 import jdk.jfr.Period;
    45 import jdk.jfr.StackTrace;
    45 import jdk.jfr.StackTrace;
    46 import jdk.jfr.Threshold;
    46 import jdk.jfr.Threshold;
    47 import jdk.jfr.ValueDescriptor;
    47 import jdk.jfr.ValueDescriptor;
    48 import jdk.jfr.internal.RequestEngine.RequestHook;
    48 import jdk.jfr.internal.RequestEngine.RequestHook;
       
    49 import jdk.jfr.internal.consumer.RepositoryFiles;
    49 import jdk.jfr.internal.handlers.EventHandler;
    50 import jdk.jfr.internal.handlers.EventHandler;
    50 
    51 
    51 public final class MetadataRepository {
    52 public final class MetadataRepository {
    52 
    53 
    53     private static final JVM jvm = JVM.getJVM();
    54     private static final JVM jvm = JVM.getJVM();
   205             c.disable();
   206             c.disable();
   206         }
   207         }
   207     }
   208     }
   208 
   209 
   209     public synchronized List<EventControl> getEventControls() {
   210     public synchronized List<EventControl> getEventControls() {
   210         List<EventControl> controls = new ArrayList<>();
   211         List<Class<? extends jdk.internal.event.Event>> eventClasses = jvm.getAllEventClasses();
       
   212         ArrayList<EventControl> controls = new ArrayList<>(eventClasses.size() + nativeControls.size());
   211         controls.addAll(nativeControls);
   213         controls.addAll(nativeControls);
   212         for (EventHandler eh : getEventHandlers()) {
   214         for (Class<? extends jdk.internal.event.Event> clazz : eventClasses) {
   213             controls.add(eh.getEventControl());
   215             EventHandler eh = Utils.getHandler(clazz);
       
   216             if (eh != null) {
       
   217                 controls.add(eh.getEventControl());
       
   218             }
   214         }
   219         }
   215         return controls;
   220         return controls;
   216     }
   221     }
   217 
   222 
   218     private void storeDescriptorInJVM() throws InternalError {
   223     private void storeDescriptorInJVM() throws InternalError {
   261     synchronized void setOutput(String filename) {
   266     synchronized void setOutput(String filename) {
   262         if (staleMetadata) {
   267         if (staleMetadata) {
   263             storeDescriptorInJVM();
   268             storeDescriptorInJVM();
   264         }
   269         }
   265         jvm.setOutput(filename);
   270         jvm.setOutput(filename);
   266 
   271         if (filename != null) {
       
   272             RepositoryFiles.notifyNewFile();
       
   273         }
   267         unregisterUnloaded();
   274         unregisterUnloaded();
   268         if (unregistered) {
   275         if (unregistered) {
   269             if (typeLibrary.clearUnregistered()) {
   276             if (typeLibrary.clearUnregistered()) {
   270                 storeDescriptorInJVM();
   277                 storeDescriptorInJVM();
   271             }
   278             }
   307             return;
   314             return;
   308         }
   315         }
   309         throw new InternalError("Mirror class must have annotation " + MirrorEvent.class.getName());
   316         throw new InternalError("Mirror class must have annotation " + MirrorEvent.class.getName());
   310     }
   317     }
   311 
   318 
       
   319     public synchronized void flush() {
       
   320         if (staleMetadata) {
       
   321             storeDescriptorInJVM();
       
   322         }
       
   323         jvm.flush();
       
   324     }
       
   325 
   312 }
   326 }