Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1c28c1b authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Fix destroyHardwareResources"

parents 853b070f ec0c9254
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -127,6 +127,8 @@ public class ThreadedRenderer extends HardwareRenderer {
    @Override
    void destroyHardwareResources(View view) {
        destroyResources(view);
        // mRootNode belongs to us and not a view, so we need to destroy it
        mRootNode.destroyDisplayListData();
        nDestroyHardwareResources(mNativeProxy);
    }

+1 −3
Original line number Diff line number Diff line
@@ -13625,9 +13625,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @hide
     */
    protected void destroyHardwareResources() {
        // Intentionally empty. RenderNode's lifecycle is now fully managed
        // by the hardware renderer.
        // However some subclasses (eg, WebView, TextureView) still need this signal
        resetDisplayList();
    }
    /**
+7 −2
Original line number Diff line number Diff line
@@ -211,7 +211,8 @@ void RenderNode::prepareTreeImpl(TreeInfo& info) {
        // This will also release the hardware layer if we have one as
        // isRenderable() will return false, thus causing pushLayerUpdate
        // to recycle the hardware layer
        setStagingDisplayList(NULL);
        LOG_ALWAYS_FATAL_IF(mStagingDisplayListData || (mDisplayListData && !mNeedsDisplayListDataSync),
                "View.destroyHardwareResources wasn't called!");
        break;
    }

@@ -260,7 +261,11 @@ void RenderNode::pushStagingDisplayListChanges(TreeInfo& info) {
        mNeedsDisplayListDataSync = false;
        // Do a push pass on the old tree to handle freeing DisplayListData
        // that are no longer used
        TreeInfo oldTreeInfo(TreeInfo::MODE_MAYBE_DETACHING, info);
        TreeInfo::TraversalMode mode = TreeInfo::MODE_MAYBE_DETACHING;
        if (CC_UNLIKELY(info.mode == TreeInfo::MODE_DESTROY_RESOURCES)) {
            mode = TreeInfo::MODE_DESTROY_RESOURCES;
        }
        TreeInfo oldTreeInfo(mode, info);
        prepareSubTree(oldTreeInfo, mDisplayListData);
        delete mDisplayListData;
        mDisplayListData = mStagingDisplayListData;