1 package com.android.layoutlib.bridge; 2 3 import com.android.layoutlib.bridge.util.ChoreographerCallbacks; 4 import com.android.layoutlib.bridge.util.HandlerMessageQueue; 5 import com.android.tools.layoutlib.annotations.NotNull; 6 7 import android.view.Choreographer_Delegate; 8 9 import java.util.concurrent.atomic.AtomicLong; 10 11 public class SessionInteractiveData { 12 private final HandlerMessageQueue mHandlerMessageQueue = new HandlerMessageQueue(); 13 private final ChoreographerCallbacks mChoreographerCallbacks = new ChoreographerCallbacks(); 14 // Current system time 15 private final AtomicLong mNanosTime = new AtomicLong(System.nanoTime()); 16 private final AtomicLong mPreviousNanosTime = new AtomicLong(System.nanoTime()); 17 // Time that the system booted up in nanos 18 private final AtomicLong mBootNanosTime = new AtomicLong(System.nanoTime()); 19 20 @NotNull getHandlerMessageQueue()21 public HandlerMessageQueue getHandlerMessageQueue() { 22 return mHandlerMessageQueue; 23 } 24 25 @NotNull getChoreographerCallbacks()26 public ChoreographerCallbacks getChoreographerCallbacks() { return mChoreographerCallbacks; } 27 setNanosTime(long nanos)28 public void setNanosTime(long nanos) { 29 mPreviousNanosTime.set(mNanosTime.get()); 30 mNanosTime.set(nanos); 31 } 32 getNanosTime()33 public long getNanosTime() { 34 return mNanosTime.get() - mPreviousNanosTime.get() 35 + Choreographer_Delegate.sChoreographerTime; 36 } 37 setBootNanosTime(long nanos)38 public void setBootNanosTime(long nanos) { 39 mBootNanosTime.set(nanos); 40 } 41 getBootNanosTime()42 public long getBootNanosTime() { 43 return mBootNanosTime.get(); 44 } 45 dispose()46 public void dispose() { 47 mHandlerMessageQueue.clear(); 48 mChoreographerCallbacks.clear(); 49 } 50 } 51