From 3ca12be7963b0d018bade286bf4d14cf9938bd6a Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 22 May 2017 14:57:48 -0700 Subject: [PATCH] SurfaceView: Wait to gather transparent region. With the introduction of surfaceRedrawNeededAsync we may be asked to gather the transparent region ahead of the SurfaceView having been drawn. Bug: 38324871 Test: Launch Chrome Canary a lot! No Flickers. Change-Id: I35f09a1bb8316895fa704b10c912e64a8920bd90 --- core/java/android/view/SurfaceView.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 2c33b60b98b51..cbac8a23de97f 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -138,6 +138,8 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb case DRAW_FINISHED_MSG: { mDrawFinished = true; if (mAttachedToWindow) { + mParent.requestTransparentRegion(SurfaceView.this); + notifyDrawFinished(); invalidate(); } @@ -247,7 +249,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb getViewRootImpl().addWindowStoppedCallback(this); mWindowStopped = false; - mParent.requestTransparentRegion(this); mViewVisibility = getVisibility() == VISIBLE; updateRequestedVisibility(); @@ -352,7 +353,7 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb @Override public boolean gatherTransparentRegion(Region region) { - if (isAboveParent()) { + if (isAboveParent() || !mDrawFinished) { return super.gatherTransparentRegion(region); }