summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/View.java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-03-23 18:58:36 -0700
committerRomain Guy <romainguy@google.com>2012-03-23 19:04:36 -0700
commita998dff5d49a423aaf7097aa8f96bf5bdc681d25 (patch)
treea76c4185a5c57c4f2e4aa423845b7e42bc59fe83 /core/java/android/view/View.java
parent5d6999e1ca457948e06792ea6259ffa947c9fa81 (diff)
downloadframeworks_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.java11
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);
}
/**