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
This commit is contained in:
@@ -47,8 +47,7 @@ public class RenderNodePerfTest {
|
||||
public void testCreateRenderNodeNoName() {
|
||||
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
|
||||
while (state.keepRunning()) {
|
||||
RenderNode node = RenderNode.create(null, null);
|
||||
node.destroy();
|
||||
RenderNode.create(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,8 +55,7 @@ public class RenderNodePerfTest {
|
||||
public void testCreateRenderNode() {
|
||||
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
|
||||
while (state.keepRunning()) {
|
||||
RenderNode node = RenderNode.create("LinearLayout", null);
|
||||
node.destroy();
|
||||
RenderNode.create("LinearLayout", null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -158,15 +160,6 @@ public class RenderNode {
|
||||
mOwningView = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
@@ -218,6 +211,14 @@ public class RenderNode {
|
||||
return DisplayListCanvas.obtain(this, width, height);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -611,7 +611,6 @@ public final class Magnifier {
|
||||
mRenderer.destroy();
|
||||
mSurfaceControl.destroy();
|
||||
mSurfaceSession.kill();
|
||||
mBitmapRenderNode.destroy();
|
||||
mHandler.removeCallbacks(mMagnifierUpdater);
|
||||
if (mBitmap != null) {
|
||||
mBitmap.recycle();
|
||||
|
||||
@@ -431,6 +431,14 @@ static jfloat android_view_RenderNode_getPivotY(jlong renderNodePtr) {
|
||||
return renderNode->stagingProperties().getPivotY();
|
||||
}
|
||||
|
||||
static jint android_view_RenderNode_getWidth(jlong renderNodePtr) {
|
||||
return reinterpret_cast<RenderNode*>(renderNodePtr)->stagingProperties().getWidth();
|
||||
}
|
||||
|
||||
static jint android_view_RenderNode_getHeight(jlong renderNodePtr) {
|
||||
return reinterpret_cast<RenderNode*>(renderNodePtr)->stagingProperties().getHeight();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// RenderProperties - Animations
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -648,6 +656,8 @@ static const JNINativeMethod gMethods[] = {
|
||||
|
||||
{ "nGetPivotX", "(J)F", (void*) android_view_RenderNode_getPivotX },
|
||||
{ "nGetPivotY", "(J)F", (void*) android_view_RenderNode_getPivotY },
|
||||
{ "nGetWidth", "(J)I", (void*) android_view_RenderNode_getWidth },
|
||||
{ "nGetHeight", "(J)I", (void*) android_view_RenderNode_getHeight },
|
||||
};
|
||||
|
||||
int register_android_view_RenderNode(JNIEnv* env) {
|
||||
|
||||
Reference in New Issue
Block a user