Only destroy the GL Canvas when necessary.
Change-Id: I6caf4873b02dc4a6d7c8c91925d2447b3b0e0593
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 5999aba..a91d2bd 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -469,7 +469,9 @@
if (attrs != null &&
(attrs.flags & WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED) != 0) {
final boolean translucent = attrs.format != PixelFormat.OPAQUE;
- destroyHardwareRenderer();
+ if (mHwRenderer != null) {
+ mHwRenderer.destroy(true);
+ }
mHwRenderer = HardwareRenderer.createGlRenderer(2, translucent);
}
}
@@ -678,7 +680,9 @@
attachInfo.mWindowVisibility = viewVisibility;
host.dispatchWindowVisibilityChanged(viewVisibility);
if (viewVisibility != View.VISIBLE || mNewSurfaceNeeded) {
- destroyHardwareRenderer();
+ if (mHwRenderer != null) {
+ mHwRenderer.destroy(false);
+ }
}
if (viewVisibility == View.GONE) {
// After making a window gone, we will count it as being
@@ -1597,9 +1601,11 @@
mAttachInfo.mRootView = null;
mAttachInfo.mSurface = null;
- destroyHardwareRenderer();
- mHwRenderer = null;
-
+ if (mHwRenderer != null) {
+ mHwRenderer.destroy(true);
+ mHwRenderer = null;
+ }
+
mSurface.release();
if (mInputChannel != null) {
@@ -1624,12 +1630,6 @@
}
}
- private void destroyHardwareRenderer() {
- if (mHwRenderer != null) {
- mHwRenderer.destroy();
- }
- }
-
void updateConfiguration(Configuration config, boolean force) {
if (DEBUG_CONFIGURATION) Log.v(TAG,
"Applying new config to window "