diff options
-rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 11 | ||||
-rw-r--r-- | core/java/android/view/View.java | 12 | ||||
-rw-r--r-- | core/java/android/view/ViewGroup.java | 10 | ||||
-rw-r--r-- | core/jni/android_view_RenderNode.cpp | 1 |
4 files changed, 13 insertions, 21 deletions
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index b0826a8e3f70..f3ebcb4b326b 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -360,7 +360,6 @@ public final class ThreadedRenderer { void destroy() { mInitialized = false; updateEnabledState(null); - mRootNode.discardDisplayList(); nDestroy(mNativeProxy, mRootNode.mNativeRenderNode); } @@ -492,12 +491,20 @@ public final class ThreadedRenderer { */ void destroyHardwareResources(View view) { destroyResources(view); - mRootNode.discardDisplayList(); nDestroyHardwareResources(mNativeProxy); } private static void destroyResources(View view) { view.destroyHardwareResources(); + + if (view instanceof ViewGroup) { + ViewGroup group = (ViewGroup) view; + + int count = group.getChildCount(); + for (int i = 0; i < count; i++) { + destroyResources(group.getChildAt(i)); + } + } } /** diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 66fd28f81b2f..e7f96de881c8 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -16530,12 +16530,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // safe to free its copy of the display list as it knows that we will // push an updated DisplayList if we try to draw again resetDisplayList(); - if (mOverlay != null) { - mOverlay.getOverlayView().destroyHardwareResources(); - } - if (mGhostView != null) { - mGhostView.destroyHardwareResources(); - } } /** @@ -16706,9 +16700,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private void resetDisplayList() { - mRenderNode.discardDisplayList(); + if (mRenderNode.isValid()) { + mRenderNode.discardDisplayList(); + } - if (mBackgroundRenderNode != null) { + if (mBackgroundRenderNode != null && mBackgroundRenderNode.isValid()) { mBackgroundRenderNode.discardDisplayList(); } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 480741eb988a..ba73c5f1be60 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -3433,16 +3433,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager super.dispatchDetachedFromWindow(); } - /** @hide */ - @Override - protected void destroyHardwareResources() { - super.destroyHardwareResources(); - int count = getChildCount(); - for (int i = 0; i < count; i++) { - getChildAt(i).destroyHardwareResources(); - } - } - /** * @hide */ diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp index 3eccc42df1f5..d75d5c179d3c 100644 --- a/core/jni/android_view_RenderNode.cpp +++ b/core/jni/android_view_RenderNode.cpp @@ -88,7 +88,6 @@ void onRenderNodeRemoved(JNIEnv* env, RenderNode* node) { return; } - node->setStagingDisplayList(nullptr, nullptr); // Update the valid field, since native has already removed // the staging DisplayList env->SetBooleanField(jnode, gRenderNode_validFieldID, false); |