diff options
author | Jack Palevich <jackpal@google.com> | 2009-12-22 18:31:58 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-12-22 18:31:58 -0800 |
commit | 244cc72fdf906799e3ec4cfe5b7cda49d9f08cca (patch) | |
tree | 012dc29865014d6eba21e5207f694cdbfdc64659 /opengl | |
parent | 0c5cc224b052654ee38d39effce427a47697481b (diff) | |
parent | e344955393133ac2f99f06cc6a4fe97fbf76f62e (diff) | |
download | frameworks_base-244cc72fdf906799e3ec4cfe5b7cda49d9f08cca.zip frameworks_base-244cc72fdf906799e3ec4cfe5b7cda49d9f08cca.tar.gz frameworks_base-244cc72fdf906799e3ec4cfe5b7cda49d9f08cca.tar.bz2 |
am e3449553: Merge change I49c9a3a3 into eclair
Merge commit 'e344955393133ac2f99f06cc6a4fe97fbf76f62e' into eclair-plus-aosp
* commit 'e344955393133ac2f99f06cc6a4fe97fbf76f62e':
Fix bug 2325244 screen turns black for a brief period of time
Diffstat (limited to 'opengl')
-rw-r--r-- | opengl/java/android/opengl/GLSurfaceView.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java index fb3747c..016df94 100644 --- a/opengl/java/android/opengl/GLSurfaceView.java +++ b/opengl/java/android/opengl/GLSurfaceView.java @@ -999,6 +999,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback GL10 gl = null; boolean createEglSurface = false; boolean sizeChanged = false; + boolean wantRenderNotification = false; + boolean doRenderNotification = false; int w = 0; int h = 0; Runnable event = null; @@ -1044,6 +1046,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback sGLThreadManager.notifyAll(); } + if (doRenderNotification) { + wantRenderNotification = false; + doRenderNotification = false; + mRenderComplete = true; + sGLThreadManager.notifyAll(); + } + // Ready to draw? if ((!mPaused) && mHasSurface && (mWidth > 0) && (mHeight > 0) @@ -1063,6 +1072,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback sizeChanged = true; w = mWidth; h = mHeight; + wantRenderNotification = true; + if (DRAW_TWICE_AFTER_SIZE_CHANGED) { // We keep mRequestRender true so that we draw twice after the size changes. // (Once because of mSizeChanged, the second time because of mRequestRender.) @@ -1119,6 +1130,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback Log.i("GLThread", "egl surface lost tid=" + getId()); } } + + if (wantRenderNotification) { + doRenderNotification = true; + } } } finally { /* @@ -1201,7 +1216,20 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mHeight = h; mSizeChanged = true; mRequestRender = true; + mRenderComplete = false; sGLThreadManager.notifyAll(); + + // Wait for thread to react to resize and render a frame + while (! mExited && !mPaused && !mRenderComplete ) { + if (LOG_SURFACE) { + Log.i("Main thread", "onWindowResize waiting for render complete."); + } + try { + sGLThreadManager.wait(); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } } } @@ -1247,6 +1275,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback private int mHeight; private int mRenderMode; private boolean mRequestRender; + private boolean mRenderComplete; private ArrayList<Runnable> mEventQueue = new ArrayList<Runnable>(); // End of member variables protected by the sGLThreadManager monitor. |