Merge "Fix flashing wifi dialog after rotating back from landscape." into ics-mr1

This commit is contained in:
Chet Haase
2011-11-28 15:43:23 -08:00
committed by Android (Google) Code Review
3 changed files with 30 additions and 15 deletions

View File

@@ -218,6 +218,13 @@ public abstract class HardwareRenderer {
*/ */
abstract int getHeight(); abstract int getHeight();
/**
* Gets the current canvas associated with this HardwareRenderer.
*
* @return the current HardwareCanvas
*/
abstract HardwareCanvas getCanvas();
/** /**
* Sets the directory to use as a persistent storage for hardware rendering * Sets the directory to use as a persistent storage for hardware rendering
* resources. * resources.
@@ -783,6 +790,11 @@ public abstract class HardwareRenderer {
return mHeight; return mHeight;
} }
@Override
HardwareCanvas getCanvas() {
return mCanvas;
}
boolean canDraw() { boolean canDraw() {
return mGl != null && mCanvas != null; return mGl != null && mCanvas != null;
} }

View File

@@ -1216,7 +1216,8 @@ public final class ViewRootImpl extends Handler implements ViewParent,
disposeResizeBuffer(); disposeResizeBuffer();
boolean completed = false; boolean completed = false;
HardwareCanvas canvas = null; HardwareCanvas hwRendererCanvas = mAttachInfo.mHardwareRenderer.getCanvas();
HardwareCanvas layerCanvas = null;
try { try {
if (mResizeBuffer == null) { if (mResizeBuffer == null) {
mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer( mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
@@ -1225,12 +1226,12 @@ public final class ViewRootImpl extends Handler implements ViewParent,
mResizeBuffer.getHeight() != mHeight) { mResizeBuffer.getHeight() != mHeight) {
mResizeBuffer.resize(mWidth, mHeight); mResizeBuffer.resize(mWidth, mHeight);
} }
canvas = mResizeBuffer.start(mAttachInfo.mHardwareCanvas); layerCanvas = mResizeBuffer.start(hwRendererCanvas);
canvas.setViewport(mWidth, mHeight); layerCanvas.setViewport(mWidth, mHeight);
canvas.onPreDraw(null); layerCanvas.onPreDraw(null);
final int restoreCount = canvas.save(); final int restoreCount = layerCanvas.save();
canvas.drawColor(0xff000000, PorterDuff.Mode.SRC); layerCanvas.drawColor(0xff000000, PorterDuff.Mode.SRC);
int yoff; int yoff;
final boolean scrolling = mScroller != null final boolean scrolling = mScroller != null
@@ -1242,27 +1243,27 @@ public final class ViewRootImpl extends Handler implements ViewParent,
yoff = mScrollY; yoff = mScrollY;
} }
canvas.translate(0, -yoff); layerCanvas.translate(0, -yoff);
if (mTranslator != null) { if (mTranslator != null) {
mTranslator.translateCanvas(canvas); mTranslator.translateCanvas(layerCanvas);
} }
mView.draw(canvas); mView.draw(layerCanvas);
mResizeBufferStartTime = SystemClock.uptimeMillis(); mResizeBufferStartTime = SystemClock.uptimeMillis();
mResizeBufferDuration = mView.getResources().getInteger( mResizeBufferDuration = mView.getResources().getInteger(
com.android.internal.R.integer.config_mediumAnimTime); com.android.internal.R.integer.config_mediumAnimTime);
completed = true; completed = true;
canvas.restoreToCount(restoreCount); layerCanvas.restoreToCount(restoreCount);
} catch (OutOfMemoryError e) { } catch (OutOfMemoryError e) {
Log.w(TAG, "Not enough memory for content change anim buffer", e); Log.w(TAG, "Not enough memory for content change anim buffer", e);
} finally { } finally {
if (canvas != null) { if (layerCanvas != null) {
canvas.onPostDraw(); layerCanvas.onPostDraw();
} }
if (mResizeBuffer != null) { if (mResizeBuffer != null) {
mResizeBuffer.end(mAttachInfo.mHardwareCanvas); mResizeBuffer.end(hwRendererCanvas);
if (!completed) { if (!completed) {
mResizeBuffer.destroy(); mResizeBuffer.destroy();
mResizeBuffer = null; mResizeBuffer = null;

View File

@@ -201,14 +201,16 @@ void OpenGLRenderer::interrupt() {
} }
void OpenGLRenderer::resume() { void OpenGLRenderer::resume() {
glViewport(0, 0, mSnapshot->viewport.getWidth(), mSnapshot->viewport.getHeight()); sp<Snapshot> snapshot = (mSnapshot != NULL) ? mSnapshot : mFirstSnapshot;
glViewport(0, 0, snapshot->viewport.getWidth(), snapshot->viewport.getHeight());
glEnable(GL_SCISSOR_TEST); glEnable(GL_SCISSOR_TEST);
dirtyClip(); dirtyClip();
glDisable(GL_DITHER); glDisable(GL_DITHER);
glBindFramebuffer(GL_FRAMEBUFFER, mSnapshot->fbo); glBindFramebuffer(GL_FRAMEBUFFER, snapshot->fbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
mCaches.blend = true; mCaches.blend = true;