diff options
author | Romain Guy <romainguy@google.com> | 2011-09-01 14:27:34 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-09-01 14:27:34 -0700 |
commit | 08a1c04b9668e51ca3043a4e531b7649b018b245 (patch) | |
tree | b96560b2d2946556669c5db14e887b440ef25fed /core | |
parent | 94444fc56121d704bbb5a6f02954af62e3e57a94 (diff) | |
parent | 16260e73f6c1c9dc94acf0d328a3c564426b8711 (diff) | |
download | frameworks_base-08a1c04b9668e51ca3043a4e531b7649b018b245.zip frameworks_base-08a1c04b9668e51ca3043a4e531b7649b018b245.tar.gz frameworks_base-08a1c04b9668e51ca3043a4e531b7649b018b245.tar.bz2 |
Merge "Dispatch onDetachedFromWindow before destroying everything Bug #5245686"
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/HardwareRenderer.java | 9 | ||||
-rw-r--r-- | core/java/android/view/TextureView.java | 5 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 13 |
3 files changed, 18 insertions, 9 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 2bf16d8..1fcde3d 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -344,9 +344,9 @@ public abstract class HardwareRenderer { static final int EGL_SURFACE_TYPE = 0x3033; static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 0x0400; - private static final int SURFACE_STATE_ERROR = 0; - private static final int SURFACE_STATE_SUCCESS = 1; - private static final int SURFACE_STATE_UPDATED = 2; + static final int SURFACE_STATE_ERROR = 0; + static final int SURFACE_STATE_SUCCESS = 1; + static final int SURFACE_STATE_UPDATED = 2; static EGL10 sEgl; static EGLDisplay sEglDisplay; @@ -913,8 +913,7 @@ public abstract class HardwareRenderer { @Override void destroyLayers(View view) { - if (view != null && isEnabled()) { - checkCurrent(); + if (view != null && isEnabled() && checkCurrent() != SURFACE_STATE_ERROR) { destroyHardwareLayer(view); GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS); } diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 9d959fb..c735d6b 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -286,6 +286,11 @@ public class TextureView extends View { } @Override + boolean destroyLayer() { + return false; + } + + @Override HardwareLayer getHardwareLayer() { if (mLayer == null) { if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null) { diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 5c045bb..7db1b32 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2141,6 +2141,10 @@ public final class ViewRootImpl extends Handler implements ViewParent, void dispatchDetachedFromWindow() { if (mView != null && mView.mAttachInfo != null) { + if (mAttachInfo.mHardwareRenderer != null && + mAttachInfo.mHardwareRenderer.isEnabled()) { + mAttachInfo.mHardwareRenderer.validate(); + } mView.dispatchDetachedFromWindow(); } @@ -3568,6 +3572,11 @@ public final class ViewRootImpl extends Handler implements ViewParent, checkThread(); if (LOCAL_LOGV) Log.v(TAG, "DIE in " + this + " of " + mSurface); synchronized (this) { + if (mAdded) { + mAdded = false; + dispatchDetachedFromWindow(); + } + if (mAdded && !mFirst) { destroyHardwareRenderer(); @@ -3588,10 +3597,6 @@ public final class ViewRootImpl extends Handler implements ViewParent, mSurface.release(); } - if (mAdded) { - mAdded = false; - dispatchDetachedFromWindow(); - } } } |