diff options
| author | Romain Guy <romainguy@google.com> | 2012-03-23 18:58:36 -0700 |
|---|---|---|
| committer | Romain Guy <romainguy@google.com> | 2012-03-23 19:04:36 -0700 |
| commit | a998dff5d49a423aaf7097aa8f96bf5bdc681d25 (patch) | |
| tree | a76c4185a5c57c4f2e4aa423845b7e42bc59fe83 /core/java/android/view/View.java | |
| parent | 5d6999e1ca457948e06792ea6259ffa947c9fa81 (diff) | |
| download | frameworks_base-a998dff5d49a423aaf7097aa8f96bf5bdc681d25.zip frameworks_base-a998dff5d49a423aaf7097aa8f96bf5bdc681d25.tar.gz frameworks_base-a998dff5d49a423aaf7097aa8f96bf5bdc681d25.tar.bz2 | |
Destroy the hardware renderer when ViewRootImpl's die is post-poned
Bug #6109035
ViewRootImpl.die() can be invoked in such a way that doDie() will be
executed later. On memory limited device, an eglTerminate() may happen
before doDie() is executed which leads to unstable behaviors. This
change makes sure the renderer is destroyed as soon as possible.
Change-Id: I3322410cdd744b464951e2055aeade6069d1d673
Diffstat (limited to 'core/java/android/view/View.java')
| -rw-r--r-- | core/java/android/view/View.java | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index ffffc73..63cf4ae 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -10018,7 +10018,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal destroyDrawingCache(); - destroyLayer(); + destroyLayer(false); if (mAttachInfo != null) { if (mDisplayList != null) { @@ -10394,7 +10394,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal // Destroy any previous software drawing cache if needed switch (mLayerType) { case LAYER_TYPE_HARDWARE: - destroyLayer(); + destroyLayer(false); // fall through - non-accelerated views may use software layer mechanism instead case LAYER_TYPE_SOFTWARE: destroyDrawingCache(); @@ -10532,11 +10532,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal * @see #setLayerType(int, android.graphics.Paint) * @see #LAYER_TYPE_HARDWARE */ - boolean destroyLayer() { + boolean destroyLayer(boolean valid) { if (mHardwareLayer != null) { AttachInfo info = mAttachInfo; if (info != null && info.mHardwareRenderer != null && - info.mHardwareRenderer.isEnabled() && info.mHardwareRenderer.validate()) { + info.mHardwareRenderer.isEnabled() && + (valid || info.mHardwareRenderer.validate())) { mHardwareLayer.destroy(); mHardwareLayer = null; @@ -10560,7 +10561,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal * @hide */ protected void destroyHardwareResources() { - destroyLayer(); + destroyLayer(true); } /** |
