diff options
| author | 2017-05-30 21:53:08 +0000 | |
|---|---|---|
| committer | 2017-05-30 21:53:08 +0000 | |
| commit | edc37a6e2110cd6b8df93d87c4a3d4680e8cf9f8 (patch) | |
| tree | 3af3d153afe99151155d00fc002636605351345f | |
| parent | 931ed4dab91cab9af3c9f476c784e37c5029ea8b (diff) | |
| parent | 8a967672d5cd88d2165a4ac480a39e143eda97c5 (diff) | |
Merge changes I5762a98d,I39f4e015 into oc-dev am: c56b1d3c98
am: 8a967672d5
Change-Id: I2566c88ca0a55e180fc795414e9ea92ae7322d5e
| -rw-r--r-- | core/java/android/view/SurfaceView.java | 23 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 22 |
2 files changed, 30 insertions, 15 deletions
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 435675ba01e5..b57ac66e10cc 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -264,6 +264,22 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb updateSurface(); } + private void performDrawFinished() { + if (mPendingReportDraws > 0) { + mDrawFinished = true; + if (mAttachedToWindow) { + mParent.requestTransparentRegion(SurfaceView.this); + + notifyDrawFinished(); + invalidate(); + } + } else { + Log.e(TAG, System.identityHashCode(this) + "finished drawing" + + " but no pending report draw (extra call" + + " to draw completion runnable?)"); + } + } + void notifyDrawFinished() { ViewRootImpl viewRoot = getViewRootImpl(); if (viewRoot != null) { @@ -729,12 +745,7 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb } runOnUiThread(() -> { - mDrawFinished = true; - if (mAttachedToWindow) { - mParent.requestTransparentRegion(SurfaceView.this); - notifyDrawFinished(); - invalidate(); - } + performDrawFinished(); }); } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index ded25ab91b92..6450b57bb93e 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2330,7 +2330,7 @@ public final class ViewRootImpl implements ViewParent, // Remember if we must report the next draw. if ((relayoutResult & WindowManagerGlobal.RELAYOUT_RES_FIRST_TIME) != 0) { - mReportNextDraw = true; + reportNextDraw(); } boolean cancelDraw = mAttachInfo.mTreeObserver.dispatchOnPreDraw() || !isViewVisible; @@ -2731,11 +2731,8 @@ public final class ViewRootImpl implements ViewParent, /** * A count of the number of calls to pendingDrawFinished we * require to notify the WM drawing is complete. - * - * This starts at 1, for the ViewRootImpl surface itself. - * Subsurfaces may debt the value with drawPending. */ - int mDrawsNeededToReport = 1; + int mDrawsNeededToReport = 0; /** * Delay notifying WM of draw finished until @@ -2761,7 +2758,7 @@ public final class ViewRootImpl implements ViewParent, private void reportDrawFinished() { try { - mDrawsNeededToReport = 1; + mDrawsNeededToReport = 0; mWindowSession.finishDrawing(mWindow); } catch (RemoteException e) { // Have fun! @@ -3772,13 +3769,12 @@ public final class ViewRootImpl implements ViewParent, args.recycle(); if (msg.what == MSG_RESIZED_REPORT) { - mReportNextDraw = true; + reportNextDraw(); } if (mView != null && framesChanged) { forceLayout(mView); } - requestLayout(); } break; @@ -7351,6 +7347,14 @@ public final class ViewRootImpl implements ViewParent, return false; } + + private void reportNextDraw() { + if (mReportNextDraw == false) { + drawPending(); + } + mReportNextDraw = true; + } + /** * Force the window to report its next draw. * <p> @@ -7360,7 +7364,7 @@ public final class ViewRootImpl implements ViewParent, * @hide */ public void setReportNextDraw() { - mReportNextDraw = true; + reportNextDraw(); invalidate(); } |