From 3afd63778e401651a7a6fd721d6d795690916ab8 Mon Sep 17 00:00:00 2001 From: John Reck Date: Mon, 30 Jan 2017 10:15:48 -0800 Subject: Switch how destroyHardwareResources works destroyHardwareResources will now only force-destroy the specific node it was called on, which are only ever the root nodes. Rely on onRemovedFromTree() to clean up resources for all other nodes. Bug: 34736819 Test: RenderNode.multiTreeValidity passes, manually verified fixes b/34736819 Change-Id: I1c275ad6a98b63bf50f265602f09bffe3e1f169b --- libs/hwui/RenderNode.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) (limited to 'libs/hwui/RenderNode.cpp') diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 7d8f0462920a..f1c8232760e1 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -406,21 +406,13 @@ void RenderNode::deleteDisplayList(TreeObserver& observer, TreeInfo* info) { } void RenderNode::destroyHardwareResources(TreeInfo* info) { - ImmediateRemoved observer(info); - destroyHardwareResourcesImpl(observer, info); -} - -void RenderNode::destroyHardwareResourcesImpl(TreeObserver& observer, TreeInfo* info) { if (hasLayer()) { renderthread::CanvasContext::destroyLayer(this); } - if (mDisplayList) { - mDisplayList->updateChildren([&observer, info](RenderNode* child) { - child->destroyHardwareResourcesImpl(observer, info); - }); - setStagingDisplayList(nullptr); - deleteDisplayList(observer, info); - } + setStagingDisplayList(nullptr); + + ImmediateRemoved observer(info); + deleteDisplayList(observer, info); } void RenderNode::destroyLayers() { -- cgit v1.2.3-59-g8ed1b