diff options
author | Chet Haase <chet@google.com> | 2011-11-28 11:53:21 -0800 |
---|---|---|
committer | Chet Haase <chet@google.com> | 2011-11-28 15:19:22 -0800 |
commit | 08837c246c9c27902c59b41c8661c2f27a4aa2bc (patch) | |
tree | ef44ddbbbe0ffe253fff53baa2701d8c747db570 /core/java/android/view/ViewRootImpl.java | |
parent | 425c595acb798ed9652b5a1f0e5412cbd8e3873d (diff) | |
download | frameworks_base-08837c246c9c27902c59b41c8661c2f27a4aa2bc.zip frameworks_base-08837c246c9c27902c59b41c8661c2f27a4aa2bc.tar.gz frameworks_base-08837c246c9c27902c59b41c8661c2f27a4aa2bc.tar.bz2 |
Fix flashing wifi dialog after rotating back from landscape.
There was an error in some of the OpenGL layer logic such that we would
occasionally set up a layer for rendering and then not clean up when it was
done. This caused future OpenGL rendering to go into that layer instead of
to the buffers being displayed on the screen, resulting in artifacts including
flashes and displaying of stale content. This happened specifically when
using the wifi settings dialog with the InputMethod keyboard displayed,
but it was probably visible in other situations as well.
Issue #5628248: Flickering/flashing after entering password for WiFi
Change-Id: I38139f620b310f4309570fa7224552d2ee633999
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 5f70a39..76f78fb 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1216,7 +1216,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( @@ -1225,12 +1226,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 @@ -1242,27 +1243,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; |