diff options
-rw-r--r-- | graphics/java/android/graphics/RecordingCanvas.java | 6 | ||||
-rw-r--r-- | graphics/java/android/graphics/RenderNode.java | 18 | ||||
-rw-r--r-- | libs/hwui/RenderNode.cpp | 4 | ||||
-rw-r--r-- | libs/hwui/RenderNode.h | 1 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_DisplayListCanvas.cpp | 8 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_RenderNode.cpp | 15 |
6 files changed, 21 insertions, 31 deletions
diff --git a/graphics/java/android/graphics/RecordingCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java index 9f46ceb61332..4673f430642b 100644 --- a/graphics/java/android/graphics/RecordingCanvas.java +++ b/graphics/java/android/graphics/RecordingCanvas.java @@ -71,8 +71,8 @@ public final class RecordingCanvas extends BaseRecordingCanvas { } /*package*/ - long finishRecording() { - return nFinishRecording(mNativeCanvasWrapper); + void finishRecording(RenderNode node) { + nFinishRecording(mNativeCanvasWrapper, node.mNativeRenderNode); } /////////////////////////////////////////////////////////////////////////// @@ -251,7 +251,7 @@ public final class RecordingCanvas extends BaseRecordingCanvas { @CriticalNative private static native void nEnableZ(long renderer, boolean enableZ); @CriticalNative - private static native long nFinishRecording(long renderer); + private static native void nFinishRecording(long renderer, long renderNode); @CriticalNative private static native void nDrawRenderNode(long renderer, long renderNode); @CriticalNative diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java index 117828dd23db..c1310a9214e0 100644 --- a/graphics/java/android/graphics/RenderNode.java +++ b/graphics/java/android/graphics/RenderNode.java @@ -30,7 +30,6 @@ import android.view.View; import com.android.internal.util.ArrayUtils; import dalvik.annotation.optimization.CriticalNative; -import dalvik.annotation.optimization.FastNative; import libcore.util.NativeAllocationRegistry; @@ -406,8 +405,7 @@ public final class RenderNode { } RecordingCanvas canvas = mCurrentRecordingCanvas; mCurrentRecordingCanvas = null; - long displayList = canvas.finishRecording(); - nSetDisplayList(mNativeRenderNode, displayList); + canvas.finishRecording(this); canvas.recycle(); } @@ -438,7 +436,7 @@ public final class RenderNode { * obsolete resources after related resources are gone. */ public void discardDisplayList() { - nSetDisplayList(mNativeRenderNode, 0); + nDiscardDisplayList(mNativeRenderNode); } /** @@ -1528,20 +1526,14 @@ public final class RenderNode { private static native void nEndAllAnimators(long renderNode); - - /////////////////////////////////////////////////////////////////////////// - // @FastNative methods - /////////////////////////////////////////////////////////////////////////// - - @FastNative - private static native void nSetDisplayList(long renderNode, long newData); - - /////////////////////////////////////////////////////////////////////////// // @CriticalNative methods /////////////////////////////////////////////////////////////////////////// @CriticalNative + private static native void nDiscardDisplayList(long renderNode); + + @CriticalNative private static native boolean nIsValid(long renderNode); // Matrix diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 74c70c8969f2..1c78eede376d 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -81,6 +81,10 @@ void RenderNode::setStagingDisplayList(DisplayList* displayList) { mStagingDisplayList = displayList; } +void RenderNode::discardStagingDisplayList() { + setStagingDisplayList(nullptr); +} + /** * This function is a simplified version of replay(), where we simply retrieve and log the * display list. This function should remain in sync with the replay() function. diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index 6d5e62e955bb..1eaf0d425818 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -101,6 +101,7 @@ public: enum ReplayFlag { kReplayFlag_ClipChildren = 0x1 }; void setStagingDisplayList(DisplayList* newData); + void discardStagingDisplayList(); void output(); int getUsageSize(); diff --git a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp index 7c1422de0984..5c1346801c0d 100644 --- a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp +++ b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp @@ -98,9 +98,11 @@ static void android_view_DisplayListCanvas_enableZ(CRITICAL_JNI_PARAMS_COMMA jlo canvas->enableZ(reorderEnable); } -static jlong android_view_DisplayListCanvas_finishRecording(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr) { +static void android_view_DisplayListCanvas_finishRecording( + CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jlong renderNodePtr) { Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); - return reinterpret_cast<jlong>(canvas->finishRecording()); + RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); + renderNode->setStagingDisplayList(canvas->finishRecording()); } static void android_view_DisplayListCanvas_drawRenderNode(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jlong renderNodePtr) { @@ -157,7 +159,7 @@ static JNINativeMethod gMethods[] = { { "nGetMaximumTextureWidth", "()I", (void*) android_view_DisplayListCanvas_getMaxTextureSize }, { "nGetMaximumTextureHeight", "()I", (void*) android_view_DisplayListCanvas_getMaxTextureSize }, { "nEnableZ", "(JZ)V", (void*) android_view_DisplayListCanvas_enableZ }, - { "nFinishRecording", "(J)J", (void*) android_view_DisplayListCanvas_finishRecording }, + { "nFinishRecording", "(JJ)V", (void*) android_view_DisplayListCanvas_finishRecording }, { "nDrawRenderNode", "(JJ)V", (void*) android_view_DisplayListCanvas_drawRenderNode }, { "nDrawTextureLayer", "(JJ)V", (void*) android_view_DisplayListCanvas_drawTextureLayer }, { "nDrawCircle", "(JJJJJ)V", (void*) android_view_DisplayListCanvas_drawCircleProps }, diff --git a/libs/hwui/jni/android_graphics_RenderNode.cpp b/libs/hwui/jni/android_graphics_RenderNode.cpp index 6f4ba894e3af..8b35d96aeac8 100644 --- a/libs/hwui/jni/android_graphics_RenderNode.cpp +++ b/libs/hwui/jni/android_graphics_RenderNode.cpp @@ -76,11 +76,9 @@ static jlong android_view_RenderNode_getNativeFinalizer(JNIEnv* env, return static_cast<jlong>(reinterpret_cast<uintptr_t>(&releaseRenderNode)); } -static void android_view_RenderNode_setDisplayList(JNIEnv* env, - jobject clazz, jlong renderNodePtr, jlong displayListPtr) { +static void android_view_RenderNode_discardDisplayList(CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr) { RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); - DisplayList* newData = reinterpret_cast<DisplayList*>(displayListPtr); - renderNode->setStagingDisplayList(newData); + renderNode->discardStagingDisplayList(); } static jboolean android_view_RenderNode_isValid(CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr) { @@ -657,18 +655,11 @@ static const JNINativeMethod gMethods[] = { { "nAddAnimator", "(JJ)V", (void*) android_view_RenderNode_addAnimator }, { "nEndAllAnimators", "(J)V", (void*) android_view_RenderNode_endAllAnimators }, { "nRequestPositionUpdates", "(JLandroid/graphics/RenderNode$PositionUpdateListener;)V", (void*) android_view_RenderNode_requestPositionUpdates }, - { "nSetDisplayList", "(JJ)V", (void*) android_view_RenderNode_setDisplayList }, - - -// ---------------------------------------------------------------------------- -// Fast JNI via @CriticalNative annotation in RenderNode.java -// ---------------------------------------------------------------------------- - { "nSetDisplayList", "(JJ)V", (void*) android_view_RenderNode_setDisplayList }, - // ---------------------------------------------------------------------------- // Critical JNI via @CriticalNative annotation in RenderNode.java // ---------------------------------------------------------------------------- + { "nDiscardDisplayList", "(J)V", (void*) android_view_RenderNode_discardDisplayList }, { "nIsValid", "(J)Z", (void*) android_view_RenderNode_isValid }, { "nSetLayerType", "(JI)Z", (void*) android_view_RenderNode_setLayerType }, { "nGetLayerType", "(J)I", (void*) android_view_RenderNode_getLayerType }, |