diff options
| author | 2021-04-13 23:06:07 +0000 | |
|---|---|---|
| committer | 2021-04-13 23:06:07 +0000 | |
| commit | c9fb54069cd132b8c1fa7da1ac7b1116c088bf1a (patch) | |
| tree | a8927fadafcd7e2118eefd797e257a80c37aadae | |
| parent | f049770c99d2eff9efa1939890f2ffbe37e7a0dc (diff) | |
| parent | ab82b008f1f5660de9bedf0e9e319cb55151baf1 (diff) | |
Merge "Honor the BlastSync request from WM until a frame is drawn" into sc-dev
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 8348a5c65fea..8c9c6bd8feeb 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -723,6 +723,13 @@ public final class ViewRootImpl implements ViewParent, private boolean mNextDrawUseBlastSync = false; /** + * Wait for the blast sync transaction complete callback before drawing and queuing up more + * frames. This will prevent out of order buffers submissions when WM has requested to + * synchronize with the client. + */ + private boolean mWaitForBlastSyncComplete = false; + + /** * Keeps track of whether a traverse was triggered while the UI thread was paused. This can * occur when the client is waiting on another process to submit the transaction that * contains the buffer. The UI thread needs to wait on the callback before it can submit @@ -2463,7 +2470,7 @@ public final class ViewRootImpl implements ViewParent, // // When the callback is invoked, it will trigger a traversal request if // mRequestedTraverseWhilePaused is set so there's no need to attempt a retry here. - if (mNextDrawUseBlastSync) { + if (mWaitForBlastSyncComplete) { if (DEBUG_BLAST) { Log.w(mTag, "Can't perform draw while waiting for a transaction complete"); } @@ -3244,10 +3251,6 @@ public final class ViewRootImpl implements ViewParent, pendingDrawFinished(); } } - - // We were unable to draw this traversal. Unset this flag since we'll block without - // ever being able to draw again - mNextDrawUseBlastSync = false; } if (mAttachInfo.mContentCaptureEvents != null) { @@ -3990,7 +3993,7 @@ public final class ViewRootImpl implements ViewParent, + " reportNextDraw=" + reportNextDraw + " hasBlurUpdates=" + hasBlurUpdates); } - + mWaitForBlastSyncComplete = nextDrawUseBlastSync; final BackgroundBlurDrawable.BlurRegion[] blurRegionsForFrame = needsCallbackForBlur ? mBlurRegionAggregator.getBlurRegionsCopyForRT() : null; @@ -4025,6 +4028,7 @@ public final class ViewRootImpl implements ViewParent, } mHandler.postAtFrontOfQueue(() -> { mNextDrawUseBlastSync = false; + mWaitForBlastSyncComplete = false; if (DEBUG_BLAST) { Log.d(mTag, "Scheduling a traversal=" + mRequestedTraverseWhilePaused + " due to a previous skipped traversal."); |