diff options
author | 2019-07-01 12:47:06 +0000 | |
---|---|---|
committer | 2019-07-01 12:47:06 +0000 | |
commit | 9e6679b0403562faa714e32073346a143f5d57d1 (patch) | |
tree | c512786f215f0ca3ebd935b88af69bbf9bd752c3 | |
parent | 4377d5637ffe8ba3e0dc53d9d12b0bb5cce148c2 (diff) | |
parent | 935935660c47cf2daee0fd34e429a100e07bed14 (diff) |
Merge "Extend ViewRootImpl to support multiple FrameDrawingCallback"
-rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 24 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 2 |
2 files changed, 18 insertions, 8 deletions
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 3d3d5dc7db32..f18aa81b95e5 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -17,6 +17,7 @@ package android.view; import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.Context; import android.content.res.TypedArray; import android.graphics.HardwareRenderer; @@ -35,6 +36,7 @@ import com.android.internal.R; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.ArrayList; /** * Threaded renderer that proxies the rendering to a render thread. Most calls @@ -300,7 +302,8 @@ public final class ThreadedRenderer extends HardwareRenderer { private boolean mEnabled; private boolean mRequested = true; - private FrameDrawingCallback mNextRtFrameCallback; + @Nullable + private ArrayList<FrameDrawingCallback> mNextRtFrameCallbacks; ThreadedRenderer(Context context, boolean translucent, String name) { super(); @@ -441,8 +444,11 @@ public final class ThreadedRenderer extends HardwareRenderer { * * @param callback The callback to register. */ - void registerRtFrameCallback(FrameDrawingCallback callback) { - mNextRtFrameCallback = callback; + void registerRtFrameCallback(@NonNull FrameDrawingCallback callback) { + if (mNextRtFrameCallbacks == null) { + mNextRtFrameCallbacks = new ArrayList<>(); + } + mNextRtFrameCallbacks.add(callback); } /** @@ -583,10 +589,14 @@ public final class ThreadedRenderer extends HardwareRenderer { // Consume and set the frame callback after we dispatch draw to the view above, but before // onPostDraw below which may reset the callback for the next frame. This ensures that // updates to the frame callback during scroll handling will also apply in this frame. - final FrameDrawingCallback callback = mNextRtFrameCallback; - mNextRtFrameCallback = null; - if (callback != null) { - setFrameCallback(callback); + if (mNextRtFrameCallbacks != null) { + final ArrayList<FrameDrawingCallback> frameCallbacks = mNextRtFrameCallbacks; + mNextRtFrameCallbacks = null; + setFrameCallback(frame -> { + for (int i = 0; i < frameCallbacks.size(); ++i) { + frameCallbacks.get(i).onFrameDraw(frame); + } + }); } if (mRootNodeNeedsUpdate || !mRootNode.hasDisplayList()) { diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index cb51545a8a69..613ddcf577ed 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1132,7 +1132,7 @@ public final class ViewRootImpl implements ViewParent, * * @param callback The callback to register. */ - public void registerRtFrameCallback(FrameDrawingCallback callback) { + public void registerRtFrameCallback(@NonNull FrameDrawingCallback callback) { if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mThreadedRenderer.registerRtFrameCallback(frame -> { try { |