diff options
author | Jack Palevich <jackpal@google.com> | 2010-03-24 13:46:15 -0700 |
---|---|---|
committer | Jack Palevich <jackpal@google.com> | 2010-03-24 13:48:27 -0700 |
commit | b1768998f14e03bd69cf049783d6cbeccf6d5839 (patch) | |
tree | 6a627c625a32bd2ef73abe417ee1ef8d35fe8971 /opengl/java/android | |
parent | 07353a1e8598b1e2993b8b6763f630379ae6e8bb (diff) | |
download | frameworks_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/android')
-rw-r--r-- | opengl/java/android/opengl/GLSurfaceView.java | 13 |
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; } |