public final class android.view.Choreographer
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: android.view.Choreographer
  super_class: java.lang.Object
{
  private static final java.lang.String TAG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "Choreographer"

  private static final boolean DEBUG_JANK;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final boolean DEBUG_FRAMES;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final long DEFAULT_FRAME_DELAY;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 10

  private static volatile long sFrameDelay;
    descriptor: J
    flags: (0x004a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE

  private static final java.lang.ThreadLocal<android.view.Choreographer> sThreadInstance;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Landroid/view/Choreographer;>;

  private static volatile android.view.Choreographer mMainInstance;
    descriptor: Landroid/view/Choreographer;
    flags: (0x004a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE

  private static final java.lang.ThreadLocal<android.view.Choreographer> sSfThreadInstance;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Landroid/view/Choreographer;>;

  private static final boolean USE_VSYNC;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final boolean USE_FRAME_TIME;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final int SKIPPED_FRAME_WARNING_LIMIT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final int MSG_DO_FRAME;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int MSG_DO_SCHEDULE_VSYNC;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int MSG_DO_SCHEDULE_CALLBACK;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final java.lang.Object FRAME_CALLBACK_TOKEN;
    descriptor: Ljava/lang/Object;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.lang.Object mLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.os.Looper mLooper;
    descriptor: Landroid/os/Looper;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.view.Choreographer$FrameHandler mHandler;
    descriptor: Landroid/view/Choreographer$FrameHandler;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.view.Choreographer$FrameDisplayEventReceiver mDisplayEventReceiver;
    descriptor: Landroid/view/Choreographer$FrameDisplayEventReceiver;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private android.view.Choreographer$CallbackRecord mCallbackPool;
    descriptor: Landroid/view/Choreographer$CallbackRecord;
    flags: (0x0002) ACC_PRIVATE

  private final android.view.Choreographer$CallbackQueue[] mCallbackQueues;
    descriptor: [Landroid/view/Choreographer$CallbackQueue;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private boolean mFrameScheduled;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean mCallbacksRunning;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private long mLastFrameTimeNanos;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private long mFrameIntervalNanos;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private boolean mDebugPrintNextFrameTimeDelta;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private int mFPSDivisor;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  android.view.FrameInfo mFrameInfo;
    descriptor: Landroid/view/FrameInfo;
    flags: (0x0000) 

  private static final java.lang.String[] CALLBACK_TRACE_TITLES;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

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

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

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

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

  private static final int CALLBACK_LAST;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 98
            ldc 10
            putstatic android.view.Choreographer.sFrameDelay:J
         1: .line 102
            new android.view.Choreographer$1
            dup
            invokespecial android.view.Choreographer$1.<init>:()V
         2: .line 101
            putstatic android.view.Choreographer.sThreadInstance:Ljava/lang/ThreadLocal;
         3: .line 121
            new android.view.Choreographer$2
            dup
            invokespecial android.view.Choreographer$2.<init>:()V
         4: .line 120
            putstatic android.view.Choreographer.sSfThreadInstance:Ljava/lang/ThreadLocal;
         5: .line 134
            ldc "debug.choreographer.vsync"
            iconst_1
         6: .line 133
            invokestatic android.os.SystemProperties.getBoolean:(Ljava/lang/String;Z)Z
            putstatic android.view.Choreographer.USE_VSYNC:Z
         7: .line 138
            ldc "debug.choreographer.frametime"
            iconst_1
         8: .line 137
            invokestatic android.os.SystemProperties.getBoolean:(Ljava/lang/String;Z)Z
            putstatic android.view.Choreographer.USE_FRAME_TIME:Z
         9: .line 143
            ldc "debug.choreographer.skipwarning"
            bipush 30
        10: .line 142
            invokestatic android.os.SystemProperties.getInt:(Ljava/lang/String;I)I
            putstatic android.view.Choreographer.SKIPPED_FRAME_WARNING_LIMIT:I
        11: .line 150
            new android.view.Choreographer$3
            dup
            invokespecial android.view.Choreographer$3.<init>:()V
            putstatic android.view.Choreographer.FRAME_CALLBACK_TOKEN:Ljava/lang/Object;
        12: .line 192
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
        13: .line 193
            ldc "input"
            aastore
            dup
            iconst_1
            ldc "animation"
            aastore
            dup
            iconst_2
            ldc "traversal"
            aastore
            dup
            iconst_3
            ldc "commit"
            aastore
        14: .line 192
            putstatic android.view.Choreographer.CALLBACK_TRACE_TITLES:[Ljava/lang/String;
        15: .line 228
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>(android.os.Looper, int);
    descriptor: (Landroid/os/Looper;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // android.view.Choreographer this
        start local 1 // android.os.Looper looper
        start local 2 // int vsyncSource
         0: .line 230
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 154
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.view.Choreographer.mLock:Ljava/lang/Object;
         2: .line 173
            aload 0 /* this */
            iconst_1
            putfield android.view.Choreographer.mFPSDivisor:I
         3: .line 186
            aload 0 /* this */
            new android.view.FrameInfo
            dup
            invokespecial android.view.FrameInfo.<init>:()V
            putfield android.view.Choreographer.mFrameInfo:Landroid/view/FrameInfo;
         4: .line 231
            aload 0 /* this */
            aload 1 /* looper */
            putfield android.view.Choreographer.mLooper:Landroid/os/Looper;
         5: .line 232
            aload 0 /* this */
            new android.view.Choreographer$FrameHandler
            dup
            aload 0 /* this */
            aload 1 /* looper */
            invokespecial android.view.Choreographer$FrameHandler.<init>:(Landroid/view/Choreographer;Landroid/os/Looper;)V
            putfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
         6: .line 233
            aload 0 /* this */
            getstatic android.view.Choreographer.USE_VSYNC:Z
            ifeq 8
         7: .line 234
            new android.view.Choreographer$FrameDisplayEventReceiver
            dup
            aload 0 /* this */
            aload 1 /* looper */
            iload 2 /* vsyncSource */
            invokespecial android.view.Choreographer$FrameDisplayEventReceiver.<init>:(Landroid/view/Choreographer;Landroid/os/Looper;I)V
            goto 9
         8: .line 235
      StackMap locals: android.view.Choreographer android.os.Looper int
      StackMap stack: android.view.Choreographer
            aconst_null
         9: .line 233
      StackMap locals: android.view.Choreographer android.os.Looper int
      StackMap stack: android.view.Choreographer android.view.Choreographer$FrameDisplayEventReceiver
            putfield android.view.Choreographer.mDisplayEventReceiver:Landroid/view/Choreographer$FrameDisplayEventReceiver;
        10: .line 236
            aload 0 /* this */
            ldc -9223372036854775808
            putfield android.view.Choreographer.mLastFrameTimeNanos:J
        11: .line 238
            aload 0 /* this */
            ldc 1.0E9
            invokestatic android.view.Choreographer.getRefreshRate:()F
            fdiv
            f2l
            putfield android.view.Choreographer.mFrameIntervalNanos:J
        12: .line 240
            aload 0 /* this */
            iconst_4
            anewarray android.view.Choreographer$CallbackQueue
            putfield android.view.Choreographer.mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue;
        13: .line 241
            iconst_0
            istore 3 /* i */
        start local 3 // int i
        14: goto 17
        15: .line 242
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue;
            iload 3 /* i */
            new android.view.Choreographer$CallbackQueue
            dup
            aload 0 /* this */
            invokespecial android.view.Choreographer$CallbackQueue.<init>:(Landroid/view/Choreographer;)V
            aastore
        16: .line 241
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        17: iload 3 /* i */
            iconst_3
            if_icmple 15
        end local 3 // int i
        18: .line 245
            aload 0 /* this */
            ldc "debug.hwui.fps_divisor"
            iconst_1
            invokestatic android.os.SystemProperties.getInt:(Ljava/lang/String;I)I
            invokevirtual android.view.Choreographer.setFPSDivisor:(I)V
        19: .line 246
            return
        end local 2 // int vsyncSource
        end local 1 // android.os.Looper looper
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   20     0         this  Landroid/view/Choreographer;
            0   20     1       looper  Landroid/os/Looper;
            0   20     2  vsyncSource  I
           14   18     3            i  I
    MethodParameters:
             Name  Flags
      looper       
      vsyncSource  

  private static float getRefreshRate();
    descriptor: ()F
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=0
         0: .line 249
            invokestatic android.hardware.display.DisplayManagerGlobal.getInstance:()Landroid/hardware/display/DisplayManagerGlobal;
         1: .line 250
            iconst_0
         2: .line 249
            invokevirtual android.hardware.display.DisplayManagerGlobal.getDisplayInfo:(I)Landroid/view/DisplayInfo;
            astore 0 /* di */
        start local 0 // android.view.DisplayInfo di
         3: .line 251
            aload 0 /* di */
            invokevirtual android.view.DisplayInfo.getMode:()Landroid/view/Display$Mode;
            invokevirtual android.view.Display$Mode.getRefreshRate:()F
            freturn
        end local 0 // android.view.DisplayInfo di
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            3    4     0    di  Landroid/view/DisplayInfo;

  public static android.view.Choreographer getInstance();
    descriptor: ()Landroid/view/Choreographer;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 262
            getstatic android.view.Choreographer.sThreadInstance:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast android.view.Choreographer
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static android.view.Choreographer getSfInstance();
    descriptor: ()Landroid/view/Choreographer;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 269
            getstatic android.view.Choreographer.sSfThreadInstance:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast android.view.Choreographer
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static android.view.Choreographer getMainThreadInstance();
    descriptor: ()Landroid/view/Choreographer;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 277
            getstatic android.view.Choreographer.mMainInstance:Landroid/view/Choreographer;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static void releaseInstance();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=0
         0: .line 284
            getstatic android.view.Choreographer.sThreadInstance:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast android.view.Choreographer
            astore 0 /* old */
        start local 0 // android.view.Choreographer old
         1: .line 285
            getstatic android.view.Choreographer.sThreadInstance:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         2: .line 286
            aload 0 /* old */
            invokevirtual android.view.Choreographer.dispose:()V
         3: .line 287
            return
        end local 0 // android.view.Choreographer old
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1    4     0   old  Landroid/view/Choreographer;

  private void dispose();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 290
            aload 0 /* this */
            getfield android.view.Choreographer.mDisplayEventReceiver:Landroid/view/Choreographer$FrameDisplayEventReceiver;
            invokevirtual android.view.Choreographer$FrameDisplayEventReceiver.dispose:()V
         1: .line 291
            return
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/view/Choreographer;

  public static long getFrameDelay();
    descriptor: ()J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 310
            getstatic android.view.Choreographer.sFrameDelay:J
            lreturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static void setFrameDelay(long);
    descriptor: (J)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // long frameDelay
         0: .line 330
            lload 0 /* frameDelay */
            putstatic android.view.Choreographer.sFrameDelay:J
         1: .line 331
            return
        end local 0 // long frameDelay
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0  frameDelay  J
    MethodParameters:
            Name  Flags
      frameDelay  

  public static long subtractFrameDelay(long);
    descriptor: (J)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // long delayMillis
         0: .line 356
            getstatic android.view.Choreographer.sFrameDelay:J
            lstore 2 /* frameDelay */
        start local 2 // long frameDelay
         1: .line 357
            lload 0 /* delayMillis */
            lload 2 /* frameDelay */
            lcmp
            ifgt 2
            lconst_0
            goto 3
      StackMap locals: long
      StackMap stack:
         2: lload 0 /* delayMillis */
            lload 2 /* frameDelay */
            lsub
      StackMap locals:
      StackMap stack: long
         3: lreturn
        end local 2 // long frameDelay
        end local 0 // long delayMillis
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0  delayMillis  J
            1    4     2   frameDelay  J
    MethodParameters:
             Name  Flags
      delayMillis  

  public long getFrameIntervalNanos();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 365
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            lreturn
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/view/Choreographer;

  void dump(java.lang.String, java.io.PrintWriter);
    descriptor: (Ljava/lang/String;Ljava/io/PrintWriter;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // android.view.Choreographer this
        start local 1 // java.lang.String prefix
        start local 2 // java.io.PrintWriter writer
         0: .line 369
            new java.lang.StringBuilder
            dup
            aload 1 /* prefix */
            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;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 3 /* innerPrefix */
        start local 3 // java.lang.String innerPrefix
         1: .line 370
            aload 2 /* writer */
            aload 1 /* prefix */
            invokevirtual java.io.PrintWriter.print:(Ljava/lang/String;)V
            aload 2 /* writer */
            ldc "Choreographer:"
            invokevirtual java.io.PrintWriter.println:(Ljava/lang/String;)V
         2: .line 371
            aload 2 /* writer */
            aload 3 /* innerPrefix */
            invokevirtual java.io.PrintWriter.print:(Ljava/lang/String;)V
            aload 2 /* writer */
            ldc "mFrameScheduled="
            invokevirtual java.io.PrintWriter.print:(Ljava/lang/String;)V
         3: .line 372
            aload 2 /* writer */
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameScheduled:Z
            invokevirtual java.io.PrintWriter.println:(Z)V
         4: .line 373
            aload 2 /* writer */
            aload 3 /* innerPrefix */
            invokevirtual java.io.PrintWriter.print:(Ljava/lang/String;)V
            aload 2 /* writer */
            ldc "mLastFrameTime="
            invokevirtual java.io.PrintWriter.print:(Ljava/lang/String;)V
         5: .line 374
            aload 2 /* writer */
            aload 0 /* this */
            getfield android.view.Choreographer.mLastFrameTimeNanos:J
            ldc 1000000
            ldiv
            invokestatic android.util.TimeUtils.formatUptime:(J)Ljava/lang/String;
            invokevirtual java.io.PrintWriter.println:(Ljava/lang/String;)V
         6: .line 375
            return
        end local 3 // java.lang.String innerPrefix
        end local 2 // java.io.PrintWriter writer
        end local 1 // java.lang.String prefix
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Landroid/view/Choreographer;
            0    7     1       prefix  Ljava/lang/String;
            0    7     2       writer  Ljava/io/PrintWriter;
            1    7     3  innerPrefix  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      prefix  
      writer  

  public void postCallback(int, java.lang.Runnable, java.lang.Object);
    descriptor: (ILjava/lang/Runnable;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
        start local 2 // java.lang.Runnable action
        start local 3 // java.lang.Object token
         0: .line 392
            aload 0 /* this */
            iload 1 /* callbackType */
            aload 2 /* action */
            aload 3 /* token */
            lconst_0
            invokevirtual android.view.Choreographer.postCallbackDelayed:(ILjava/lang/Runnable;Ljava/lang/Object;J)V
         1: .line 393
            return
        end local 3 // java.lang.Object token
        end local 2 // java.lang.Runnable action
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Landroid/view/Choreographer;
            0    2     1  callbackType  I
            0    2     2        action  Ljava/lang/Runnable;
            0    2     3         token  Ljava/lang/Object;
    MethodParameters:
              Name  Flags
      callbackType  
      action        
      token         

  public void postCallbackDelayed(int, java.lang.Runnable, java.lang.Object, long);
    descriptor: (ILjava/lang/Runnable;Ljava/lang/Object;J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=5
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
        start local 2 // java.lang.Runnable action
        start local 3 // java.lang.Object token
        start local 4 // long delayMillis
         0: .line 412
            aload 2 /* action */
            ifnonnull 2
         1: .line 413
            new java.lang.IllegalArgumentException
            dup
            ldc "action must not be null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 415
      StackMap locals:
      StackMap stack:
            iload 1 /* callbackType */
            iflt 3
            iload 1 /* callbackType */
            iconst_3
            if_icmple 4
         3: .line 416
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "callbackType is invalid"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 419
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* callbackType */
            aload 2 /* action */
            aload 3 /* token */
            lload 4 /* delayMillis */
            invokevirtual android.view.Choreographer.postCallbackDelayedInternal:(ILjava/lang/Object;Ljava/lang/Object;J)V
         5: .line 420
            return
        end local 4 // long delayMillis
        end local 3 // java.lang.Object token
        end local 2 // java.lang.Runnable action
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Landroid/view/Choreographer;
            0    6     1  callbackType  I
            0    6     2        action  Ljava/lang/Runnable;
            0    6     3         token  Ljava/lang/Object;
            0    6     4   delayMillis  J
    MethodParameters:
              Name  Flags
      callbackType  
      action        
      token         
      delayMillis   

  private void postCallbackDelayedInternal(int, java.lang.Object, java.lang.Object, long);
    descriptor: (ILjava/lang/Object;Ljava/lang/Object;J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=12, args_size=5
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
        start local 2 // java.lang.Object action
        start local 3 // java.lang.Object token
        start local 4 // long delayMillis
         0: .line 430
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 6
            monitorenter
         1: .line 431
            invokestatic android.os.SystemClock.uptimeMillis:()J
            lstore 7 /* now */
        start local 7 // long now
         2: .line 432
            lload 7 /* now */
            lload 4 /* delayMillis */
            ladd
            lstore 9 /* dueTime */
        start local 9 // long dueTime
         3: .line 433
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue;
            iload 1 /* callbackType */
            aaload
            lload 9 /* dueTime */
            aload 2 /* action */
            aload 3 /* token */
            invokevirtual android.view.Choreographer$CallbackQueue.addCallbackLocked:(JLjava/lang/Object;Ljava/lang/Object;)V
         4: .line 435
            lload 9 /* dueTime */
            lload 7 /* now */
            lcmp
            ifgt 7
         5: .line 436
            aload 0 /* this */
            lload 7 /* now */
            invokevirtual android.view.Choreographer.scheduleFrameLocked:(J)V
         6: .line 437
            goto 11
         7: .line 438
      StackMap locals: java.lang.Object long long
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            iconst_2
            aload 2 /* action */
            invokevirtual android.view.Choreographer$FrameHandler.obtainMessage:(ILjava/lang/Object;)Landroid/os/Message;
            astore 11 /* msg */
        start local 11 // android.os.Message msg
         8: .line 439
            aload 11 /* msg */
            iload 1 /* callbackType */
            putfield android.os.Message.arg1:I
         9: .line 440
            aload 11 /* msg */
            iconst_1
            invokevirtual android.os.Message.setAsynchronous:(Z)V
        10: .line 441
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            aload 11 /* msg */
            lload 9 /* dueTime */
            invokevirtual android.view.Choreographer$FrameHandler.sendMessageAtTime:(Landroid/os/Message;J)Z
            pop
        end local 11 // android.os.Message msg
        end local 9 // long dueTime
        end local 7 // long now
        11: .line 430
      StackMap locals:
      StackMap stack:
            aload 6
            monitorexit
        12: goto 15
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: aload 6
            monitorexit
        14: athrow
        15: .line 444
      StackMap locals:
      StackMap stack:
            return
        end local 4 // long delayMillis
        end local 3 // java.lang.Object token
        end local 2 // java.lang.Object action
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   16     0          this  Landroid/view/Choreographer;
            0   16     1  callbackType  I
            0   16     2        action  Ljava/lang/Object;
            0   16     3         token  Ljava/lang/Object;
            0   16     4   delayMillis  J
            2   11     7           now  J
            3   11     9       dueTime  J
            8   11    11           msg  Landroid/os/Message;
      Exception table:
        from    to  target  type
           1    12      13  any
          13    14      13  any
    MethodParameters:
              Name  Flags
      callbackType  
      action        
      token         
      delayMillis   

  public void removeCallbacks(int, java.lang.Runnable, java.lang.Object);
    descriptor: (ILjava/lang/Runnable;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
        start local 2 // java.lang.Runnable action
        start local 3 // java.lang.Object token
         0: .line 461
            iload 1 /* callbackType */
            iflt 1
            iload 1 /* callbackType */
            iconst_3
            if_icmple 2
         1: .line 462
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "callbackType is invalid"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 465
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* callbackType */
            aload 2 /* action */
            aload 3 /* token */
            invokevirtual android.view.Choreographer.removeCallbacksInternal:(ILjava/lang/Object;Ljava/lang/Object;)V
         3: .line 466
            return
        end local 3 // java.lang.Object token
        end local 2 // java.lang.Runnable action
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0          this  Landroid/view/Choreographer;
            0    4     1  callbackType  I
            0    4     2        action  Ljava/lang/Runnable;
            0    4     3         token  Ljava/lang/Object;
    MethodParameters:
              Name  Flags
      callbackType  
      action        
      token         

  private void removeCallbacksInternal(int, java.lang.Object, java.lang.Object);
    descriptor: (ILjava/lang/Object;Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
        start local 2 // java.lang.Object action
        start local 3 // java.lang.Object token
         0: .line 474
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         1: .line 475
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue;
            iload 1 /* callbackType */
            aaload
            aload 2 /* action */
            aload 3 /* token */
            invokevirtual android.view.Choreographer$CallbackQueue.removeCallbacksLocked:(Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 476
            aload 2 /* action */
            ifnull 4
            aload 3 /* token */
            ifnonnull 4
         3: .line 477
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            iconst_2
            aload 2 /* action */
            invokevirtual android.view.Choreographer$FrameHandler.removeMessages:(ILjava/lang/Object;)V
         4: .line 474
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 4
            monitorexit
         5: goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         6: aload 4
            monitorexit
         7: athrow
         8: .line 480
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.Object token
        end local 2 // java.lang.Object action
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    9     0          this  Landroid/view/Choreographer;
            0    9     1  callbackType  I
            0    9     2        action  Ljava/lang/Object;
            0    9     3         token  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           1     5       6  any
           6     7       6  any
    MethodParameters:
              Name  Flags
      callbackType  
      action        
      token         

  public void postFrameCallback(android.view.Choreographer$FrameCallback);
    descriptor: (Landroid/view/Choreographer$FrameCallback;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // android.view.Choreographer this
        start local 1 // android.view.Choreographer$FrameCallback callback
         0: .line 494
            aload 0 /* this */
            aload 1 /* callback */
            lconst_0
            invokevirtual android.view.Choreographer.postFrameCallbackDelayed:(Landroid/view/Choreographer$FrameCallback;J)V
         1: .line 495
            return
        end local 1 // android.view.Choreographer$FrameCallback callback
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Landroid/view/Choreographer;
            0    2     1  callback  Landroid/view/Choreographer$FrameCallback;
    MethodParameters:
          Name  Flags
      callback  

  public void postFrameCallbackDelayed(android.view.Choreographer$FrameCallback, long);
    descriptor: (Landroid/view/Choreographer$FrameCallback;J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // android.view.Choreographer this
        start local 1 // android.view.Choreographer$FrameCallback callback
        start local 2 // long delayMillis
         0: .line 510
            aload 1 /* callback */
            ifnonnull 2
         1: .line 511
            new java.lang.IllegalArgumentException
            dup
            ldc "callback must not be null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 514
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
         3: .line 515
            aload 1 /* callback */
            getstatic android.view.Choreographer.FRAME_CALLBACK_TOKEN:Ljava/lang/Object;
            lload 2 /* delayMillis */
         4: .line 514
            invokevirtual android.view.Choreographer.postCallbackDelayedInternal:(ILjava/lang/Object;Ljava/lang/Object;J)V
         5: .line 516
            return
        end local 2 // long delayMillis
        end local 1 // android.view.Choreographer$FrameCallback callback
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Landroid/view/Choreographer;
            0    6     1     callback  Landroid/view/Choreographer$FrameCallback;
            0    6     2  delayMillis  J
    MethodParameters:
             Name  Flags
      callback     
      delayMillis  

  public void removeFrameCallback(android.view.Choreographer$FrameCallback);
    descriptor: (Landroid/view/Choreographer$FrameCallback;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // android.view.Choreographer this
        start local 1 // android.view.Choreographer$FrameCallback callback
         0: .line 527
            aload 1 /* callback */
            ifnonnull 2
         1: .line 528
            new java.lang.IllegalArgumentException
            dup
            ldc "callback must not be null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 531
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            aload 1 /* callback */
            getstatic android.view.Choreographer.FRAME_CALLBACK_TOKEN:Ljava/lang/Object;
            invokevirtual android.view.Choreographer.removeCallbacksInternal:(ILjava/lang/Object;Ljava/lang/Object;)V
         3: .line 532
            return
        end local 1 // android.view.Choreographer$FrameCallback callback
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Landroid/view/Choreographer;
            0    4     1  callback  Landroid/view/Choreographer$FrameCallback;
    MethodParameters:
          Name  Flags
      callback  

  public long getFrameTime();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 560
            aload 0 /* this */
            invokevirtual android.view.Choreographer.getFrameTimeNanos:()J
            ldc 1000000
            ldiv
            lreturn
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/view/Choreographer;

  public long getFrameTimeNanos();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 572
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 573
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbacksRunning:Z
            ifne 3
         2: .line 574
            new java.lang.IllegalStateException
            dup
            ldc "This method must only be called as part of a callback while a frame is in progress."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 577
      StackMap locals: java.lang.Object
      StackMap stack:
            getstatic android.view.Choreographer.USE_FRAME_TIME:Z
            ifeq 4
            aload 0 /* this */
            getfield android.view.Choreographer.mLastFrameTimeNanos:J
            goto 5
      StackMap locals:
      StackMap stack:
         4: invokestatic java.lang.System.nanoTime:()J
      StackMap locals:
      StackMap stack: long
         5: aload 1
            monitorexit
         6: lreturn
         7: .line 572
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         8: athrow
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Landroid/view/Choreographer;
      Exception table:
        from    to  target  type
           1     6       7  any
           7     8       7  any

  public long getLastFrameTimeNanos();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 588
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 589
            getstatic android.view.Choreographer.USE_FRAME_TIME:Z
            ifeq 2
            aload 0 /* this */
            getfield android.view.Choreographer.mLastFrameTimeNanos:J
            goto 3
      StackMap locals: java.lang.Object
      StackMap stack:
         2: invokestatic java.lang.System.nanoTime:()J
      StackMap locals:
      StackMap stack: long
         3: aload 1
            monitorexit
         4: lreturn
         5: .line 588
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         6: athrow
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Landroid/view/Choreographer;
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any

  private void scheduleFrameLocked(long);
    descriptor: (J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // android.view.Choreographer this
        start local 1 // long now
         0: .line 594
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameScheduled:Z
            ifne 15
         1: .line 595
            aload 0 /* this */
            iconst_1
            putfield android.view.Choreographer.mFrameScheduled:Z
         2: .line 596
            getstatic android.view.Choreographer.USE_VSYNC:Z
            ifeq 10
         3: .line 604
            aload 0 /* this */
            invokevirtual android.view.Choreographer.isRunningOnLooperThreadLocked:()Z
            ifeq 6
         4: .line 605
            aload 0 /* this */
            invokevirtual android.view.Choreographer.scheduleVsyncLocked:()V
         5: .line 606
            goto 15
         6: .line 607
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            iconst_1
            invokevirtual android.view.Choreographer$FrameHandler.obtainMessage:(I)Landroid/os/Message;
            astore 3 /* msg */
        start local 3 // android.os.Message msg
         7: .line 608
            aload 3 /* msg */
            iconst_1
            invokevirtual android.os.Message.setAsynchronous:(Z)V
         8: .line 609
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            aload 3 /* msg */
            invokevirtual android.view.Choreographer$FrameHandler.sendMessageAtFrontOfQueue:(Landroid/os/Message;)Z
            pop
        end local 3 // android.os.Message msg
         9: .line 611
            goto 15
        10: .line 613
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mLastFrameTimeNanos:J
            ldc 1000000
            ldiv
            getstatic android.view.Choreographer.sFrameDelay:J
            ladd
            lload 1 /* now */
        11: .line 612
            invokestatic java.lang.Math.max:(JJ)J
            lstore 3 /* nextFrameTime */
        start local 3 // long nextFrameTime
        12: .line 617
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            iconst_0
            invokevirtual android.view.Choreographer$FrameHandler.obtainMessage:(I)Landroid/os/Message;
            astore 5 /* msg */
        start local 5 // android.os.Message msg
        13: .line 618
            aload 5 /* msg */
            iconst_1
            invokevirtual android.os.Message.setAsynchronous:(Z)V
        14: .line 619
            aload 0 /* this */
            getfield android.view.Choreographer.mHandler:Landroid/view/Choreographer$FrameHandler;
            aload 5 /* msg */
            lload 3 /* nextFrameTime */
            invokevirtual android.view.Choreographer$FrameHandler.sendMessageAtTime:(Landroid/os/Message;J)Z
            pop
        end local 5 // android.os.Message msg
        end local 3 // long nextFrameTime
        15: .line 622
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long now
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   16     0           this  Landroid/view/Choreographer;
            0   16     1            now  J
            7    9     3            msg  Landroid/os/Message;
           12   15     3  nextFrameTime  J
           13   15     5            msg  Landroid/os/Message;
    MethodParameters:
      Name  Flags
      now   

  void setFPSDivisor(int);
    descriptor: (I)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.view.Choreographer this
        start local 1 // int divisor
         0: .line 625
            iload 1 /* divisor */
            ifgt 1
            iconst_1
            istore 1 /* divisor */
         1: .line 626
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* divisor */
            putfield android.view.Choreographer.mFPSDivisor:I
         2: .line 627
            iload 1 /* divisor */
            invokestatic android.view.ThreadedRenderer.setFPSDivisor:(I)V
         3: .line 628
            return
        end local 1 // int divisor
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Landroid/view/Choreographer;
            0    4     1  divisor  I
    MethodParameters:
         Name  Flags
      divisor  

  void doFrame(long, int);
    descriptor: (JI)V
    flags: (0x0000) 
    Code:
      stack=6, locals=15, args_size=3
        start local 0 // android.view.Choreographer this
        start local 1 // long frameTimeNanos
        start local 3 // int frame
         0: .line 632
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 6
            monitorenter
         1: .line 633
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameScheduled:Z
            ifne 4
         2: .line 634
            aload 6
            monitorexit
         3: return
         4: .line 643
      StackMap locals: android.view.Choreographer long int top top java.lang.Object
      StackMap stack:
            lload 1 /* frameTimeNanos */
            lstore 7 /* intendedFrameTimeNanos */
        start local 7 // long intendedFrameTimeNanos
         5: .line 644
            invokestatic java.lang.System.nanoTime:()J
            lstore 4 /* startNanos */
        start local 4 // long startNanos
         6: .line 645
            lload 4 /* startNanos */
            lload 1 /* frameTimeNanos */
            lsub
            lstore 9 /* jitterNanos */
        start local 9 // long jitterNanos
         7: .line 646
            lload 9 /* jitterNanos */
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            lcmp
            iflt 15
         8: .line 647
            lload 9 /* jitterNanos */
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            ldiv
            lstore 11 /* skippedFrames */
        start local 11 // long skippedFrames
         9: .line 648
            lload 11 /* skippedFrames */
            getstatic android.view.Choreographer.SKIPPED_FRAME_WARNING_LIMIT:I
            i2l
            lcmp
            iflt 13
        10: .line 649
            ldc "Choreographer"
            new java.lang.StringBuilder
            dup
            ldc "Skipped "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            lload 11 /* skippedFrames */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            ldc " frames!  "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        11: .line 650
            ldc "The application may be doing too much work on its main thread."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        12: .line 649
            invokestatic android.util.Log.i:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        13: .line 652
      StackMap locals: android.view.Choreographer long int long java.lang.Object long long long
      StackMap stack:
            lload 9 /* jitterNanos */
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            lrem
            lstore 13 /* lastFrameOffset */
        start local 13 // long lastFrameOffset
        14: .line 660
            lload 4 /* startNanos */
            lload 13 /* lastFrameOffset */
            lsub
            lstore 1 /* frameTimeNanos */
        end local 13 // long lastFrameOffset
        end local 11 // long skippedFrames
        15: .line 663
      StackMap locals:
      StackMap stack:
            lload 1 /* frameTimeNanos */
            aload 0 /* this */
            getfield android.view.Choreographer.mLastFrameTimeNanos:J
            lcmp
            ifge 19
        16: .line 668
            aload 0 /* this */
            invokevirtual android.view.Choreographer.scheduleVsyncLocked:()V
        17: .line 669
            aload 6
            monitorexit
        18: return
        19: .line 672
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mFPSDivisor:I
            iconst_1
            if_icmple 25
        20: .line 673
            lload 1 /* frameTimeNanos */
            aload 0 /* this */
            getfield android.view.Choreographer.mLastFrameTimeNanos:J
            lsub
            lstore 11 /* timeSinceVsync */
        start local 11 // long timeSinceVsync
        21: .line 674
            lload 11 /* timeSinceVsync */
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            aload 0 /* this */
            getfield android.view.Choreographer.mFPSDivisor:I
            i2l
            lmul
            lcmp
            ifge 25
            lload 11 /* timeSinceVsync */
            lconst_0
            lcmp
            ifle 25
        22: .line 675
            aload 0 /* this */
            invokevirtual android.view.Choreographer.scheduleVsyncLocked:()V
        23: .line 676
            aload 6
            monitorexit
        24: return
        end local 11 // long timeSinceVsync
        25: .line 680
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameInfo:Landroid/view/FrameInfo;
            lload 7 /* intendedFrameTimeNanos */
            lload 1 /* frameTimeNanos */
            invokevirtual android.view.FrameInfo.setVsync:(JJ)V
        26: .line 681
            aload 0 /* this */
            iconst_0
            putfield android.view.Choreographer.mFrameScheduled:Z
        27: .line 682
            aload 0 /* this */
            lload 1 /* frameTimeNanos */
            putfield android.view.Choreographer.mLastFrameTimeNanos:J
        end local 9 // long jitterNanos
        end local 7 // long intendedFrameTimeNanos
        28: .line 632
            aload 6
            monitorexit
        29: goto 32
        end local 4 // long startNanos
      StackMap locals: android.view.Choreographer long int top top java.lang.Object
      StackMap stack: java.lang.Throwable
        30: aload 6
            monitorexit
        31: athrow
        start local 4 // long startNanos
        32: .line 686
      StackMap locals: android.view.Choreographer long int long
      StackMap stack:
            ldc 8
            ldc "Choreographer#doFrame"
            invokestatic android.os.Trace.traceBegin:(JLjava/lang/String;)V
        33: .line 687
            lload 1 /* frameTimeNanos */
            ldc 1000000
            ldiv
            invokestatic android.view.animation.AnimationUtils.lockAnimationClock:(J)V
        34: .line 689
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameInfo:Landroid/view/FrameInfo;
            invokevirtual android.view.FrameInfo.markInputHandlingStart:()V
        35: .line 690
            aload 0 /* this */
            iconst_0
            lload 1 /* frameTimeNanos */
            invokevirtual android.view.Choreographer.doCallbacks:(IJ)V
        36: .line 692
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameInfo:Landroid/view/FrameInfo;
            invokevirtual android.view.FrameInfo.markAnimationsStart:()V
        37: .line 693
            aload 0 /* this */
            iconst_1
            lload 1 /* frameTimeNanos */
            invokevirtual android.view.Choreographer.doCallbacks:(IJ)V
        38: .line 695
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameInfo:Landroid/view/FrameInfo;
            invokevirtual android.view.FrameInfo.markPerformTraversalsStart:()V
        39: .line 696
            aload 0 /* this */
            iconst_2
            lload 1 /* frameTimeNanos */
            invokevirtual android.view.Choreographer.doCallbacks:(IJ)V
        40: .line 698
            aload 0 /* this */
            iconst_3
            lload 1 /* frameTimeNanos */
            invokevirtual android.view.Choreographer.doCallbacks:(IJ)V
        41: .line 699
            goto 46
      StackMap locals:
      StackMap stack: java.lang.Throwable
        42: astore 6
        43: .line 700
            invokestatic android.view.animation.AnimationUtils.unlockAnimationClock:()V
        44: .line 701
            ldc 8
            invokestatic android.os.Trace.traceEnd:(J)V
        45: .line 702
            aload 6
            athrow
        46: .line 700
      StackMap locals:
      StackMap stack:
            invokestatic android.view.animation.AnimationUtils.unlockAnimationClock:()V
        47: .line 701
            ldc 8
            invokestatic android.os.Trace.traceEnd:(J)V
        48: .line 710
            return
        end local 4 // long startNanos
        end local 3 // int frame
        end local 1 // long frameTimeNanos
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   49     0                    this  Landroid/view/Choreographer;
            0   49     1          frameTimeNanos  J
            0   49     3                   frame  I
            6   30     4              startNanos  J
           32   49     4              startNanos  J
            5   28     7  intendedFrameTimeNanos  J
            7   28     9             jitterNanos  J
            9   15    11           skippedFrames  J
           14   15    13         lastFrameOffset  J
           21   25    11          timeSinceVsync  J
      Exception table:
        from    to  target  type
           1     3      30  any
           4    18      30  any
          19    24      30  any
          25    29      30  any
          30    31      30  any
          32    42      42  any
    MethodParameters:
                Name  Flags
      frameTimeNanos  
      frame           

  void doCallbacks(int, long);
    descriptor: (IJ)V
    flags: (0x0000) 
    Code:
      stack=6, locals=12, args_size=3
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
        start local 2 // long frameTimeNanos
         0: .line 714
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 5
            monitorenter
         1: .line 718
            invokestatic java.lang.System.nanoTime:()J
            lstore 6 /* now */
        start local 6 // long now
         2: .line 719
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue;
            iload 1 /* callbackType */
            aaload
         3: .line 720
            lload 6 /* now */
            ldc 1000000
            ldiv
         4: .line 719
            invokevirtual android.view.Choreographer$CallbackQueue.extractDueCallbacksLocked:(J)Landroid/view/Choreographer$CallbackRecord;
            astore 4 /* callbacks */
        start local 4 // android.view.Choreographer$CallbackRecord callbacks
         5: .line 721
            aload 4 /* callbacks */
            ifnonnull 8
         6: .line 722
            aload 5
            monitorexit
         7: return
         8: .line 724
      StackMap locals: android.view.Choreographer$CallbackRecord java.lang.Object long
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield android.view.Choreographer.mCallbacksRunning:Z
         9: .line 734
            iload 1 /* callbackType */
            iconst_3
            if_icmpne 18
        10: .line 735
            lload 6 /* now */
            lload 2 /* frameTimeNanos */
            lsub
            lstore 8 /* jitterNanos */
        start local 8 // long jitterNanos
        11: .line 736
            ldc 8
            ldc "jitterNanos"
            lload 8 /* jitterNanos */
            l2i
            invokestatic android.os.Trace.traceCounter:(JLjava/lang/String;I)V
        12: .line 737
            lload 8 /* jitterNanos */
            ldc 2
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            lmul
            lcmp
            iflt 18
        13: .line 738
            lload 8 /* jitterNanos */
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
            lrem
        14: .line 739
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameIntervalNanos:J
        15: .line 738
            ladd
            lstore 10 /* lastFrameOffset */
        start local 10 // long lastFrameOffset
        16: .line 748
            lload 6 /* now */
            lload 10 /* lastFrameOffset */
            lsub
            lstore 2 /* frameTimeNanos */
        17: .line 749
            aload 0 /* this */
            lload 2 /* frameTimeNanos */
            putfield android.view.Choreographer.mLastFrameTimeNanos:J
        end local 10 // long lastFrameOffset
        end local 8 // long jitterNanos
        end local 6 // long now
        18: .line 714
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        19: goto 22
        end local 4 // android.view.Choreographer$CallbackRecord callbacks
      StackMap locals: android.view.Choreographer int long top java.lang.Object
      StackMap stack: java.lang.Throwable
        20: aload 5
            monitorexit
        21: athrow
        start local 4 // android.view.Choreographer$CallbackRecord callbacks
        22: .line 754
      StackMap locals: android.view.Choreographer int long android.view.Choreographer$CallbackRecord
      StackMap stack:
            ldc 8
            getstatic android.view.Choreographer.CALLBACK_TRACE_TITLES:[Ljava/lang/String;
            iload 1 /* callbackType */
            aaload
            invokestatic android.os.Trace.traceBegin:(JLjava/lang/String;)V
        23: .line 755
            aload 4 /* callbacks */
            astore 5 /* c */
        start local 5 // android.view.Choreographer$CallbackRecord c
        24: goto 27
        25: .line 761
      StackMap locals: android.view.Choreographer$CallbackRecord
      StackMap stack:
            aload 5 /* c */
            lload 2 /* frameTimeNanos */
            invokevirtual android.view.Choreographer$CallbackRecord.run:(J)V
        26: .line 755
            aload 5 /* c */
            getfield android.view.Choreographer$CallbackRecord.next:Landroid/view/Choreographer$CallbackRecord;
            astore 5 /* c */
      StackMap locals:
      StackMap stack:
        27: aload 5 /* c */
            ifnonnull 25
        end local 5 // android.view.Choreographer$CallbackRecord c
        28: .line 763
            goto 42
      StackMap locals: android.view.Choreographer int long android.view.Choreographer$CallbackRecord
      StackMap stack: java.lang.Throwable
        29: astore 6
        30: .line 764
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 7
            monitorenter
        31: .line 765
            aload 0 /* this */
            iconst_0
            putfield android.view.Choreographer.mCallbacksRunning:Z
        32: .line 767
      StackMap locals: android.view.Choreographer int long android.view.Choreographer$CallbackRecord top java.lang.Throwable java.lang.Object
      StackMap stack:
            aload 4 /* callbacks */
            getfield android.view.Choreographer$CallbackRecord.next:Landroid/view/Choreographer$CallbackRecord;
            astore 8 /* next */
        start local 8 // android.view.Choreographer$CallbackRecord next
        33: .line 768
            aload 0 /* this */
            aload 4 /* callbacks */
            invokevirtual android.view.Choreographer.recycleCallbackLocked:(Landroid/view/Choreographer$CallbackRecord;)V
        34: .line 769
            aload 8 /* next */
            astore 4 /* callbacks */
        end local 8 // android.view.Choreographer$CallbackRecord next
        35: .line 770
            aload 4 /* callbacks */
            ifnonnull 32
        36: .line 764
            aload 7
            monitorexit
        37: goto 40
      StackMap locals:
      StackMap stack: java.lang.Throwable
        38: aload 7
            monitorexit
        39: athrow
        40: .line 772
      StackMap locals:
      StackMap stack:
            ldc 8
            invokestatic android.os.Trace.traceEnd:(J)V
        41: .line 773
            aload 6
            athrow
        42: .line 764
      StackMap locals: android.view.Choreographer int long android.view.Choreographer$CallbackRecord
      StackMap stack:
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 7
            monitorenter
        43: .line 765
            aload 0 /* this */
            iconst_0
            putfield android.view.Choreographer.mCallbacksRunning:Z
        44: .line 767
      StackMap locals: android.view.Choreographer int long android.view.Choreographer$CallbackRecord top top java.lang.Object
      StackMap stack:
            aload 4 /* callbacks */
            getfield android.view.Choreographer$CallbackRecord.next:Landroid/view/Choreographer$CallbackRecord;
            astore 8 /* next */
        start local 8 // android.view.Choreographer$CallbackRecord next
        45: .line 768
            aload 0 /* this */
            aload 4 /* callbacks */
            invokevirtual android.view.Choreographer.recycleCallbackLocked:(Landroid/view/Choreographer$CallbackRecord;)V
        46: .line 769
            aload 8 /* next */
            astore 4 /* callbacks */
        end local 8 // android.view.Choreographer$CallbackRecord next
        47: .line 770
            aload 4 /* callbacks */
            ifnonnull 44
        48: .line 764
            aload 7
            monitorexit
        49: goto 52
      StackMap locals:
      StackMap stack: java.lang.Throwable
        50: aload 7
            monitorexit
        51: athrow
        52: .line 772
      StackMap locals: android.view.Choreographer int long android.view.Choreographer$CallbackRecord
      StackMap stack:
            ldc 8
            invokestatic android.os.Trace.traceEnd:(J)V
        53: .line 774
            return
        end local 4 // android.view.Choreographer$CallbackRecord callbacks
        end local 2 // long frameTimeNanos
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   54     0             this  Landroid/view/Choreographer;
            0   54     1     callbackType  I
            0   54     2   frameTimeNanos  J
            5   20     4        callbacks  Landroid/view/Choreographer$CallbackRecord;
           22   54     4        callbacks  Landroid/view/Choreographer$CallbackRecord;
            2   18     6              now  J
           11   18     8      jitterNanos  J
           16   18    10  lastFrameOffset  J
           24   28     5                c  Landroid/view/Choreographer$CallbackRecord;
           33   35     8             next  Landroid/view/Choreographer$CallbackRecord;
           45   47     8             next  Landroid/view/Choreographer$CallbackRecord;
      Exception table:
        from    to  target  type
           1     7      20  any
           8    19      20  any
          20    21      20  any
          22    29      29  any
          31    37      38  any
          38    39      38  any
          43    49      50  any
          50    51      50  any
    MethodParameters:
                Name  Flags
      callbackType    
      frameTimeNanos  

  void doScheduleVsync();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 777
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 778
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameScheduled:Z
            ifeq 3
         2: .line 779
            aload 0 /* this */
            invokevirtual android.view.Choreographer.scheduleVsyncLocked:()V
         3: .line 777
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 1
            monitorexit
         4: goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         5: aload 1
            monitorexit
         6: athrow
         7: .line 782
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Landroid/view/Choreographer;
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any

  void doScheduleCallback(int);
    descriptor: (I)V
    flags: (0x0000) 
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // android.view.Choreographer this
        start local 1 // int callbackType
         0: .line 785
            aload 0 /* this */
            getfield android.view.Choreographer.mLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 786
            aload 0 /* this */
            getfield android.view.Choreographer.mFrameScheduled:Z
            ifne 5
         2: .line 787
            invokestatic android.os.SystemClock.uptimeMillis:()J
            lstore 3 /* now */
        start local 3 // long now
         3: .line 788
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue;
            iload 1 /* callbackType */
            aaload
            lload 3 /* now */
            invokevirtual android.view.Choreographer$CallbackQueue.hasDueCallbacksLocked:(J)Z
            ifeq 5
         4: .line 789
            aload 0 /* this */
            lload 3 /* now */
            invokevirtual android.view.Choreographer.scheduleFrameLocked:(J)V
        end local 3 // long now
         5: .line 785
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2
            monitorexit
         6: goto 9
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: aload 2
            monitorexit
         8: athrow
         9: .line 793
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int callbackType
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0          this  Landroid/view/Choreographer;
            0   10     1  callbackType  I
            3    5     3           now  J
      Exception table:
        from    to  target  type
           1     6       7  any
           7     8       7  any
    MethodParameters:
              Name  Flags
      callbackType  

  private void scheduleVsyncLocked();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 796
            aload 0 /* this */
            getfield android.view.Choreographer.mDisplayEventReceiver:Landroid/view/Choreographer$FrameDisplayEventReceiver;
            invokevirtual android.view.Choreographer$FrameDisplayEventReceiver.scheduleVsync:()V
         1: .line 797
            return
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/view/Choreographer;

  private boolean isRunningOnLooperThreadLocked();
    descriptor: ()Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // android.view.Choreographer this
         0: .line 800
            invokestatic android.os.Looper.myLooper:()Landroid/os/Looper;
            aload 0 /* this */
            getfield android.view.Choreographer.mLooper:Landroid/os/Looper;
            if_acmpne 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/view/Choreographer;

  private android.view.Choreographer$CallbackRecord obtainCallbackLocked(long, java.lang.Object, java.lang.Object);
    descriptor: (JLjava/lang/Object;Ljava/lang/Object;)Landroid/view/Choreographer$CallbackRecord;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=4
        start local 0 // android.view.Choreographer this
        start local 1 // long dueTime
        start local 3 // java.lang.Object action
        start local 4 // java.lang.Object token
         0: .line 804
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackPool:Landroid/view/Choreographer$CallbackRecord;
            astore 5 /* callback */
        start local 5 // android.view.Choreographer$CallbackRecord callback
         1: .line 805
            aload 5 /* callback */
            ifnonnull 4
         2: .line 806
            new android.view.Choreographer$CallbackRecord
            dup
            invokespecial android.view.Choreographer$CallbackRecord.<init>:()V
            astore 5 /* callback */
         3: .line 807
            goto 6
         4: .line 808
      StackMap locals: android.view.Choreographer$CallbackRecord
      StackMap stack:
            aload 0 /* this */
            aload 5 /* callback */
            getfield android.view.Choreographer$CallbackRecord.next:Landroid/view/Choreographer$CallbackRecord;
            putfield android.view.Choreographer.mCallbackPool:Landroid/view/Choreographer$CallbackRecord;
         5: .line 809
            aload 5 /* callback */
            aconst_null
            putfield android.view.Choreographer$CallbackRecord.next:Landroid/view/Choreographer$CallbackRecord;
         6: .line 811
      StackMap locals:
      StackMap stack:
            aload 5 /* callback */
            lload 1 /* dueTime */
            putfield android.view.Choreographer$CallbackRecord.dueTime:J
         7: .line 812
            aload 5 /* callback */
            aload 3 /* action */
            putfield android.view.Choreographer$CallbackRecord.action:Ljava/lang/Object;
         8: .line 813
            aload 5 /* callback */
            aload 4 /* token */
            putfield android.view.Choreographer$CallbackRecord.token:Ljava/lang/Object;
         9: .line 814
            aload 5 /* callback */
            areturn
        end local 5 // android.view.Choreographer$CallbackRecord callback
        end local 4 // java.lang.Object token
        end local 3 // java.lang.Object action
        end local 1 // long dueTime
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Landroid/view/Choreographer;
            0   10     1   dueTime  J
            0   10     3    action  Ljava/lang/Object;
            0   10     4     token  Ljava/lang/Object;
            1   10     5  callback  Landroid/view/Choreographer$CallbackRecord;
    MethodParameters:
         Name  Flags
      dueTime  
      action   
      token    

  private void recycleCallbackLocked(android.view.Choreographer$CallbackRecord);
    descriptor: (Landroid/view/Choreographer$CallbackRecord;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.view.Choreographer this
        start local 1 // android.view.Choreographer$CallbackRecord callback
         0: .line 818
            aload 1 /* callback */
            aconst_null
            putfield android.view.Choreographer$CallbackRecord.action:Ljava/lang/Object;
         1: .line 819
            aload 1 /* callback */
            aconst_null
            putfield android.view.Choreographer$CallbackRecord.token:Ljava/lang/Object;
         2: .line 820
            aload 1 /* callback */
            aload 0 /* this */
            getfield android.view.Choreographer.mCallbackPool:Landroid/view/Choreographer$CallbackRecord;
            putfield android.view.Choreographer$CallbackRecord.next:Landroid/view/Choreographer$CallbackRecord;
         3: .line 821
            aload 0 /* this */
            aload 1 /* callback */
            putfield android.view.Choreographer.mCallbackPool:Landroid/view/Choreographer$CallbackRecord;
         4: .line 822
            return
        end local 1 // android.view.Choreographer$CallbackRecord callback
        end local 0 // android.view.Choreographer this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Landroid/view/Choreographer;
            0    5     1  callback  Landroid/view/Choreographer$CallbackRecord;
    MethodParameters:
          Name  Flags
      callback  
}
SourceFile: "Choreographer.java"
NestMembers:
  android.view.Choreographer$1  android.view.Choreographer$2  android.view.Choreographer$3  android.view.Choreographer$CallbackQueue  android.view.Choreographer$CallbackRecord  android.view.Choreographer$FrameCallback  android.view.Choreographer$FrameDisplayEventReceiver  android.view.Choreographer$FrameHandler
InnerClasses:
  android.view.Choreographer$1
  android.view.Choreographer$2
  android.view.Choreographer$3
  private final CallbackQueue = android.view.Choreographer$CallbackQueue of android.view.Choreographer
  private final CallbackRecord = android.view.Choreographer$CallbackRecord of android.view.Choreographer
  public abstract FrameCallback = android.view.Choreographer$FrameCallback of android.view.Choreographer
  private final FrameDisplayEventReceiver = android.view.Choreographer$FrameDisplayEventReceiver of android.view.Choreographer
  private final FrameHandler = android.view.Choreographer$FrameHandler of android.view.Choreographer
  public final Mode = android.view.Display$Mode of android.view.Display