diff options
author | John Reck <jreck@google.com> | 2017-01-30 10:15:48 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2017-01-30 13:29:26 -0800 |
commit | 3afd63778e401651a7a6fd721d6d795690916ab8 (patch) | |
tree | d9b6cf4a86e9f8473f29cab0c60b396194075933 /libs/hwui/RenderNode.cpp | |
parent | fda076a12ed641d5ab53933c4aac9e8063c580d0 (diff) |
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
Diffstat (limited to 'libs/hwui/RenderNode.cpp')
-rw-r--r-- | libs/hwui/RenderNode.cpp | 16 |
1 files changed, 4 insertions, 12 deletions
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() { |