Permalink
Browse files

Improve GLSurfaceView Pausing.

When pausing we want to do three separate things, in order:

 + release the EGL surface
 + optionally release the EGL context
 + optionally terminate Egl

Previously we would only do these things if we had an EGL surface. But
it is possible that we don't have an EGL Surface, but still have an EGL
context. And in that situation we still want to release the EGL context.

Now we check the preconditions for the three cases separately.

Bug: 6338235
Change-Id: I804683b3d5c136cc98ea3f5051067eea18152ddf
  • Loading branch information...
1 parent 6e0ac89 commit cee059dc764a57860da6b1574952089680b5ddc6 @jackpal jackpal committed Apr 16, 2012
Showing with 12 additions and 2 deletions.
  1. +12 −2 opengl/java/android/opengl/GLSurfaceView.java
View
14 opengl/java/android/opengl/GLSurfaceView.java
@@ -1298,7 +1298,9 @@ private void guardedRun() throws InterruptedException {
}
// Update the pause state.
+ boolean pausing = false;
if (mPaused != mRequestPaused) {
+ pausing = mRequestPaused;
mPaused = mRequestPaused;
sGLThreadManager.notifyAll();
if (LOG_PAUSE_RESUME) {
@@ -1324,12 +1326,16 @@ private void guardedRun() throws InterruptedException {
lostEglContext = false;
}
- // Do we need to release the EGL surface?
- if (mHaveEglSurface && mPaused) {
+ // When pausing, release the EGL surface:
+ if (pausing && mHaveEglSurface) {
if (LOG_SURFACE) {
Log.i("GLThread", "releasing EGL surface because paused tid=" + getId());
}
stopEglSurfaceLocked();
+ }
+
+ // When pausing, optionally release the EGL Context:
+ if (pausing && mHaveEglContext) {
GLSurfaceView view = mGLSurfaceViewWeakRef.get();
boolean preserveEglContextOnPause = view == null ?
false : view.mPreserveEGLContextOnPause;
@@ -1339,6 +1345,10 @@ private void guardedRun() throws InterruptedException {
Log.i("GLThread", "releasing EGL context because paused tid=" + getId());
}
}
+ }
+
+ // When pausing, optionally terminate EGL:
+ if (pausing) {
if (sGLThreadManager.shouldTerminateEGLWhenPausing()) {
mEglHelper.finish();
if (LOG_SURFACE) {

0 comments on commit cee059d

Please sign in to comment.