Guest User

Untitled

a guest
Oct 21st, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. import org.openjdk.jmh.annotations.Benchmark;
  2.  
  3. public class StackWalkerExtraction {
  4.  
  5. private static Object call(int depth, Callable<?> result) throws Exception {
  6. if (depth == 0) {
  7. return result.call();
  8. } else {
  9. return call(depth - 1, result);
  10. }
  11. }
  12.  
  13. @Benchmark
  14. public Object snapshot() throws Exception {
  15. return call(100, () -> StackWalker.getInstance().walk(new InstanaWalker(35, 0)));
  16. }
  17.  
  18. @Benchmark
  19. public Object complete() throws Exception {
  20. return call(100, () -> StackWalker.getInstance().walk(new InstanaWalker(35, 0)));
  21. }
  22.  
  23. private class RawWalker implements Function<Stream<StackWalker.StackFrame>, StackWalker.StackFrame[]> {
  24.  
  25. private final int stackDepth, startFrame;
  26.  
  27. RawWalker(int stackDepth, int startFrame) {
  28. this.stackDepth = stackDepth;
  29. this.startFrame = startFrame;
  30. }
  31.  
  32. @Override
  33. public StackWalker.StackFrame[] apply(Stream<StackWalker.StackFrame> stackFrameStream) {
  34. StackWalker.StackFrame[] elements = new StackWalker.StackFrame[stackDepth];
  35. Iterator<StackWalker.StackFrame> it = stackFrameStream.skip(startFrame).limit(stackDepth).iterator();
  36. int index = 0;
  37. while (it.hasNext()) {
  38. elements[index++] = it.next();
  39. }
  40. return elements;
  41. }
  42. }
  43.  
  44.  
  45. private class TransformingWalker implements Function<Stream<StackWalker.StackFrame>, StackWalker.StackFrame[]> {
  46.  
  47. private final int stackDepth, startFrame;
  48.  
  49. TransformingWalker(int stackDepth, int startFrame) {
  50. this.stackDepth = stackDepth;
  51. this.startFrame = startFrame;
  52. }
  53.  
  54. @Override
  55. public StackFrameElement[] apply(Stream<StackWalker.StackFrame> stackFrameStream) {
  56. StackFrameElement[] elements = new StackWalker.StackFrame[stackDepth];
  57. Iterator<StackWalker.StackFrame> it = stackFrameStream.skip(startFrame).limit(stackDepth).iterator();
  58. int index = 0;
  59. while (it.hasNext()) {
  60. elements[index++] = it.next().toStackFrameElement();
  61. }
  62. return elements;
  63. }
  64. }
  65. }
Add Comment
Please, Sign In to add comment