public class com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent
  super_class: java.lang.Object
{
  public static final int DumpEvery;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final int DumpOnlyTopMethods;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  private static final java.util.Deque<java.lang.String> callStack;
    descriptor: Ljava/util/Deque;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Deque<Ljava/lang/String;>;

  private static final java.util.Map<java.lang.String, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter> bindingExecTimes;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;

  private static final java.util.Map<java.lang.String, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter> bindingCalls;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;

  private static final java.util.Map<java.lang.String, java.util.Map<java.lang.String, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter>> jniExecTimes;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;>;

  private static final java.util.Map<java.lang.String, java.util.Map<java.lang.String, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter>> jniCalls;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;>;

  private static long last;
    descriptor: J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static long lastJniCallBegin;
    descriptor: J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static java.util.Map<java.lang.String, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter> currentJNICalls;
    descriptor: Ljava/util/Map;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Signature: Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;

  private static java.util.Map<java.lang.String, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter> currentJNIExecTimes;
    descriptor: Ljava/util/Map;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Signature: Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;

  private static int jniMethodCallStack;
    descriptor: I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static long firstBoundaryCrossedAt;
    descriptor: J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 57
            ldc Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.$assertionsDisabled:Z
         3: .line 60
            ldc "node.native.profiler.interval"
            iconst_0
            invokestatic java.lang.Integer.getInteger:(Ljava/lang/String;I)Ljava/lang/Integer;
            invokevirtual java.lang.Integer.intValue:()I
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.DumpEvery:I
         4: .line 63
            ldc "node.native.profiler.dumptop"
            iconst_0
            invokestatic java.lang.Integer.getInteger:(Ljava/lang/String;I)Ljava/lang/Integer;
            invokevirtual java.lang.Integer.intValue:()I
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.DumpOnlyTopMethods:I
         5: .line 65
            new java.util.ArrayDeque
            dup
            invokespecial java.util.ArrayDeque.<init>:()V
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
         6: .line 66
            new java.util.HashMap
            dup
            bipush 100
            invokespecial java.util.HashMap.<init>:(I)V
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingExecTimes:Ljava/util/Map;
         7: .line 67
            new java.util.HashMap
            dup
            bipush 100
            invokespecial java.util.HashMap.<init>:(I)V
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
         8: .line 68
            new java.util.HashMap
            dup
            bipush 100
            invokespecial java.util.HashMap.<init>:(I)V
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniExecTimes:Ljava/util/Map;
         9: .line 69
            new java.util.HashMap
            dup
            bipush 100
            invokespecial java.util.HashMap.<init>:(I)V
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniCalls:Ljava/util/Map;
        10: .line 71
            invokestatic java.lang.System.nanoTime:()J
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.last:J
        11: .line 72
            lconst_0
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.lastJniCallBegin:J
        12: .line 77
            iconst_0
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
        13: .line 78
            lconst_0
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.firstBoundaryCrossedAt:J
        14: .line 86
            invokestatic java.lang.Runtime.getRuntime:()Ljava/lang/Runtime;
            new com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$1
            dup
            invokespecial com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$1.<init>:()V
            invokevirtual java.lang.Runtime.addShutdownHook:(Ljava/lang/Thread;)V
        15: .line 92
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent this
         0: .line 57
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent;

  public static void premain(java.lang.String, java.lang.instrument.Instrumentation);
    descriptor: (Ljava/lang/String;Ljava/lang/instrument/Instrumentation;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.lang.String agentArgs
        start local 1 // java.lang.instrument.Instrumentation inst
         0: .line 81
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "=== Native boundary profiling agent active ==="
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         1: .line 82
            aload 1 /* inst */
            new com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingTransformer
            dup
            invokespecial com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingTransformer.<init>:()V
            invokeinterface java.lang.instrument.Instrumentation.addTransformer:(Ljava/lang/instrument/ClassFileTransformer;)V
         2: .line 83
            return
        end local 1 // java.lang.instrument.Instrumentation inst
        end local 0 // java.lang.String agentArgs
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0  agentArgs  Ljava/lang/String;
            0    3     1       inst  Ljava/lang/instrument/Instrumentation;
    MethodParameters:
           Name  Flags
      agentArgs  
      inst       

  public static long getNativeCalls(java.lang.String);
    descriptor: (Ljava/lang/String;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String lbl
         0: .line 122
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            aload 0 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            lreturn
        end local 0 // java.lang.String lbl
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   lbl  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      lbl   

  public static long getJniCalls(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String binding
        start local 1 // java.lang.String jniLabel
         0: .line 128
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniCalls:Ljava/util/Map;
            aload 0 /* binding */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            aload 1 /* jniLabel */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            lreturn
        end local 1 // java.lang.String jniLabel
        end local 0 // java.lang.String binding
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0   binding  Ljava/lang/String;
            0    1     1  jniLabel  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      binding   
      jniLabel  

  private static java.lang.String getLabel(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // java.lang.String apiName
        start local 1 // java.lang.Object label
         0: .line 133
            aload 1 /* label */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSFunction.isJSFunction:(Ljava/lang/Object;)Z
            ifeq 3
         1: .line 134
            aload 1 /* label */
            checkcast com.oracle.truffle.api.object.DynamicObject
            invokestatic com.oracle.truffle.js.runtime.builtins.JSFunction.getName:(Lcom/oracle/truffle/api/object/DynamicObject;)Ljava/lang/String;
            astore 2 /* lbl */
        start local 2 // java.lang.String lbl
         2: .line 135
            goto 10
        end local 2 // java.lang.String lbl
      StackMap locals:
      StackMap stack:
         3: aload 1 /* label */
            instanceof java.lang.Object[]
            ifeq 9
         4: .line 136
            aload 1 /* label */
            checkcast java.lang.Object[]
            astore 3 /* args */
        start local 3 // java.lang.Object[] args
         5: .line 137
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.$assertionsDisabled:Z
            ifne 7
            aload 3 /* args */
            arraylength
            iconst_1
            if_icmple 6
            aload 3 /* args */
            iconst_1
            aaload
            invokestatic com.oracle.truffle.js.runtime.builtins.JSFunction.isJSFunction:(Ljava/lang/Object;)Z
            ifne 7
      StackMap locals: java.lang.String java.lang.Object top java.lang.Object[]
      StackMap stack:
         6: new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         7: .line 138
      StackMap locals:
      StackMap stack:
            aload 3 /* args */
            iconst_1
            aaload
            checkcast com.oracle.truffle.api.object.DynamicObject
            invokestatic com.oracle.truffle.js.runtime.builtins.JSFunction.getName:(Lcom/oracle/truffle/api/object/DynamicObject;)Ljava/lang/String;
            astore 2 /* lbl */
        end local 3 // java.lang.Object[] args
        start local 2 // java.lang.String lbl
         8: .line 139
            goto 10
        end local 2 // java.lang.String lbl
         9: .line 140
      StackMap locals: java.lang.String java.lang.Object
      StackMap stack:
            new java.lang.AssertionError
            dup
            ldc "Must instrument calls to JSFunction objects"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        start local 2 // java.lang.String lbl
        10: .line 142
      StackMap locals: java.lang.String
      StackMap stack:
            ldc ""
            aload 2 /* lbl */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
            new java.lang.StringBuilder
            dup
            aload 0 /* apiName */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ": <unknown>"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            goto 12
      StackMap locals:
      StackMap stack:
        11: new java.lang.StringBuilder
            dup
            aload 0 /* apiName */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ": "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* lbl */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
      StackMap locals:
      StackMap stack: java.lang.String
        12: astore 2 /* lbl */
        13: .line 143
            aload 2 /* lbl */
            areturn
        end local 2 // java.lang.String lbl
        end local 1 // java.lang.Object label
        end local 0 // java.lang.String apiName
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   14     0  apiName  Ljava/lang/String;
            0   14     1    label  Ljava/lang/Object;
            2    3     2      lbl  Ljava/lang/String;
            8    9     2      lbl  Ljava/lang/String;
           10   14     2      lbl  Ljava/lang/String;
            5    8     3     args  [Ljava/lang/Object;
    Exceptions:
      throws java.lang.AssertionError
    MethodParameters:
         Name  Flags
      apiName  
      label    

  public static double getSamplingTime();
    descriptor: ()D
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=0
         0: .line 147
            invokestatic java.lang.System.nanoTime:()J
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.last:J
            lsub
            lstore 0 /* elapsedTime */
        start local 0 // long elapsedTime
         1: .line 148
            lload 0 /* elapsedTime */
            l2d
            ldc 1.0E9
            ddiv
            dreturn
        end local 0 // long elapsedTime
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1    2     0  elapsedTime  J

  public static void bindingCallBegin(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // java.lang.String apiName
        start local 1 // java.lang.Object label
         0: .line 157
            aload 0 /* apiName */
            aload 1 /* label */
            invokestatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.getLabel:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
            astore 2 /* lbl */
        start local 2 // java.lang.String lbl
         1: .line 158
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
            invokeinterface java.util.Deque.size:()I
            ifne 13
         2: .line 159
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniCalls:Ljava/util/Map;
            aload 2 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* calls */
        start local 3 // java.util.Map calls
         3: .line 160
            aload 3 /* calls */
            ifnonnull 6
         4: .line 161
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 3 /* calls */
         5: .line 162
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniCalls:Ljava/util/Map;
            aload 2 /* lbl */
            aload 3 /* calls */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 164
      StackMap locals: java.lang.String java.util.Map
      StackMap stack:
            aload 3 /* calls */
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNICalls:Ljava/util/Map;
         7: .line 166
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniExecTimes:Ljava/util/Map;
            aload 2 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 4 /* times */
        start local 4 // java.util.Map times
         8: .line 167
            aload 4 /* times */
            ifnonnull 11
         9: .line 168
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 4 /* times */
        10: .line 169
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniExecTimes:Ljava/util/Map;
            aload 2 /* lbl */
            aload 4 /* times */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        11: .line 171
      StackMap locals: java.util.Map
      StackMap stack:
            aload 4 /* times */
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNIExecTimes:Ljava/util/Map;
        12: .line 172
            invokestatic java.lang.System.nanoTime:()J
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.firstBoundaryCrossedAt:J
        end local 4 // java.util.Map times
        end local 3 // java.util.Map calls
        13: .line 174
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
            aload 2 /* lbl */
            invokeinterface java.util.Deque.push:(Ljava/lang/Object;)V
        14: .line 175
            return
        end local 2 // java.lang.String lbl
        end local 1 // java.lang.Object label
        end local 0 // java.lang.String apiName
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   15     0  apiName  Ljava/lang/String;
            0   15     1    label  Ljava/lang/Object;
            1   15     2      lbl  Ljava/lang/String;
            3   13     3    calls  Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
            8   13     4    times  Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
         Name  Flags
      apiName  
      label    

  public static void bindingCallEnd();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=0
         0: .line 182
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
            invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 0 /* lbl */
        start local 0 // java.lang.String lbl
         1: .line 183
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
            invokeinterface java.util.Deque.size:()I
            ifne 19
         2: .line 184
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
            ifeq 4
         3: .line 186
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Broken instrumentation! (not all JNI method calls have returned: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         4: .line 188
      StackMap locals: java.lang.String
      StackMap stack:
            invokestatic java.lang.System.nanoTime:()J
            lstore 1 /* end */
        start local 1 // long end
         5: .line 190
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            aload 0 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            astore 3 /* totalHits */
        start local 3 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter totalHits
         6: .line 191
            aload 3 /* totalHits */
            ifnonnull 9
         7: .line 192
            new com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            dup
            invokespecial com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.<init>:()V
            astore 3 /* totalHits */
         8: .line 193
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            aload 0 /* lbl */
            aload 3 /* totalHits */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         9: .line 195
      StackMap locals: long com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
      StackMap stack:
            aload 3 /* totalHits */
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.increment:()V
        10: .line 197
            lload 1 /* end */
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.firstBoundaryCrossedAt:J
            lsub
            lstore 4 /* elapsedTime */
        start local 4 // long elapsedTime
        11: .line 198
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingExecTimes:Ljava/util/Map;
            aload 0 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            astore 6 /* total */
        start local 6 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter total
        12: .line 199
            aload 6 /* total */
            ifnonnull 15
        13: .line 200
            new com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            dup
            invokespecial com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.<init>:()V
            astore 6 /* total */
        14: .line 201
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingExecTimes:Ljava/util/Map;
            aload 0 /* lbl */
            aload 6 /* total */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        15: .line 203
      StackMap locals: long com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
      StackMap stack:
            aload 6 /* total */
            lload 4 /* elapsedTime */
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.increment:(J)V
        16: .line 204
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniExecTimes:Ljava/util/Map;
            aload 0 /* lbl */
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNIExecTimes:Ljava/util/Map;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        17: .line 206
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.DumpEvery:I
            ifle 19
            invokestatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.getSamplingTime:()D
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.DumpEvery:I
            i2d
            dcmpl
            ifle 19
        18: .line 207
            invokestatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.dumpCounters:()V
        end local 6 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter total
        end local 4 // long elapsedTime
        end local 3 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter totalHits
        end local 1 // long end
        19: .line 210
      StackMap locals: java.lang.String
      StackMap stack:
            return
        end local 0 // java.lang.String lbl
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1   20     0          lbl  Ljava/lang/String;
            5   19     1          end  J
            6   19     3    totalHits  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
           11   19     4  elapsedTime  J
           12   19     6        total  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()

  public static void jniCallBegin(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.lang.String lbl
         0: .line 219
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
            invokeinterface java.util.Deque.size:()I
            ifeq 8
         1: .line 220
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
            dup
            iconst_1
            iadd
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
            ifne 8
         2: .line 221
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNICalls:Ljava/util/Map;
            aload 0 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            astore 1 /* totalHits */
        start local 1 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter totalHits
         3: .line 222
            aload 1 /* totalHits */
            ifnonnull 6
         4: .line 223
            new com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            dup
            invokespecial com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.<init>:()V
            astore 1 /* totalHits */
         5: .line 224
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNICalls:Ljava/util/Map;
            aload 0 /* lbl */
            aload 1 /* totalHits */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 226
      StackMap locals: com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
      StackMap stack:
            aload 1 /* totalHits */
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.increment:()V
         7: .line 227
            invokestatic java.lang.System.nanoTime:()J
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.lastJniCallBegin:J
        end local 1 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter totalHits
         8: .line 230
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.String lbl
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    9     0        lbl  Ljava/lang/String;
            3    8     1  totalHits  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
      Name  Flags
      lbl   

  public static void jniCallEnd(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // java.lang.String lbl
         0: .line 237
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.callStack:Ljava/util/Deque;
            invokeinterface java.util.Deque.size:()I
            ifeq 8
         1: .line 238
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
            iconst_1
            isub
            dup
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniMethodCallStack:I
            ifne 8
         2: .line 239
            invokestatic java.lang.System.nanoTime:()J
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.lastJniCallBegin:J
            lsub
            lstore 1 /* elapsedTime */
        start local 1 // long elapsedTime
         3: .line 240
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNIExecTimes:Ljava/util/Map;
            aload 0 /* lbl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            astore 3 /* total */
        start local 3 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter total
         4: .line 241
            aload 3 /* total */
            ifnonnull 7
         5: .line 242
            new com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            dup
            invokespecial com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.<init>:()V
            astore 3 /* total */
         6: .line 243
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.currentJNIExecTimes:Ljava/util/Map;
            aload 0 /* lbl */
            aload 3 /* total */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 245
      StackMap locals: long com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
      StackMap stack:
            aload 3 /* total */
            lload 1 /* elapsedTime */
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.increment:(J)V
        end local 3 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter total
        end local 1 // long elapsedTime
         8: .line 248
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.String lbl
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0          lbl  Ljava/lang/String;
            3    8     1  elapsedTime  J
            4    8     3        total  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
      Name  Flags
      lbl   

  public static void dumpCounters();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=24, args_size=0
         0: .line 252
            invokestatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.getSamplingTime:()D
            dstore 0 /* window */
        start local 0 // double window
         1: .line 253
            invokestatic java.lang.System.nanoTime:()J
            putstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.last:J
         2: .line 254
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "\n=== Sampling interval: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            dload 0 /* window */
            invokevirtual java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;
            ldc " seconds ==="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         3: .line 256
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingExecTimes:Ljava/util/Map;
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.stream:()Ljava/util/stream/Stream;
            invokestatic java.util.Map$Entry.comparingByValue:()Ljava/util/Comparator;
            invokestatic java.util.Collections.reverseOrder:(Ljava/util/Comparator;)Ljava/util/Comparator;
            invokeinterface java.util.stream.Stream.sorted:(Ljava/util/Comparator;)Ljava/util/stream/Stream;
         4: .line 257
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  java/util/Map$Entry.getKey()Ljava/lang/Object; (9 itf)
                  (Ljava/util/Map$Entry;)Ljava/lang/String;
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  java/util/Map$Entry.getValue()Ljava/lang/Object; (9 itf)
                  (Ljava/util/Map$Entry;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
         5: .line 258
            invokedynamic apply()Ljava/util/function/BinaryOperator;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
                  com/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent.lambda$2(Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter; (6)
                  (Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  java/util/LinkedHashMap.<init>()V (8)
                  ()Ljava/util/LinkedHashMap;
         6: .line 257
            invokestatic java.util.stream.Collectors.toMap:(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;
         7: .line 256
            invokeinterface java.util.stream.Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 2 /* sortedTimes */
        start local 2 // java.util.Map sortedTimes
         8: .line 260
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "\n=== Time spent in node.js native calls ==="
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         9: .line 261
            aload 2 /* sortedTimes */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 4
            goto 15
      StackMap locals: double java.util.Map top java.util.Iterator
      StackMap stack:
        10: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 3 /* entry */
        start local 3 // java.util.Map$Entry entry
        11: .line 262
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            l2d
            ldc 1000000.0
            ddiv
            dstore 5 /* time */
        start local 5 // double time
        12: .line 263
            dload 5 /* time */
            dload 0 /* window */
            ldc 1000.0
            dmul
            ddiv
            ldc 100.0
            dmul
            dstore 7 /* perc */
        start local 7 // double perc
        13: .line 264
            ldc "[%6.2f %%] %-80s |time %10.3f ms |#calls %7d (JS->Cpp)"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
            dload 7 /* perc */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            dup
            iconst_1
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            aastore
            dup
            iconst_2
            dload 5 /* time */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            dup
            iconst_3
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            aload 3 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 9 /* line */
        start local 9 // java.lang.String line
        14: .line 265
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            aload 9 /* line */
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        end local 9 // java.lang.String line
        end local 7 // double perc
        end local 5 // double time
        end local 3 // java.util.Map$Entry entry
        15: .line 261
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 10
        16: .line 268
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "\n=== Breakdown of Java methods executed during native calls (presumibly JNI calls) ==="
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        17: .line 270
            iconst_0
            istore 3 /* dumped */
        start local 3 // int dumped
        18: .line 271
            aload 2 /* sortedTimes */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 5
            goto 52
      StackMap locals: double java.util.Map int top java.util.Iterator
      StackMap stack:
        19: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 4 /* entry */
        start local 4 // java.util.Map$Entry entry
        20: .line 272
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            l2d
            ldc 1000000.0
            ddiv
            dstore 6 /* nativeTime */
        start local 6 // double nativeTime
        21: .line 273
            dload 6 /* nativeTime */
            dload 0 /* window */
            ldc 1000.0
            dmul
            ddiv
            ldc 100.0
            dmul
            dstore 8 /* perc */
        start local 8 // double perc
        22: .line 274
            ldc "[%6.2f %%] %-80s "
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            dload 8 /* perc */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            dup
            iconst_1
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 10 /* header */
        start local 10 // java.lang.String header
        23: .line 275
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            aload 10 /* header */
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        24: .line 277
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniExecTimes:Ljava/util/Map;
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 11 /* jniTime */
        start local 11 // java.util.Map jniTime
        25: .line 278
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniCalls:Ljava/util/Map;
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.stream:()Ljava/util/stream/Stream;
            invokestatic java.util.Map$Entry.comparingByValue:()Ljava/util/Comparator;
            invokestatic java.util.Collections.reverseOrder:(Ljava/util/Comparator;)Ljava/util/Comparator;
            invokeinterface java.util.stream.Stream.sorted:(Ljava/util/Comparator;)Ljava/util/stream/Stream;
        26: .line 279
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  java/util/Map$Entry.getKey()Ljava/lang/Object; (9 itf)
                  (Ljava/util/Map$Entry;)Ljava/lang/String;
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  java/util/Map$Entry.getValue()Ljava/lang/Object; (9 itf)
                  (Ljava/util/Map$Entry;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
        27: .line 280
            invokedynamic apply()Ljava/util/function/BinaryOperator;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
                  com/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent.lambda$6(Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter; (6)
                  (Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
            invokedynamic get()Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  java/util/LinkedHashMap.<init>()V (8)
                  ()Ljava/util/LinkedHashMap;
        28: .line 279
            invokestatic java.util.stream.Collectors.toMap:(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;
        29: .line 278
            invokeinterface java.util.stream.Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 12 /* sortedCalls */
        start local 12 // java.util.Map sortedCalls
        30: .line 281
            dconst_0
            dstore 13 /* total */
        start local 13 // double total
        31: .line 282
            dconst_0
            dstore 15 /* totalTime */
        start local 15 // double totalTime
        32: .line 283
            aload 12 /* sortedCalls */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 18
            goto 45
      StackMap locals: double java.util.Map int java.util.Map$Entry java.util.Iterator double double java.lang.String java.util.Map java.util.Map double double top java.util.Iterator
      StackMap stack:
        33: aload 18
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 17 /* nestedentry */
        start local 17 // java.util.Map$Entry nestedentry
        34: .line 284
            aload 11 /* jniTime */
            aload 17 /* nestedentry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            ifnonnull 35
            dconst_0
            goto 36
      StackMap locals: double java.util.Map int java.util.Map$Entry java.util.Iterator double double java.lang.String java.util.Map java.util.Map double double java.util.Map$Entry java.util.Iterator
      StackMap stack:
        35: aload 11 /* jniTime */
            aload 17 /* nestedentry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            l2d
            ldc 1000000.0
            ddiv
      StackMap locals:
      StackMap stack: double
        36: dstore 19 /* time */
        start local 19 // double time
        37: .line 285
            aload 17 /* nestedentry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            l2d
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            l2d
            ddiv
            dstore 21 /* ratio */
        start local 21 // double ratio
        38: .line 286
            ldc "           %-91s |#calls %7d |time %10.3f ms |jni calls avg ~%4.1f (Cpp->JS)"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
            aload 17 /* nestedentry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            aastore
            dup
            iconst_1
            aload 17 /* nestedentry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aastore
            dup
            iconst_2
        39: .line 287
            dload 19 /* time */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            dup
            iconst_3
        40: .line 288
            dload 21 /* ratio */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
        41: .line 286
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            astore 23 /* nestedLine */
        start local 23 // java.lang.String nestedLine
        42: .line 289
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            aload 23 /* nestedLine */
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        43: .line 290
            dload 13 /* total */
            dload 21 /* ratio */
            dadd
            dstore 13 /* total */
        44: .line 291
            dload 15 /* totalTime */
            dload 19 /* time */
            dadd
            dstore 15 /* totalTime */
        end local 23 // java.lang.String nestedLine
        end local 21 // double ratio
        end local 19 // double time
        end local 17 // java.util.Map$Entry nestedentry
        45: .line 283
      StackMap locals: double java.util.Map int java.util.Map$Entry java.util.Iterator double double java.lang.String java.util.Map java.util.Map double double top java.util.Iterator
      StackMap stack:
            aload 18
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 33
        46: .line 294
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "\n          %92s |total native time               %10.3f ms"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc ""
            aastore
            dup
            iconst_1
            dload 6 /* nativeTime */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        47: .line 295
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "          %92s |total time in Java space (~)    %10.3f ms"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc ""
            aastore
            dup
            iconst_1
            dload 15 /* totalTime */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        48: .line 296
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "          %92s |total native calls                    %7d "
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc ""
            aastore
            dup
            iconst_1
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            aload 4 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
            invokevirtual com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter.longValue:()J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        49: .line 297
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "          %92s |avg JNI Java calls per native call (~)   %4.1f \n"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc ""
            aastore
            dup
            iconst_1
            dload 13 /* total */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        50: .line 299
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.DumpOnlyTopMethods:I
            ifle 52
            iinc 3 /* dumped */ 1
            iload 3 /* dumped */
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.DumpOnlyTopMethods:I
            if_icmpne 52
        51: .line 300
            goto 53
        end local 15 // double totalTime
        end local 13 // double total
        end local 12 // java.util.Map sortedCalls
        end local 11 // java.util.Map jniTime
        end local 10 // java.lang.String header
        end local 8 // double perc
        end local 6 // double nativeTime
        end local 4 // java.util.Map$Entry entry
        52: .line 271
      StackMap locals: double java.util.Map int top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 19
        53: .line 303
      StackMap locals: double java.util.Map int
      StackMap stack:
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniExecTimes:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
        54: .line 304
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.jniCalls:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
        55: .line 305
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingCalls:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
        56: .line 306
            getstatic com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent.bindingExecTimes:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
        57: .line 307
            return
        end local 3 // int dumped
        end local 2 // java.util.Map sortedTimes
        end local 0 // double window
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1   58     0       window  D
            8   58     2  sortedTimes  Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
           11   15     3        entry  Ljava/util/Map$Entry<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
           12   15     5         time  D
           13   15     7         perc  D
           14   15     9         line  Ljava/lang/String;
           18   58     3       dumped  I
           20   52     4        entry  Ljava/util/Map$Entry<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
           21   52     6   nativeTime  D
           22   52     8         perc  D
           23   52    10       header  Ljava/lang/String;
           25   52    11      jniTime  Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
           30   52    12  sortedCalls  Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
           31   52    13        total  D
           32   52    15    totalTime  D
           34   45    17  nestedentry  Ljava/util/Map$Entry<Ljava/lang/String;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;>;
           37   45    19         time  D
           38   45    21        ratio  D
           42   45    23   nestedLine  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()

  private static com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter lambda$2(com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter);
    descriptor: (Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e1
        start local 1 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e2
         0: .line 258
            aload 0 /* e1 */
            areturn
        end local 1 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e2
        end local 0 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e1
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0    e1  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
            0    1     1    e2  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;

  private static com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter lambda$6(com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter, com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter);
    descriptor: (Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;)Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e1
        start local 1 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e2
         0: .line 280
            aload 0 /* e1 */
            areturn
        end local 1 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e2
        end local 0 // com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter e1
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0    e1  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
            0    1     1    e2  Lcom/oracle/truffle/trufflenode/jniboundaryprofiler/ProfilingAgent$PerfCounter;
}
SourceFile: "ProfilingAgent.java"
NestMembers:
  com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$1  com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$1
  private PerfCounter = com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent$PerfCounter of com.oracle.truffle.trufflenode.jniboundaryprofiler.ProfilingAgent
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public abstract Entry = java.util.Map$Entry of java.util.Map