OSDN Git Service

Notify monitor waiters when changing mSurfaceIsBad value.
authorJack Palevich <jackpal@google.com>
Tue, 10 Apr 2012 12:56:19 +0000 (05:56 -0700)
committerJack Palevich <jackpal@google.com>
Tue, 10 Apr 2012 13:05:42 +0000 (06:05 -0700)
Otherwise the waiters might not wake up, leading to ANRs.

Bug: 6307843
Change-Id: I0646b4e8368f80dbff46342f75709992796973fd

opengl/java/android/opengl/GLSurfaceView.java

index c937a09..2a4d59b 100644 (file)
@@ -1459,7 +1459,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
                             Log.w("GLThread", "egl createSurface");
                         }
                         if (!mEglHelper.createSurface()) {
-                            mSurfaceIsBad = true;
+                            synchronized(sGLThreadManager) {
+                                mSurfaceIsBad = true;
+                                sGLThreadManager.notifyAll();
+                            }
                             continue;
                         }
                         createEglSurface = false;
@@ -1519,7 +1522,11 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
                             // but we haven't been notified yet.
                             // Log the error to help developers understand why rendering stopped.
                             EglHelper.logEglErrorAsWarning("GLThread", "eglSwapBuffers", swapError);
-                            mSurfaceIsBad = true;
+
+                            synchronized(sGLThreadManager) {
+                                mSurfaceIsBad = true;
+                                sGLThreadManager.notifyAll();
+                            }
                             break;
                     }