Skip to content

Commit 5e4048d

Browse files
fix skipCount to apply to virtual frames.
1 parent cab4264 commit 5e4048d

18 files changed

+113
-43
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrEvent.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
* IDs depend on the JDK version (see metadata.xml file) and are computed at image build time.
4040
*/
4141
public final class JfrEvent {
42-
public static final JfrEvent ThreadStart = create("jdk.ThreadStart");
42+
private static final int defaultInternalSkipCount = VMInspectionOptions.JfrTrimInternalStackTraces.getValue() ? 5 : 0;
43+
public static final JfrEvent ThreadStart = create("jdk.ThreadStart", defaultInternalSkipCount - 1);
4344
public static final JfrEvent ThreadEnd = create("jdk.ThreadEnd");
4445
public static final JfrEvent ThreadCPULoad = create("jdk.ThreadCPULoad");
4546
public static final JfrEvent DataLoss = create("jdk.DataLoss");
@@ -70,25 +71,32 @@ public final class JfrEvent {
7071
public static final JfrEvent ThreadAllocationStatistics = create("jdk.ThreadAllocationStatistics");
7172
public static final JfrEvent SystemGC = create("jdk.SystemGC", JfrEventFlags.HasDuration);
7273
public static final JfrEvent AllocationRequiringGC = create("jdk.AllocationRequiringGC");
73-
public static final JfrEvent OldObjectSample = create("jdk.OldObjectSample");
74+
public static final JfrEvent OldObjectSample = create("jdk.OldObjectSample", 7);
7475
public static final JfrEvent ObjectAllocationSample = create("jdk.ObjectAllocationSample", JfrEventFlags.SupportsThrottling);
7576
public static final JfrEvent NativeMemoryUsage = create("jdk.NativeMemoryUsage");
7677
public static final JfrEvent NativeMemoryUsageTotal = create("jdk.NativeMemoryUsageTotal");
7778

7879
private final long id;
7980
private final String name;
8081
private final int flags;
82+
private final int skipCount;
8183

8284
@Platforms(Platform.HOSTED_ONLY.class)
8385
public static JfrEvent create(String name, JfrEventFlags... flags) {
84-
return new JfrEvent(name, flags);
86+
return new JfrEvent(name, defaultInternalSkipCount, flags);
8587
}
8688

8789
@Platforms(Platform.HOSTED_ONLY.class)
88-
private JfrEvent(String name, JfrEventFlags... flags) {
90+
public static JfrEvent create(String name, int skipCount, JfrEventFlags... flags) {
91+
return new JfrEvent(name, skipCount, flags);
92+
}
93+
94+
@Platforms(Platform.HOSTED_ONLY.class)
95+
private JfrEvent(String name, int skipCount, JfrEventFlags... flags) {
8996
this.id = JfrMetadataTypeLibrary.lookupPlatformEvent(name);
9097
this.name = name;
9198
this.flags = EnumBitmask.computeBitmask(flags);
99+
this.skipCount = skipCount;
92100
}
93101

94102
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
@@ -98,7 +106,7 @@ public long getId() {
98106

99107
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
100108
public int getSkipCount() {
101-
return VMInspectionOptions.JfrTrimInternalStackTraces.getValue() ? 3 : 0;
109+
return skipCount;
102110
}
103111

104112
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrStackWalker.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -272,9 +272,7 @@ private static int recordIp(SamplerSampleWriterData data, CodePointer ip) {
272272
/* Increment the number of seen frames. */
273273
data.setSeenFrames(data.getSeenFrames() + 1);
274274

275-
if (shouldSkipFrame(data)) {
276-
return NO_ERROR;
277-
} else if (shouldTruncate(data)) {
275+
if (shouldTruncate(data)) {
278276
return TRUNCATED;
279277
}
280278

@@ -288,15 +286,10 @@ private static int recordIp(SamplerSampleWriterData data, CodePointer ip) {
288286
return BUFFER_SIZE_EXCEEDED;
289287
}
290288

291-
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
292-
private static boolean shouldSkipFrame(SamplerSampleWriterData data) {
293-
return data.getSeenFrames() <= data.getSkipCount();
294-
}
295-
296289
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
297290
private static boolean shouldTruncate(SamplerSampleWriterData data) {
298-
int numFrames = data.getSeenFrames() - data.getSkipCount();
299-
if (numFrames > data.getMaxDepth()) {
291+
int maxFrames = data.getMaxDepth() + data.getSkipCount();
292+
if (data.getSeenFrames() > maxFrames) {
300293
/* The stack size exceeds given depth. Stop walk! */
301294
data.setTruncated(true);
302295
return true;

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/sampler/SamplerBuffersAccess.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ private static void serializeStackTraces(SamplerBuffer rawStackTraceBuffer) {
115115
int sampleSize = current.readInt(0);
116116
current = current.add(Integer.BYTES);
117117

118-
/* Padding. */
118+
/* Sample size, excluding the header and the end marker. */
119+
int skipCount = current.readInt(0);
119120
current = current.add(Integer.BYTES);
120121

121122
/* Tick. */
@@ -132,16 +133,16 @@ private static void serializeStackTraces(SamplerBuffer rawStackTraceBuffer) {
132133

133134
assert current.subtract(entryStart).equal(SamplerSampleWriter.getHeaderSize());
134135

135-
current = serializeStackTrace(current, end, sampleSize, sampleHash, isTruncated, sampleTick, threadId, threadState);
136+
current = serializeStackTrace(current, end, sampleSize, sampleHash, isTruncated, sampleTick, threadId, threadState, skipCount);
136137
}
137138

138139
SamplerBufferAccess.reinitialize(rawStackTraceBuffer);
139140
}
140141

141142
@Uninterruptible(reason = "Wraps the call to the possibly interruptible serializer.", calleeMustBe = false)
142143
private static Pointer serializeStackTrace(Pointer rawStackTrace, Pointer bufferEnd, int sampleSize, int sampleHash,
143-
boolean isTruncated, long sampleTick, long threadId, long threadState) {
144+
boolean isTruncated, long sampleTick, long threadId, long threadState, int skipCount) {
144145
return SamplerStackTraceSerializer.singleton().serializeStackTrace(rawStackTrace, bufferEnd, sampleSize,
145-
sampleHash, isTruncated, sampleTick, threadId, threadState);
146+
sampleHash, isTruncated, sampleTick, threadId, threadState, skipCount);
146147
}
147148
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/sampler/SamplerJfrStackTraceSerializer.java

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,16 @@ public final class SamplerJfrStackTraceSerializer implements SamplerStackTraceSe
5757
/** This value is used by multiple threads but only by a single thread at a time. */
5858
private static final CodeInfoDecoder.FrameInfoCursor FRAME_INFO_CURSOR = new CodeInfoDecoder.FrameInfoCursor();
5959

60+
/*
61+
* This is static so that a single instance can be preallocated and reused. Only one thread ever
62+
* serializes at a given time.
63+
*/
64+
private static final FrameCountData FRAME_COUNT_DATA = new FrameCountData();
65+
6066
@Override
6167
@Uninterruptible(reason = "Prevent JFR recording and epoch change.")
6268
public Pointer serializeStackTrace(Pointer rawStackTrace, Pointer bufferEnd, int sampleSize, int sampleHash,
63-
boolean isTruncated, long sampleTick, long threadId, long threadState) {
69+
boolean isTruncated, long sampleTick, long threadId, long threadState, int skipCount) {
6470
Pointer current = rawStackTrace;
6571
CIntPointer statusPtr = StackValue.get(CIntPointer.class);
6672
JfrStackTraceRepository.JfrStackTraceTableEntry entry = SubstrateJVM.getStackTraceRepo().getOrPutStackTrace(current, Word.unsigned(sampleSize), sampleHash, statusPtr);
@@ -70,7 +76,7 @@ public Pointer serializeStackTrace(Pointer rawStackTrace, Pointer bufferEnd, int
7076
if (status == JfrStackTraceRepository.JfrStackTraceTableEntryStatus.INSERTED || status == JfrStackTraceRepository.JfrStackTraceTableEntryStatus.EXISTING_RAW) {
7177
/* Walk the IPs and serialize the stacktrace. */
7278
assert current.add(sampleSize).belowThan(bufferEnd);
73-
boolean serialized = serializeStackTrace(current, sampleSize, isTruncated, stackTraceId);
79+
boolean serialized = serializeStackTrace(current, sampleSize, isTruncated, stackTraceId, skipCount);
7480
if (serialized) {
7581
SubstrateJVM.getStackTraceRepo().commitSerializedStackTrace(entry);
7682
}
@@ -100,7 +106,7 @@ public Pointer serializeStackTrace(Pointer rawStackTrace, Pointer bufferEnd, int
100106
}
101107

102108
@Uninterruptible(reason = "Prevent JFR recording and epoch change.")
103-
private static boolean serializeStackTrace(Pointer rawStackTrace, int sampleSize, boolean isTruncated, long stackTraceId) {
109+
private static boolean serializeStackTrace(Pointer rawStackTrace, int sampleSize, boolean isTruncated, long stackTraceId, int skipCount) {
104110
assert sampleSize % Long.BYTES == 0;
105111

106112
JfrBuffer targetBuffer = SubstrateJVM.getStackTraceRepo().getCurrentBuffer();
@@ -112,18 +118,20 @@ private static boolean serializeStackTrace(Pointer rawStackTrace, int sampleSize
112118
* One IP may correspond to multiple Java-level stack frames. We need to precompute the
113119
* number of stack trace elements because the count can't be patched later on
114120
* (JfrNativeEventWriter.putInt() would not necessarily reserve enough bytes).
121+
*
122+
* The first pass-through also sets FRAME_COUNT_DATA.isTruncated().
115123
*/
116-
int numStackTraceElements = visitRawStackTrace(rawStackTrace, sampleSize, Word.nullPointer());
124+
int numStackTraceElements = visitRawStackTrace(rawStackTrace, sampleSize, Word.nullPointer(), skipCount);
117125
if (numStackTraceElements == 0) {
118126
return false;
119127
}
120128

121129
JfrNativeEventWriterData data = StackValue.get(JfrNativeEventWriterData.class);
122130
JfrNativeEventWriterDataAccess.initialize(data, targetBuffer);
123131
JfrNativeEventWriter.putLong(data, stackTraceId);
124-
JfrNativeEventWriter.putBoolean(data, isTruncated);
132+
JfrNativeEventWriter.putBoolean(data, isTruncated || FRAME_COUNT_DATA.isTruncated());
125133
JfrNativeEventWriter.putInt(data, numStackTraceElements);
126-
visitRawStackTrace(rawStackTrace, sampleSize, data);
134+
visitRawStackTrace(rawStackTrace, sampleSize, data, skipCount);
127135
boolean success = JfrNativeEventWriter.commit(data);
128136

129137
/* Buffer can get replaced with a larger one. */
@@ -132,10 +140,14 @@ private static boolean serializeStackTrace(Pointer rawStackTrace, int sampleSize
132140
}
133141

134142
@Uninterruptible(reason = "Prevent JFR recording and epoch change.")
135-
private static int visitRawStackTrace(Pointer rawStackTrace, int sampleSize, JfrNativeEventWriterData data) {
143+
private static int visitRawStackTrace(Pointer rawStackTrace, int sampleSize, JfrNativeEventWriterData data, int skipCount) {
136144
int numStackTraceElements = 0;
137145
Pointer rawStackTraceEnd = rawStackTrace.add(sampleSize);
138146
Pointer ipPtr = rawStackTrace;
147+
148+
// Reset FrameCountData before every serialization of a new stacktrace.
149+
FRAME_COUNT_DATA.reset(skipCount);
150+
139151
while (ipPtr.belowThan(rawStackTraceEnd)) {
140152
long ip = ipPtr.readLong(0);
141153
numStackTraceElements += visitFrame(data, ip);
@@ -167,10 +179,18 @@ private static int visitFrame(JfrNativeEventWriterData data, CodeInfo codeInfo,
167179
int numStackTraceElements = 0;
168180
FRAME_INFO_CURSOR.initialize(codeInfo, ip, false);
169181
while (FRAME_INFO_CURSOR.advance()) {
182+
if (FRAME_COUNT_DATA.shouldSkip()) {
183+
FRAME_COUNT_DATA.incrementSkipped();
184+
continue;
185+
} else if (FRAME_COUNT_DATA.shouldTruncate()) {
186+
FRAME_COUNT_DATA.setTruncated();
187+
break;
188+
}
170189
if (data.isNonNull()) {
171190
FrameInfoQueryResult frame = FRAME_INFO_CURSOR.get();
172191
serializeStackTraceElement(data, frame);
173192
}
193+
FRAME_COUNT_DATA.incrementTotal();
174194
numStackTraceElements++;
175195
}
176196
return numStackTraceElements;
@@ -185,4 +205,49 @@ private static void serializeStackTraceElement(JfrNativeEventWriterData data, Fr
185205
JfrNativeEventWriter.putInt(data, stackTraceElement.getBci());
186206
JfrNativeEventWriter.putLong(data, JfrFrameType.FRAME_AOT_COMPILED.getId());
187207
}
208+
209+
private static final class FrameCountData {
210+
private int skipcount;
211+
private int totalCount;
212+
private int skippedCount;
213+
private boolean truncated;
214+
215+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
216+
public void reset(int skipCount) {
217+
this.skipcount = skipCount;
218+
totalCount = 0;
219+
skippedCount = 0;
220+
truncated = false;
221+
}
222+
223+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true) //
224+
public boolean shouldSkip() {
225+
return skippedCount < skipcount;
226+
}
227+
228+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true) //
229+
public boolean shouldTruncate() {
230+
return totalCount > SubstrateJVM.getStackTraceRepo().getStackTraceDepth();
231+
}
232+
233+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
234+
public void setTruncated() {
235+
truncated = true;
236+
}
237+
238+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
239+
public boolean isTruncated() {
240+
return truncated;
241+
}
242+
243+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
244+
public void incrementSkipped() {
245+
skippedCount++;
246+
}
247+
248+
@Uninterruptible(reason = Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
249+
public void incrementTotal() {
250+
totalCount++;
251+
}
252+
}
188253
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/sampler/SamplerSampleWriter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ public static void begin(SamplerSampleWriterData data) {
6262
SamplerSampleWriter.putInt(data, 0);
6363
/* Sample size. (will be patched later) */
6464
SamplerSampleWriter.putInt(data, 0);
65-
/* Padding so that the long values below are aligned. */
66-
SamplerSampleWriter.putInt(data, 0);
65+
/* Skipcount will be used later during serialization. */
66+
SamplerSampleWriter.putInt(data, data.getSkipCount());
6767

6868
SamplerSampleWriter.putLong(data, JfrTicks.elapsedTicks());
6969
SamplerSampleWriter.putLong(data, SubstrateJVM.getCurrentThreadId());

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/sampler/SamplerStackTraceSerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ static SamplerStackTraceSerializer singleton() {
5252
* @param sampleTick The timestamp of the sample.
5353
* @param threadId A unique identifier for the sampled thread.
5454
* @param threadState The state of the sampled thread.
55+
* @param skipCount The number of top frames to omit.
5556
* @return A pointer to the next stack trace entry or the end of the buffer.
5657
*/
5758
Pointer serializeStackTrace(Pointer rawStackTrace, Pointer bufferEnd, int sampleSize, int sampleHash,
58-
boolean isTruncated, long sampleTick, long threadId, long threadState);
59+
boolean isTruncated, long sampleTick, long threadId, long threadState, int skipCount);
5960
}

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestAllocationRequiringGCEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void test() throws Throwable {
5555
private static void validateEvents(List<RecordedEvent> events) {
5656
assertTrue(events.size() > 0);
5757
for (RecordedEvent event : events) {
58-
checkStackTraceTrimming(event, "emit");
58+
checkStackTraceTrimming(event, "maybeCollectOnAllocation");
5959
}
6060
}
6161

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestJavaMonitorEnterEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private void validateEvents(List<RecordedEvent> events) {
9191
break;
9292
}
9393

94-
checkStackTraceTrimming(event, "emit");
94+
checkStackTraceTrimming(event, "monitorEnter");
9595
}
9696
assertTrue("Expected monitor blocked event not found", found);
9797
}

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestJavaMonitorInflateEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private void validateEvents(List<RecordedEvent> events) {
9191
foundCauseEnter = true;
9292
}
9393

94-
checkStackTraceTrimming(event, "emit");
94+
checkStackTraceTrimming(event, "monitorEnter");
9595
}
9696
assertTrue("Expected monitor inflate event not found.", foundCauseEnter);
9797
}

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestJavaMonitorWaitEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ private void validateEvents(List<RecordedEvent> events) {
114114
}
115115
lastEventThreadName = eventThread;
116116

117-
checkStackTraceTrimming(event, "emit");
117+
checkStackTraceTrimming(event, "await");
118118
}
119119
assertFalse("Wrong number of events: " + prodCount + " " + consCount,
120120
abs(prodCount - consCount) > 1 || abs(consCount - COUNT) > 1);

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestJavaMonitorWaitInterruptEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private void validateEvents(List<RecordedEvent> events) {
140140
simpleWaitFound = true;
141141
}
142142

143-
checkStackTraceTrimming(event, "emit");
143+
checkStackTraceTrimming(event, "await");
144144
}
145145
assertTrue("Couldn't find expected wait events. SimpleWaiter: " + simpleWaitFound + " interrupted: " + interruptedFound,
146146
simpleWaitFound && interruptedFound);

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestJavaMonitorWaitNotifyAllEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private void validateEvents(List<RecordedEvent> events) {
108108
waitersFound++;
109109
}
110110

111-
checkStackTraceTrimming(event, "emit");
111+
checkStackTraceTrimming(event, "await");
112112
}
113113
assertTrue("Couldn't find expected wait events. NotifierFound: " + notifierFound + " waitersFound: " + waitersFound,
114114
notifierFound && waitersFound == 2);

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestJavaMonitorWaitTimeoutEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private void validateEvents(List<RecordedEvent> events) {
134134
simpleWaitFound = true;
135135
}
136136

137-
checkStackTraceTrimming(event, "emit");
137+
checkStackTraceTrimming(event, "await");
138138
}
139139
assertTrue("Couldn't find expected wait events. SimpleWaiter: " + simpleWaitFound + " timeout: " + timeoutFound,
140140
simpleWaitFound && timeoutFound);

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestObjectAllocationInNewTLABEvent.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,14 @@ private static void validateEvents(List<RecordedEvent> events) {
9595
} else if (className.equals(byte[].class.getName())) {
9696
foundBigByteArray = true;
9797
}
98+
checkStackTraceTrimming(event, "slowPathNewArrayLikeObject0");
9899
} else if (allocationSize >= K && tlabSize == alignedHeapChunkSize && className.equals(byte[].class.getName())) {
99100
foundSmallByteArray = true;
101+
checkStackTraceTrimming(event, "slowPathNewArrayLikeObject0");
100102
} else if (tlabSize == alignedHeapChunkSize && className.equals(Helper.class.getName())) {
101103
foundInstance = true;
104+
checkStackTraceTrimming(event, "slowPathNewInstanceWithoutAllocating");
102105
}
103-
104-
checkStackTraceTrimming(event, "emit");
105106
}
106107

107108
assertTrue(foundBigCharArray);

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestObjectAllocationSampleEvent.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,13 @@ private static void validateEvents(List<RecordedEvent> events) {
7676
// verify previous owner
7777
if (className.equals(char[].class.getName())) {
7878
foundCharArray = true;
79+
checkStackTraceTrimming(event, "slowPathNewArrayLikeObject0");
80+
7981
} else if (className.equals(byte[].class.getName())) {
8082
foundByteArray = true;
83+
checkStackTraceTrimming(event, "slowPathNewArrayLikeObject0");
8184
}
8285
}
83-
84-
checkStackTraceTrimming(event, "emit");
8586
}
8687

8788
assertTrue(foundCharArray);

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestSystemGCEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private static void validateEvents(List<RecordedEvent> events) {
5858
assertTrue(event.getStartTime().toEpochMilli() <= System.currentTimeMillis());
5959
assertFalse(event.getBoolean("invokedConcurrent"));
6060

61-
checkStackTraceTrimming(event, "emit");
61+
checkStackTraceTrimming(event, "gc");
6262
}
6363
}
6464
}

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/TestThreadParkEvents.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private static void validateEvents(List<RecordedEvent> events) {
9696
parkUntilFound = true;
9797
}
9898
}
99-
checkStackTraceTrimming(event, "emit");
99+
checkStackTraceTrimming(event, "park");
100100
}
101101

102102
assertTrue(parkNanosFound);

0 commit comments

Comments
 (0)