diff options
| author | John Reck <jreck@google.com> | 2014-05-22 15:43:54 -0700 |
|---|---|---|
| committer | John Reck <jreck@google.com> | 2014-05-23 12:56:38 -0700 |
| commit | a5dda645da738da7b4ae15e28fa7d93d3b04b94f (patch) | |
| tree | 5ce51af907c91030662b69c37e8ece7a63e041ed /core/java | |
| parent | d30241541c3adcb126bb263ad8596e7902a6b5ae (diff) | |
Bag of scheduling tweaks
Bug: 15118640
* Prevent over-stuffing the queue by dropping frames
* Prevent double-drawing in one pulse by RT by deferring
vsync registration until post-draw so that it catches
the next vsync pulse instead of the current one
* Bias vsync race condition towards the UI thread
* Fix queueDelay to actually work
Change-Id: Ibf584258bd93ebcbba058bd976dc8b307f1c6155
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/HardwareRenderer.java | 6 | ||||
| -rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 6 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 12 |
3 files changed, 24 insertions, 0 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index a902ce728668..3c4d83fac8ad 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -579,6 +579,12 @@ public abstract class HardwareRenderer { abstract void fence(); /** + * Called by {@link ViewRootImpl} when a new performTraverals is scheduled. + */ + public void notifyFramePending() { + } + + /** * Describes a series of frames that should be drawn on screen as a graph. * Each frame is composed of 1 or more elements. */ diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 704d516874ee..8417887c8782 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -291,6 +291,11 @@ public class ThreadedRenderer extends HardwareRenderer { } @Override + public void notifyFramePending() { + nNotifyFramePending(mNativeProxy); + } + + @Override protected void finalize() throws Throwable { try { nDeleteProxy(mNativeProxy); @@ -364,4 +369,5 @@ public class ThreadedRenderer extends HardwareRenderer { private static native void nDestroyLayer(long nativeProxy, long layer); private static native void nFence(long nativeProxy); + private static native void nNotifyFramePending(long nativeProxy); } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 799a40665c26..fc7bf0e98527 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -999,6 +999,17 @@ public final class ViewRootImpl implements ViewParent, } } + /** + * Notifies the HardwareRenderer that a new frame will be coming soon. + * Currently only {@link ThreadedRenderer} cares about this, and uses + * this knowledge to adjust the scheduling of off-thread animations + */ + void notifyRendererOfFramePending() { + if (mAttachInfo.mHardwareRenderer != null) { + mAttachInfo.mHardwareRenderer.notifyFramePending(); + } + } + void scheduleTraversals() { if (!mTraversalScheduled) { mTraversalScheduled = true; @@ -1006,6 +1017,7 @@ public final class ViewRootImpl implements ViewParent, mChoreographer.postCallback( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); scheduleConsumeBatchedInput(); + notifyRendererOfFramePending(); } } |
