23 * questions. |
23 * questions. |
24 */ |
24 */ |
25 |
25 |
26 package jdk.jfr.api.consumer.recordingstream; |
26 package jdk.jfr.api.consumer.recordingstream; |
27 |
27 |
|
28 import java.io.IOException; |
28 import java.nio.file.Path; |
29 import java.nio.file.Path; |
29 import java.nio.file.Paths; |
30 import java.nio.file.Paths; |
30 import java.time.Duration; |
31 import java.time.Duration; |
31 import java.time.Instant; |
32 import java.time.Instant; |
|
33 import java.util.ArrayList; |
|
34 import java.util.List; |
32 import java.util.concurrent.atomic.AtomicBoolean; |
35 import java.util.concurrent.atomic.AtomicBoolean; |
33 |
36 |
34 import jdk.jfr.Event; |
37 import jdk.jfr.Event; |
35 import jdk.jfr.Name; |
38 import jdk.jfr.Name; |
36 import jdk.jfr.Recording; |
39 import jdk.jfr.Recording; |
37 import jdk.jfr.StackTrace; |
40 import jdk.jfr.StackTrace; |
|
41 import jdk.jfr.Timestamp; |
38 import jdk.jfr.consumer.EventStream; |
42 import jdk.jfr.consumer.EventStream; |
39 import jdk.jfr.consumer.RecordedEvent; |
43 import jdk.jfr.consumer.RecordedEvent; |
40 import jdk.jfr.consumer.RecordingFile; |
44 import jdk.jfr.consumer.RecordingFile; |
|
45 import jdk.jfr.consumer.RecordingStream; |
|
46 import jdk.test.lib.jfr.Events; |
41 |
47 |
42 /** |
48 /** |
43 * @test |
49 * @test |
44 * @summary Tests EventStream::setEndTime |
50 * @summary Tests EventStream::setEndTime |
45 * @key jfr |
51 * @key jfr |
54 public final static class Mark extends Event { |
60 public final static class Mark extends Event { |
55 public boolean before; |
61 public boolean before; |
56 } |
62 } |
57 |
63 |
58 public static void main(String... args) throws Exception { |
64 public static void main(String... args) throws Exception { |
|
65 testEventStream(); |
|
66 testRecordingStream(); |
|
67 } |
|
68 |
|
69 @StackTrace(false) |
|
70 public final static class Now extends Event { |
|
71 @Timestamp(Timestamp.MILLISECONDS_SINCE_EPOCH) |
|
72 public long timestamp; |
|
73 } |
|
74 |
|
75 private static void testRecordingStream() throws Exception { |
|
76 try (RecordingStream rs = new RecordingStream()) { |
|
77 AtomicBoolean fail = new AtomicBoolean(); |
|
78 Instant endTime = Instant.now().plus(Duration.ofSeconds(1)); |
|
79 rs.setReuse(false); |
|
80 rs.onEvent(e -> { |
|
81 if (e.getEndTime().isAfter(endTime)) { |
|
82 fail.set(true); |
|
83 } |
|
84 }); |
|
85 rs.setEndTime(endTime); |
|
86 rs.startAsync(); |
|
87 for (int i = 0; i < 100; i++) { |
|
88 Now m = new Now(); |
|
89 m.commit(); |
|
90 Thread.sleep(10); |
|
91 } |
|
92 } |
|
93 } |
|
94 |
|
95 private static void testEventStream() throws InterruptedException, IOException, Exception { |
59 try (Recording r = new Recording()) { |
96 try (Recording r = new Recording()) { |
60 r.setFlushInterval(Duration.ofSeconds(1)); |
97 r.setFlushInterval(Duration.ofSeconds(1)); |
61 r.start(); |
98 r.start(); |
62 Mark event1 = new Mark(); |
99 Mark event1 = new Mark(); |
63 event1.begin(); // start time |
100 event1.begin(); // start time |
64 event1.before = true; |
101 event1.before = true; |
65 advanceClock(); |
102 advanceClock(); |
66 event1.commit(); |
103 event1.commit(); |
67 |
104 |
68 Mark event2 = new Mark(); |
105 Mark event2 = new Mark(); |
69 event2.begin(); // end time |
106 event2.begin(); // end time |
70 advanceClock(); |
107 advanceClock(); |
71 Thread.sleep(100); |
108 Thread.sleep(100); |
72 event2.before = false; |
109 event2.before = false; |
73 event2.commit(); |
110 event2.commit(); |
74 |
111 |