summaryrefslogtreecommitdiffstats
path: root/opengl/java
diff options
context:
space:
mode:
authorJack Palevich <jackpal@google.com>2010-03-24 13:46:15 -0700
committerJack Palevich <jackpal@google.com>2010-03-24 13:48:27 -0700
commitb1768998f14e03bd69cf049783d6cbeccf6d5839 (patch)
tree6a627c625a32bd2ef73abe417ee1ef8d35fe8971 /opengl/java
parent07353a1e8598b1e2993b8b6763f630379ae6e8bb (diff)
downloadframeworks_base-b1768998f14e03bd69cf049783d6cbeccf6d5839.zip
frameworks_base-b1768998f14e03bd69cf049783d6cbeccf6d5839.tar.gz
frameworks_base-b1768998f14e03bd69cf049783d6cbeccf6d5839.tar.bz2
Improve our EGL management when pausing / resuming.
We now release the EGL context when pausing. This is required to reduce the chance of running out of contexts on devices which support a limited number of active EGL contexts. Someday we may implement a global EGL context manager that will allow us to let EGL contexts persist until another activity needs an EGL context. But for now, without such a manager, we take the conservative approach. Separately, we now terminate EGL when pausing on Sapphire. This is a requirement of the Sapphire OpenGL driver.
Diffstat (limited to 'opengl/java')
-rw-r--r--opengl/java/android/opengl/GLSurfaceView.java13
1 files changed, 13 insertions, 0 deletions
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 2c43e59..e07b3f9 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -1179,6 +1179,12 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
Log.i("GLThread", "releasing EGL context because paused tid=" + getId());
}
}
+ if (sGLThreadManager.shouldTerminateEGLWhenPausing()) {
+ mEglHelper.finish();
+ if (LOG_SURFACE) {
+ Log.i("GLThread", "terminating EGL because paused tid=" + getId());
+ }
+ }
}
// Have we lost the surface view surface?
@@ -1549,6 +1555,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
public synchronized boolean shouldReleaseEGLContextWhenPausing() {
+ // Release the EGL context when pausing even if
+ // the hardware supports multiple EGL contexts.
+ // Otherwise the device could run out of EGL contexts.
+ return true;
+ }
+
+ public synchronized boolean shouldTerminateEGLWhenPausing() {
checkGLESVersion();
return !mMultipleGLESContextsAllowed;
}