diff options
| author | John Reck <jreck@google.com> | 2018-06-04 17:02:02 -0700 |
|---|---|---|
| committer | John Reck <jreck@google.com> | 2018-06-04 17:02:02 -0700 |
| commit | 568b2a64f0f8e4f6b93dfe68316fcbad0dbdb28b (patch) | |
| tree | a41c5e12803ad85817eee3b5672f7009a6d5adba /core/java/android | |
| parent | e42868974bda97f00dfd63559074bb02c1fc6531 (diff) | |
Tweak some RenderNode API surfaces
* no-arg #start()
* remove no-op #destroy method
* fix a Java-imposed quirk that you can't draw a
currently invalid RenderNode, forcing bottom-up
recording for no particular reason
Test: builds
Change-Id: I28b41c83b4f7f9ddced843b0d57e9ac510d40ae5
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/DisplayListCanvas.java | 5 | ||||
| -rw-r--r-- | core/java/android/view/RenderNode.java | 33 | ||||
| -rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 6 | ||||
| -rw-r--r-- | core/java/android/view/ViewDebug.java | 1 | ||||
| -rw-r--r-- | core/java/android/widget/Magnifier.java | 1 |
5 files changed, 21 insertions, 25 deletions
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java index 671532c90bc8..df4d5c415b98 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/core/java/android/view/DisplayListCanvas.java @@ -180,13 +180,12 @@ public final class DisplayListCanvas extends RecordingCanvas { /////////////////////////////////////////////////////////////////////////// /** - * Draws the specified display list onto this canvas. The display list can only - * be drawn if {@link android.view.RenderNode#isValid()} returns true. + * Draws the specified display list onto this canvas. * * @param renderNode The RenderNode to draw. */ public void drawRenderNode(RenderNode renderNode) { - nDrawRenderNode(mNativeCanvasWrapper, renderNode.getNativeDisplayList()); + nDrawRenderNode(mNativeCanvasWrapper, renderNode.mNativeRenderNode); } /////////////////////////////////////////////////////////////////////////// diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java index 7c25fac3974e..e10eeb0457be 100644 --- a/core/java/android/view/RenderNode.java +++ b/core/java/android/view/RenderNode.java @@ -139,7 +139,9 @@ public class RenderNode { RenderNode.class.getClassLoader(), nGetNativeFinalizer(), 1024); } - // Do not access directly unless you are ThreadedRenderer + /** Not for general use; use only if you are ThreadedRenderer or DisplayListCanvas. + * @hide + */ final long mNativeRenderNode; private final View mOwningView; @@ -159,15 +161,6 @@ public class RenderNode { } /** - * Immediately destroys the RenderNode - * Only suitable for testing/benchmarking where waiting for the GC/finalizer - * is not feasible. - */ - public void destroy() { - // TODO: Removed temporarily - } - - /** * Creates a new RenderNode that can be used to record batches of * drawing operations, and store / apply render properties when drawn. * @@ -219,6 +212,14 @@ public class RenderNode { } /** + * Same as {@link #start(int, int)} but with the RenderNode's width & height + */ + public DisplayListCanvas start() { + return DisplayListCanvas.obtain(this, + nGetWidth(mNativeRenderNode), nGetHeight(mNativeRenderNode)); + } + + /** * Ends the recording for this display list. A display list cannot be * replayed if recording is not finished. Calling this method marks * the display list valid and {@link #isValid()} will return true. @@ -251,13 +252,6 @@ public class RenderNode { return nIsValid(mNativeRenderNode); } - long getNativeDisplayList() { - if (!isValid()) { - throw new IllegalStateException("The display list is not valid."); - } - return mNativeRenderNode; - } - /////////////////////////////////////////////////////////////////////////// // Matrix manipulation /////////////////////////////////////////////////////////////////////////// @@ -463,7 +457,6 @@ public class RenderNode { * @see #setHasOverlappingRendering(boolean) */ public boolean hasOverlappingRendering() { - //noinspection SimplifiableIfStatement return nHasOverlappingRendering(mNativeRenderNode); } @@ -1009,4 +1002,8 @@ public class RenderNode { private static native float nGetPivotX(long renderNode); @CriticalNative private static native float nGetPivotY(long renderNode); + @CriticalNative + private static native int nGetWidth(long renderNode); + @CriticalNative + private static native int nGetHeight(long renderNode); } diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index aa1e4079f91f..2f975b68b985 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -850,7 +850,9 @@ public final class ThreadedRenderer { void buildLayer(RenderNode node) { - nBuildLayer(mNativeProxy, node.getNativeDisplayList()); + if (node.isValid()) { + nBuildLayer(mNativeProxy, node.mNativeRenderNode); + } } @@ -928,7 +930,7 @@ public final class ThreadedRenderer { * not the RenderNode from a View. **/ public static Bitmap createHardwareBitmap(RenderNode node, int width, int height) { - return nCreateHardwareBitmap(node.getNativeDisplayList(), width, height); + return nCreateHardwareBitmap(node.mNativeRenderNode, width, height); } /** diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 276f50a51e66..e4c595b4f53b 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -531,7 +531,6 @@ public class ViewDebug { throws IOException { RenderNode node = RenderNode.create("ViewDebug", null); profileViewAndChildren(view, node, out, true); - node.destroy(); } private static void profileViewAndChildren(View view, RenderNode node, BufferedWriter out, diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java index 929496f2d237..11054c81f342 100644 --- a/core/java/android/widget/Magnifier.java +++ b/core/java/android/widget/Magnifier.java @@ -611,7 +611,6 @@ public final class Magnifier { mRenderer.destroy(); mSurfaceControl.destroy(); mSurfaceSession.kill(); - mBitmapRenderNode.destroy(); mHandler.removeCallbacks(mMagnifierUpdater); if (mBitmap != null) { mBitmap.recycle(); |
