mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8315413: Remove special filtering of Continuation.yield0 in StackWalker
Reviewed-by: alanb
This commit is contained in:
parent
ea5aa61c8c
commit
c8acab1d91
4 changed files with 9 additions and 33 deletions
|
@ -543,12 +543,6 @@ final class StackStreamFactory {
|
||||||
final Class<?> at(int index) {
|
final Class<?> at(int index) {
|
||||||
return stackFrames[index].declaringClass();
|
return stackFrames[index].declaringClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
final boolean filter(int index) {
|
|
||||||
return stackFrames[index].declaringClass() == Continuation.class
|
|
||||||
&& "yield0".equals(stackFrames[index].getMethodName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final Function<? super Stream<StackFrame>, ? extends T> function; // callback
|
final Function<? super Stream<StackFrame>, ? extends T> function; // callback
|
||||||
|
@ -685,10 +679,6 @@ final class StackStreamFactory {
|
||||||
@Override
|
@Override
|
||||||
final Class<?> at(int index) { return classes[index];}
|
final Class<?> at(int index) { return classes[index];}
|
||||||
|
|
||||||
@Override
|
|
||||||
final boolean filter(int index) { return false; }
|
|
||||||
|
|
||||||
|
|
||||||
// ------ subclass may override the following methods -------
|
// ------ subclass may override the following methods -------
|
||||||
/**
|
/**
|
||||||
* Resizes the buffers for VM to fill in the next batch of stack frames.
|
* Resizes the buffers for VM to fill in the next batch of stack frames.
|
||||||
|
@ -820,12 +810,6 @@ final class StackStreamFactory {
|
||||||
final Class<?> at(int index) {
|
final Class<?> at(int index) {
|
||||||
return stackFrames[index].declaringClass();
|
return stackFrames[index].declaringClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
final boolean filter(int index) {
|
|
||||||
return stackFrames[index].declaringClass() == Continuation.class
|
|
||||||
&& "yield0".equals(stackFrames[index].getMethodName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LiveStackInfoTraverser(StackWalker walker,
|
LiveStackInfoTraverser(StackWalker walker,
|
||||||
|
@ -895,13 +879,6 @@ final class StackStreamFactory {
|
||||||
*/
|
*/
|
||||||
abstract Class<?> at(int index);
|
abstract Class<?> at(int index);
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter out frames at the top of a batch
|
|
||||||
* @param index the position of the frame.
|
|
||||||
* @return true if the frame should be skipped
|
|
||||||
*/
|
|
||||||
abstract boolean filter(int index);
|
|
||||||
|
|
||||||
// ------ subclass may override the following methods -------
|
// ------ subclass may override the following methods -------
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1007,8 +984,7 @@ final class StackStreamFactory {
|
||||||
this.fence = endIndex;
|
this.fence = endIndex;
|
||||||
for (int i = START_POS; i < fence; i++) {
|
for (int i = START_POS; i < fence; i++) {
|
||||||
if (isDebug) System.err.format(" frame %d: %s%n", i, at(i));
|
if (isDebug) System.err.format(" frame %d: %s%n", i, at(i));
|
||||||
if ((depth == 0 && filterStackWalkImpl(at(i))) // filter the frames due to the stack stream implementation
|
if (depth == 0 && filterStackWalkImpl(at(i))) { // filter the frames due to the stack stream implementation
|
||||||
|| filter(i)) {
|
|
||||||
origin++;
|
origin++;
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -92,7 +92,7 @@ public class Basic {
|
||||||
assertEquals(cont.isPreempted(), false);
|
assertEquals(cont.isPreempted(), false);
|
||||||
|
|
||||||
List<String> frames = cont.stackWalker().walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
List<String> frames = cont.stackWalker().walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "bar", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "bar", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
||||||
}
|
}
|
||||||
assertEquals(res.get(), 247);
|
assertEquals(res.get(), 247);
|
||||||
assertEquals(cont.isPreempted(), false);
|
assertEquals(cont.isPreempted(), false);
|
||||||
|
|
|
@ -798,7 +798,7 @@ public class BasicExt {
|
||||||
cont.stackWalker()
|
cont.stackWalker()
|
||||||
.walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
.walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
assertEquals(frames, cont.isDone() ? List.of()
|
assertEquals(frames, cont.isDone() ? List.of()
|
||||||
: Arrays.asList("yield", "ord104_testMethod_dontinline",
|
: Arrays.asList("yield0", "yield", "ord104_testMethod_dontinline",
|
||||||
"ord103_testMethod_dontinline",
|
"ord103_testMethod_dontinline",
|
||||||
"ord102_testMethod_dontinline",
|
"ord102_testMethod_dontinline",
|
||||||
"ord101_testMethod_dontinline",
|
"ord101_testMethod_dontinline",
|
||||||
|
|
|
@ -74,27 +74,27 @@ public class Scoped {
|
||||||
|
|
||||||
frames = cont.stackWalker().walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
frames = cont.stackWalker().walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
System.out.println("No scope: " + frames);
|
System.out.println("No scope: " + frames);
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "yield0", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
||||||
|
|
||||||
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), A).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), A).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
System.out.println("A: " + frames);
|
System.out.println("A: " + frames);
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "yield0", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
||||||
|
|
||||||
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), B).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), B).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
System.out.println("B: " + frames);
|
System.out.println("B: " + frames);
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter"));
|
||||||
|
|
||||||
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), C).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), C).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
System.out.println("C: " + frames);
|
System.out.println("C: " + frames);
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "lambda$bar$14", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "lambda$bar$14", "run", "enter0", "enter"));
|
||||||
|
|
||||||
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), K).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), K).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
System.out.println("K: " + frames);
|
System.out.println("K: " + frames);
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "yield0", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
||||||
|
|
||||||
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), null).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
frames = cont.stackWalker(EnumSet.noneOf(StackWalker.Option.class), null).walk(fs -> fs.map(StackWalker.StackFrame::getMethodName).collect(Collectors.toList()));
|
||||||
System.out.println("null: " + frames);
|
System.out.println("null: " + frames);
|
||||||
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
assertEquals(frames, cont.isDone() ? List.of() : Arrays.asList("yield0", "yield", "lambda$bar$14", "run", "enter0", "enter", "run", "bar", "lambda$foo$8", "run", "enter0", "enter", "yield0", "run", "foo", "lambda$test1$0", "run", "enter0", "enter"));
|
||||||
}
|
}
|
||||||
assertEquals(res.get(), 2);
|
assertEquals(res.get(), 2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue