am 38928899: am 8990cb57: Merge "Fix flashing wifi dialog after rotating back from landscape." into ics-mr1

* commit '3892889952b0ad3fa0b095c96d8ae2ae110585e2':
  Fix flashing wifi dialog after rotating back from landscape.
This commit is contained in:
Chet Haase
2011-11-28 15:47:16 -08:00
committed by Android Git Automerger
3 changed files with 30 additions and 15 deletions

View File

@@ -218,6 +218,13 @@ public abstract class HardwareRenderer {
*/
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
* resources.
@@ -783,6 +790,11 @@ public abstract class HardwareRenderer {
return mHeight;
}
@Override
HardwareCanvas getCanvas() {
return mCanvas;
}
boolean canDraw() {
return mGl != null && mCanvas != null;
}

View File

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

View File

@@ -201,14 +201,16 @@ void OpenGLRenderer::interrupt() {
}
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);
dirtyClip();
glDisable(GL_DITHER);
glBindFramebuffer(GL_FRAMEBUFFER, mSnapshot->fbo);
glBindFramebuffer(GL_FRAMEBUFFER, snapshot->fbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
mCaches.blend = true;