summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/ViewRootImpl.java
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-02-15 15:06:01 -0800
committerJeff Brown <jeffbrown@google.com>2012-02-15 15:06:01 -0800
commit4a06c8008b2edd6677f9a411af79b0a4971b87fe (patch)
treece3bca001e3f2a7778d39be2cb5049f7b1620e16 /core/java/android/view/ViewRootImpl.java
parentfef3d62b16bccd9ef7a32c2e1da94f694b34c405 (diff)
downloadframeworks_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.java38
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;