diff options
| author | Jeff Brown <jeffbrown@google.com> | 2012-02-15 15:06:01 -0800 |
|---|---|---|
| committer | Jeff Brown <jeffbrown@google.com> | 2012-02-15 15:06:01 -0800 |
| commit | 4a06c8008b2edd6677f9a411af79b0a4971b87fe (patch) | |
| tree | ce3bca001e3f2a7778d39be2cb5049f7b1620e16 /core/java/android/view/ViewRootImpl.java | |
| parent | fef3d62b16bccd9ef7a32c2e1da94f694b34c405 (diff) | |
| download | frameworks_base-4a06c8008b2edd6677f9a411af79b0a4971b87fe.zip frameworks_base-4a06c8008b2edd6677f9a411af79b0a4971b87fe.tar.gz frameworks_base-4a06c8008b2edd6677f9a411af79b0a4971b87fe.tar.bz2 | |
Simplify Choreographer API.
Removed the listeners and schedule animation / draw methods.
Instead all requests are posted as one-shot callbacks, which is a
better match for how clients actually use the Choreographer.
Bug: 5721047
Change-Id: I113180b2713a300e4444d0d987f52b8157b7ac15
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 1930a5e..fbcb423 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -97,8 +97,7 @@ import java.util.List; */ @SuppressWarnings({"EmptyCatchBlock", "PointlessBooleanExpression"}) public final class ViewRootImpl extends Handler implements ViewParent, - View.AttachInfo.Callbacks, HardwareRenderer.HardwareDrawCallbacks, - Choreographer.OnDrawListener { + View.AttachInfo.Callbacks, HardwareRenderer.HardwareDrawCallbacks { private static final String TAG = "ViewRootImpl"; private static final boolean DBG = false; private static final boolean LOCAL_LOGV = false; @@ -463,8 +462,6 @@ public final class ViewRootImpl extends Handler implements ViewParent, public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) { synchronized (this) { if (mView == null) { - mChoreographer.addOnDrawListener(this); - mView = view; mFallbackEventHandler.setView(view); mWindowAttributes.copyFrom(attrs); @@ -841,7 +838,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, public void scheduleTraversals() { if (!mTraversalScheduled) { mTraversalScheduled = true; - mChoreographer.scheduleDraw(); + scheduleFrame(); } } @@ -849,8 +846,21 @@ public final class ViewRootImpl extends Handler implements ViewParent, mTraversalScheduled = false; } - @Override - public void onDraw() { + void scheduleFrame() { + if (!mFrameScheduled) { + mChoreographer.postDrawCallback(mFrameRunnable); + mFrameScheduled = true; + } + } + + void unscheduleFrame() { + if (mFrameScheduled) { + mFrameScheduled = false; + mChoreographer.removeDrawCallback(mFrameRunnable); + } + } + + void doFrame() { if (mInputEventReceiver != null) { mInputEventReceiver.consumeBatchedInputEvents(); } @@ -2376,7 +2386,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, mInputChannel = null; } - mChoreographer.removeOnDrawListener(this); + unscheduleFrame(); } void updateConfiguration(Configuration config, boolean force) { @@ -3923,6 +3933,16 @@ public final class ViewRootImpl extends Handler implements ViewParent, } } + final class FrameRunnable implements Runnable { + @Override + public void run() { + mFrameScheduled = false; + doFrame(); + } + } + final FrameRunnable mFrameRunnable = new FrameRunnable(); + boolean mFrameScheduled; + final class WindowInputEventReceiver extends InputEventReceiver { public WindowInputEventReceiver(InputChannel inputChannel, Looper looper) { super(inputChannel, looper); @@ -3935,7 +3955,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, @Override public void onBatchedInputEventPending() { - mChoreographer.scheduleDraw(); + scheduleFrame(); } } WindowInputEventReceiver mInputEventReceiver; |
