summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorRob Carr <racarr@google.com>2021-07-09 03:08:43 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-07-09 03:08:43 +0000
commite65b5f1ef4540d89289f0cdcb97630bd885f6d75 (patch)
treeda3ac41c57dc6bb9f69b2799a02d07fc218d7726 /core/java
parent69e0de48a7b5c036ec0d18e42e85a1385ba32e50 (diff)
parent2aad6f28243c9299c4a2b473972cafaab9bd4922 (diff)
Merge "ViewRootImpl: Fix issue with early draw report in seamless rotation" into sc-dev am: 5f28230d34 am: 2aad6f2824
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15235723 Change-Id: I34a592fdf939dbdad6fdf3cf16dfc9a14cafcaef
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/view/ViewRootImpl.java36
1 files changed, 22 insertions, 14 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index a1b65116fffd..3bf8b521f59e 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -2793,6 +2793,7 @@ public final class ViewRootImpl implements ViewParent,
mView.onSystemBarAppearanceChanged(mDispatchedSystemBarAppearance);
}
}
+ final boolean wasReportNextDraw = mReportNextDraw;
if (mFirst || windowShouldResize || viewVisibilityChanged || params != null
|| mForceNextWindowRelayout) {
@@ -2839,6 +2840,16 @@ public final class ViewRootImpl implements ViewParent,
final boolean dockedResizing = (relayoutResult
& WindowManagerGlobal.RELAYOUT_RES_DRAG_RESIZING_DOCKED) != 0;
final boolean dragResizing = freeformResizing || dockedResizing;
+ if ((relayoutResult & WindowManagerGlobal.RELAYOUT_RES_BLAST_SYNC) != 0) {
+ if (DEBUG_BLAST) {
+ Log.d(mTag, "Relayout called with blastSync");
+ }
+ reportNextDraw();
+ if (isHardwareEnabled()) {
+ mNextDrawUseBlastSync = true;
+ }
+ }
+
if (mSurfaceControl.isValid()) {
updateOpacity(mWindowAttributes, dragResizing);
}
@@ -3057,7 +3068,16 @@ public final class ViewRootImpl implements ViewParent,
}
}
- if (!mStopped || mReportNextDraw) {
+ // TODO: In the CL "ViewRootImpl: Fix issue with early draw report in
+ // seamless rotation". We moved processing of RELAYOUT_RES_BLAST_SYNC
+ // earlier in the function, potentially triggering a call to
+ // reportNextDraw(). That same CL changed this and the next reference
+ // to wasReportNextDraw, such that this logic would remain undisturbed
+ // (it continues to operate as if the code was never moved). This was
+ // done to achieve a more hermetic fix for S, but it's entirely
+ // possible that checking the most recent value is actually more
+ // correct here.
+ if (!mStopped || wasReportNextDraw) {
boolean focusChangedDueToTouchMode = ensureTouchModeLocally(
(relayoutResult&WindowManagerGlobal.RELAYOUT_RES_IN_TOUCH_MODE) != 0);
if (focusChangedDueToTouchMode || mWidth != host.getMeasuredWidth()
@@ -3127,7 +3147,7 @@ public final class ViewRootImpl implements ViewParent,
prepareSurfaces();
}
- final boolean didLayout = layoutRequested && (!mStopped || mReportNextDraw);
+ final boolean didLayout = layoutRequested && (!mStopped || wasReportNextDraw);
boolean triggerGlobalLayoutListener = didLayout
|| mAttachInfo.mRecomputeGlobalAttributes;
if (didLayout) {
@@ -3283,21 +3303,10 @@ public final class ViewRootImpl implements ViewParent,
mImeFocusController.onTraversal(hasWindowFocus, mWindowAttributes);
- final boolean wasReportNextDraw = mReportNextDraw;
-
// Remember if we must report the next draw.
if ((relayoutResult & WindowManagerGlobal.RELAYOUT_RES_FIRST_TIME) != 0) {
reportNextDraw();
}
- if ((relayoutResult & WindowManagerGlobal.RELAYOUT_RES_BLAST_SYNC) != 0) {
- if (DEBUG_BLAST) {
- Log.d(mTag, "Relayout called with blastSync");
- }
- reportNextDraw();
- if (isHardwareEnabled()) {
- mNextDrawUseBlastSync = true;
- }
- }
boolean cancelDraw = mAttachInfo.mTreeObserver.dispatchOnPreDraw() || !isViewVisible;
@@ -3308,7 +3317,6 @@ public final class ViewRootImpl implements ViewParent,
}
mPendingTransitions.clear();
}
-
performDraw();
} else {
if (isViewVisible) {