Merge "Fix destroyHardwareResources"
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user