71 for (IRecordingDescriptor availableRecording : getFlightRecorderService().getAvailableRecordings()) { 72 if (availableRecording.getId().longValue() == 0L) { 73 return availableRecording; 74 } 75 } 76 return null; 77 } 78 79 protected IRecordingDescriptor getContinuousRecording() 80 throws FlightRecorderException, ConnectionException, ServiceNotAvailableException { 81 for (IRecordingDescriptor availableRecording : getFlightRecorderService().getAvailableRecordings()) { 82 if (availableRecording.isContinuous()) { 83 return availableRecording; 84 } 85 } 86 return null; 87 } 88 89 protected IRecordingDescriptor startContinuousRecording() throws Exception { 90 Random rnd = new Random(); 91 String name = "test_recording_" + rnd.nextInt() % 4711; //$NON-NLS-1$ 92 IFlightRecorderService service = getFlightRecorderService(); 93 IConstrainedMap<String> recordingOptions = new RecordingOptionsBuilder(service).name(name).duration(0L).build(); 94 IRecordingDescriptor recording = service.start(recordingOptions, service.getDefaultEventOptions()); 95 System.out.println("Started " + recording.getName()); //$NON-NLS-1$ 96 IConstrainedMap<String> options = service.getRecordingOptions(recording); 97 Object durationOption = options.get(RecordingOptionsBuilder.KEY_DURATION); 98 // FIXME: It seems duration may be null for continuous recordings on Java 9 and later. Check with specification. 99 // assertNotNull(durationOption); 100 if (durationOption != null) { 101 assertSame(SECOND.quantity(0), (IQuantity) durationOption); 102 } 103 assertEquals(IRecordingDescriptor.RecordingState.RUNNING, recording.getState()); 104 105 assertEquals(name, recording.getName()); 106 return recording; 107 } 108 109 protected void stopRecording(IRecordingDescriptor recording) throws Exception { 110 IFlightRecorderService service = getFlightRecorderService(); 111 service.stop(recording); 112 for (int stopCount = 0; stopCount < 15; stopCount += 1) { 113 recording = service.getUpdatedRecordingDescription(recording); 114 if (!recording.getState().equals(IRecordingDescriptor.RecordingState.STOPPING)) { 115 break; 116 } 117 Thread.sleep(1000); 118 } 119 assertEquals(IRecordingDescriptor.RecordingState.STOPPED, recording.getState()); 120 System.out.println("Stopped " + recording.getName()); //$NON-NLS-1$ 121 service.close(recording); 122 recording = service.getUpdatedRecordingDescription(recording); 123 assertNull(recording); 124 } 125 126 protected static EventOptionID jvm(String path, String option) { 127 return new EventOptionID(jvm(path), option); 128 } 129 130 protected static EventOptionID jdk(String path, String option) { 131 return new EventOptionID(jdk(path), option); 132 } 133 134 protected static EventOptionID jfr_info(String path, String option) { 135 return new EventOptionID(jfr_info(path), option); 136 } 137 138 protected static EventOptionID v2(String name, String option) { 139 return new EventOptionID(v2(name), option); 140 } | 71 for (IRecordingDescriptor availableRecording : getFlightRecorderService().getAvailableRecordings()) { 72 if (availableRecording.getId().longValue() == 0L) { 73 return availableRecording; 74 } 75 } 76 return null; 77 } 78 79 protected IRecordingDescriptor getContinuousRecording() 80 throws FlightRecorderException, ConnectionException, ServiceNotAvailableException { 81 for (IRecordingDescriptor availableRecording : getFlightRecorderService().getAvailableRecordings()) { 82 if (availableRecording.isContinuous()) { 83 return availableRecording; 84 } 85 } 86 return null; 87 } 88 89 protected IRecordingDescriptor startContinuousRecording() throws Exception { 90 Random rnd = new Random(); 91 String name = "test_recording_" + rnd.nextInt() % 4711; 92 IFlightRecorderService service = getFlightRecorderService(); 93 IConstrainedMap<String> recordingOptions = new RecordingOptionsBuilder(service).name(name).duration(0L).build(); 94 IRecordingDescriptor recording = service.start(recordingOptions, service.getDefaultEventOptions()); 95 System.out.println("Started " + recording.getName()); 96 IConstrainedMap<String> options = service.getRecordingOptions(recording); 97 Object durationOption = options.get(RecordingOptionsBuilder.KEY_DURATION); 98 // FIXME: It seems duration may be null for continuous recordings on Java 9 and later. Check with specification. 99 // assertNotNull(durationOption); 100 if (durationOption != null) { 101 assertSame(SECOND.quantity(0), (IQuantity) durationOption); 102 } 103 assertEquals(IRecordingDescriptor.RecordingState.RUNNING, recording.getState()); 104 105 assertEquals(name, recording.getName()); 106 return recording; 107 } 108 109 protected void stopRecording(IRecordingDescriptor recording) throws Exception { 110 IFlightRecorderService service = getFlightRecorderService(); 111 service.stop(recording); 112 for (int stopCount = 0; stopCount < 15; stopCount += 1) { 113 recording = service.getUpdatedRecordingDescription(recording); 114 if (!recording.getState().equals(IRecordingDescriptor.RecordingState.STOPPING)) { 115 break; 116 } 117 Thread.sleep(1000); 118 } 119 assertEquals(IRecordingDescriptor.RecordingState.STOPPED, recording.getState()); 120 System.out.println("Stopped " + recording.getName()); 121 service.close(recording); 122 recording = service.getUpdatedRecordingDescription(recording); 123 assertNull(recording); 124 } 125 126 protected static EventOptionID jvm(String path, String option) { 127 return new EventOptionID(jvm(path), option); 128 } 129 130 protected static EventOptionID jdk(String path, String option) { 131 return new EventOptionID(jdk(path), option); 132 } 133 134 protected static EventOptionID jfr_info(String path, String option) { 135 return new EventOptionID(jfr_info(path), option); 136 } 137 138 protected static EventOptionID v2(String name, String option) { 139 return new EventOptionID(v2(name), option); 140 } |