diff options
author | Jack Palevich <jackpal@google.com> | 2010-04-19 19:15:12 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-04-19 19:15:12 -0700 |
commit | 15d484a7ef1e8f418281af3f6a393ff97729a1f5 (patch) | |
tree | d72db49a46bc5387cdcd224093aff340ae0d690f | |
parent | 72c0a3cf28440978ee9b73dcedba902b9c2ffc37 (diff) | |
parent | 0679876997a5523a7539b8fe2c74a39434b17820 (diff) | |
download | frameworks_base-15d484a7ef1e8f418281af3f6a393ff97729a1f5.zip frameworks_base-15d484a7ef1e8f418281af3f6a393ff97729a1f5.tar.gz frameworks_base-15d484a7ef1e8f418281af3f6a393ff97729a1f5.tar.bz2 |
am 06798769: am 7305f416: Merge "Quietly handle EGL_BAD_NATIVE_WINDOW errors" into froyo
Merge commit '0679876997a5523a7539b8fe2c74a39434b17820' into kraken
* commit '0679876997a5523a7539b8fe2c74a39434b17820':
Quietly handle EGL_BAD_NATIVE_WINDOW errors
-rw-r--r-- | opengl/java/android/opengl/GLSurfaceView.java | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java index 5ad0361..f904cdf 100644 --- a/opengl/java/android/opengl/GLSurfaceView.java +++ b/opengl/java/android/opengl/GLSurfaceView.java @@ -973,9 +973,12 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mEglDisplay, mEglConfig, holder); if (mEglSurface == null || mEglSurface == EGL10.EGL_NO_SURFACE) { - Log.w("EglHelper", "createWindowSurface failed. mEglDisplay: " + mEglDisplay + - " mEglConfig: " + mEglConfig + " holder: " + holder); - throwEglException("createWindowSurface"); + int error = mEgl.eglGetError(); + if (error == EGL10.EGL_BAD_NATIVE_WINDOW) { + Log.e("EglHelper", "createWindowSurface returned EGL_BAD_NATIVE_WINDOW."); + return null; + } + throwEglException("createWindowSurface", error); } /* @@ -1019,9 +1022,16 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback * get a new surface. */ int error = mEgl.eglGetError(); - if (error == EGL11.EGL_CONTEXT_LOST) { + switch(error) { + case EGL11.EGL_CONTEXT_LOST: return false; - } else { + case EGL10.EGL_BAD_NATIVE_WINDOW: + // The native window is bad, probably because the + // window manager has closed it. Ignore this error, + // on the expectation that the application will be closed soon. + Log.e("EglHelper", "eglSwapBuffers returned EGL_BAD_NATIVE_WINDOW. tid=" + Thread.currentThread().getId()); + break; + default: throwEglException("eglSwapBuffers", error); } } @@ -1292,6 +1302,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback Log.w("GLThread", "egl createSurface"); } gl = (GL10) mEglHelper.createSurface(getHolder()); + if (gl == null) { + // Couldn't create a surface. Quit quietly. + break; + } sGLThreadManager.checkGLDriver(gl); createEglSurface = false; } |