summaryrefslogtreecommitdiffstats
path: root/opengl
diff options
context:
space:
mode:
authorJack Palevich <jackpal@google.com>2009-12-22 18:31:58 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-12-22 18:31:58 -0800
commit244cc72fdf906799e3ec4cfe5b7cda49d9f08cca (patch)
tree012dc29865014d6eba21e5207f694cdbfdc64659 /opengl
parent0c5cc224b052654ee38d39effce427a47697481b (diff)
parente344955393133ac2f99f06cc6a4fe97fbf76f62e (diff)
downloadframeworks_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.java29
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.