From f9a901e1018408ddf9e21105695b2bd5814db1fb Mon Sep 17 00:00:00 2001 From: John Reck Date: Fri, 28 Feb 2014 13:02:15 -0800 Subject: Avoid running functors after detach Bug: 10861732 Change-Id: Ida55fff716c37c6ab1c98eef02582282de0034f6 --- core/java/android/view/ViewRootImpl.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'core/java/android/view/ViewRootImpl.java') diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 2b32d70..a338e6e 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -267,6 +267,10 @@ public final class ViewRootImpl implements ViewParent, HardwareLayer mResizeBuffer; long mResizeBufferStartTime; int mResizeBufferDuration; + // Used to block the creation of the ResizeBuffer due to invalidations in + // the previous DisplayList tree that must prevent re-execution. + // Currently this means a functor was detached. + boolean mBlockResizeBuffer; static final Interpolator mResizeInterpolator = new AccelerateDecelerateInterpolator(); private ArrayList mPendingTransitions; @@ -667,6 +671,7 @@ public final class ViewRootImpl implements ViewParent, } public void detachFunctor(int functor) { + mBlockResizeBuffer = true; if (mAttachInfo.mHardwareRenderer != null) { mAttachInfo.mHardwareRenderer.detachFunctor(functor); } @@ -1454,7 +1459,8 @@ public final class ViewRootImpl implements ViewParent, !mAttachInfo.mTurnOffWindowResizeAnim && mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled() && - lp != null && !PixelFormat.formatHasAlpha(lp.format)) { + lp != null && !PixelFormat.formatHasAlpha(lp.format) + && !mBlockResizeBuffer) { disposeResizeBuffer(); @@ -2377,6 +2383,7 @@ public final class ViewRootImpl implements ViewParent, mCurrentDirty.set(dirty); dirty.setEmpty(); + mBlockResizeBuffer = false; attachInfo.mHardwareRenderer.draw(mView, attachInfo, this, animating ? null : mCurrentDirty); } else { -- cgit v1.1