summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/ThreadedRenderer.java11
-rw-r--r--core/java/android/view/View.java12
-rw-r--r--core/java/android/view/ViewGroup.java10
-rw-r--r--core/jni/android_view_RenderNode.cpp1
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);