--- old/src/share/classes/jdk/jfr/conf/default.jfc 2021-01-22 14:07:08.843112110 +0800 +++ new/src/share/classes/jdk/jfr/conf/default.jfc 2021-01-22 14:07:08.704106684 +0800 @@ -29,6 +29,7 @@ true + true --- old/src/share/classes/jdk/jfr/conf/profile.jfc 2021-01-22 14:07:09.566140337 +0800 +++ new/src/share/classes/jdk/jfr/conf/profile.jfc 2021-01-22 14:07:09.435135223 +0800 @@ -29,6 +29,7 @@ true + true --- old/test/jdk/jfr/event/runtime/TestThreadStartEndEvents.java 2021-01-22 14:07:10.308169306 +0800 +++ new/test/jdk/jfr/event/runtime/TestThreadStartEndEvents.java 2021-01-22 14:07:10.176164153 +0800 @@ -25,12 +25,17 @@ package jdk.jfr.event.runtime; +import static jdk.test.lib.Asserts.assertEQ; +import static jdk.test.lib.Asserts.assertNotNull; + import java.time.Duration; import java.util.List; import java.util.concurrent.CountDownLatch; import jdk.jfr.Recording; import jdk.jfr.consumer.RecordedEvent; +import jdk.jfr.consumer.RecordedMethod; +import jdk.jfr.consumer.RecordedStackTrace; import jdk.test.lib.jfr.EventNames; import jdk.test.lib.jfr.Events; @@ -62,19 +67,27 @@ recording.stop(); int currThreadIndex = 0; - long currentThreadId = Thread.currentThread().getId(); List events = Events.fromRecording(recording); + events.sort((e1, e2) -> e1.getStartTime().compareTo(e2.getStartTime())); Events.hasEvents(events); for (RecordedEvent event : events) { - System.out.println("Event:" + event); - if (event.getThread().getJavaThreadId() != currentThreadId) { + if (!event.getThread().getJavaName().startsWith(THREAD_NAME_PREFIX)) { continue; } + System.out.println("Event:" + event); // Threads should be started and stopped in the correct order. Events.assertEventThread(event, threads[currThreadIndex % threads.length]); String eventName = currThreadIndex < threads.length ? EVENT_NAME_THREAD_START : EVENT_NAME_THREAD_END; if (!eventName.equals(event.getEventType().getName())) { - throw new Exception("Expected event of tyoe " + eventName + " but got " + event.getEventType().getName()); + throw new Exception("Expected event of type " + eventName + " but got " + event.getEventType().getName()); + } + + if (eventName == EVENT_NAME_THREAD_START) { + Events.assertEventThread(event, "parentThread", Thread.currentThread()); + RecordedStackTrace stackTrace = event.getValue("stackTrace"); + assertNotNull(stackTrace); + RecordedMethod topMethod = stackTrace.getFrames().get(0).getMethod(); + assertEQ(topMethod.getName(), "startThread"); } currThreadIndex++; }