Merge "Fix destroyHardwareResources"

This commit is contained in:
John Reck
2014-07-07 23:51:39 +00:00
committed by Android (Google) Code Review
3 changed files with 10 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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();
}
/**

View File

@@ -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;