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
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 7d8f046..f1c8232 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -406,21 +406,13 @@
}
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() {