Loading core/java/android/view/ThreadedRenderer.java +2 −9 Original line number Diff line number Diff line Loading @@ -360,6 +360,7 @@ public final class ThreadedRenderer { void destroy() { mInitialized = false; updateEnabledState(null); mRootNode.discardDisplayList(); nDestroy(mNativeProxy, mRootNode.mNativeRenderNode); } Loading Loading @@ -491,20 +492,12 @@ 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)); } } } /** Loading core/java/android/view/View.java +8 −4 Original line number Diff line number Diff line Loading @@ -16641,6 +16641,12 @@ 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(); } } /** Loading Loading @@ -16811,11 +16817,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private void resetDisplayList() { if (mRenderNode.isValid()) { mRenderNode.discardDisplayList(); } if (mBackgroundRenderNode != null && mBackgroundRenderNode.isValid()) { if (mBackgroundRenderNode != null) { mBackgroundRenderNode.discardDisplayList(); } } core/java/android/view/ViewGroup.java +10 −0 Original line number Diff line number Diff line Loading @@ -3450,6 +3450,16 @@ 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 */ Loading core/jni/android_view_RenderNode.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ 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); Loading Loading
core/java/android/view/ThreadedRenderer.java +2 −9 Original line number Diff line number Diff line Loading @@ -360,6 +360,7 @@ public final class ThreadedRenderer { void destroy() { mInitialized = false; updateEnabledState(null); mRootNode.discardDisplayList(); nDestroy(mNativeProxy, mRootNode.mNativeRenderNode); } Loading Loading @@ -491,20 +492,12 @@ 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)); } } } /** Loading
core/java/android/view/View.java +8 −4 Original line number Diff line number Diff line Loading @@ -16641,6 +16641,12 @@ 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(); } } /** Loading Loading @@ -16811,11 +16817,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private void resetDisplayList() { if (mRenderNode.isValid()) { mRenderNode.discardDisplayList(); } if (mBackgroundRenderNode != null && mBackgroundRenderNode.isValid()) { if (mBackgroundRenderNode != null) { mBackgroundRenderNode.discardDisplayList(); } }
core/java/android/view/ViewGroup.java +10 −0 Original line number Diff line number Diff line Loading @@ -3450,6 +3450,16 @@ 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 */ Loading
core/jni/android_view_RenderNode.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ 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); Loading