summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Carr <racarr@google.com> 2022-04-05 16:52:43 +0000
committer Presubmit Automerger Backend <android-build-presubmit-automerger-backend@system.gserviceaccount.com> 2022-04-05 16:52:43 +0000
commit1be469ea0794725f9f339b0531f2352f028c912a (patch)
treeab9e33d02302d983ea223b171a825d8f0d628198
parenta07116a023a57b7197472b2b3a17c27daf4e85ac (diff)
parent25bdf74a0b3b8f2607baa3f2e55f4625d0e21041 (diff)
[automerge] ViewRootImpl: Ensure seqId only increases 2p: 25bdf74a0b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17571369 Bug: 161810301 Bug: 227561299 Change-Id: I2a1e2190bb7b7acb0aa61f86b4b937c47e232302
-rw-r--r--core/java/android/view/ViewRootImpl.java7
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java13
2 files changed, 15 insertions, 5 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 7b3fed74a9be..ee1e80defb6b 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1742,7 +1742,7 @@ public final class ViewRootImpl implements ViewParent,
mForceNextWindowRelayout = forceNextWindowRelayout;
mPendingAlwaysConsumeSystemBars = args.argi2 != 0;
- mSyncSeqId = args.argi4;
+ mSyncSeqId = args.argi4 > mSyncSeqId ? args.argi4 : mSyncSeqId;
if (msg == MSG_RESIZED_REPORT) {
reportNextDraw();
@@ -7986,7 +7986,10 @@ public final class ViewRootImpl implements ViewParent,
insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0,
mTmpFrames, mPendingMergedConfiguration, mSurfaceControl, mTempInsets,
mTempControls, mRelayoutBundle);
- mSyncSeqId = mRelayoutBundle.getInt("seqid");
+ final int maybeSyncSeqId = mRelayoutBundle.getInt("seqid");
+ if (maybeSyncSeqId > 0) {
+ mSyncSeqId = maybeSyncSeqId;
+ }
if (mTranslator != null) {
mTranslator.translateRectInScreenToAppWindow(mTmpFrames.frame);
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 8546e8002602..51d68bc0177a 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -6125,14 +6125,21 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
applyHere = true;
}
- for (int i = mDrawHandlers.size() - 1; i >= 0; i--) {
- DrawHandler h = mDrawHandlers.get(i);
+ final List<DrawHandler> handlersToRemove = new ArrayList<>();
+ // Iterate forwards to ensure we process in the same order
+ // we added.
+ for (int i = 0; i < mDrawHandlers.size(); i++) {
+ final DrawHandler h = mDrawHandlers.get(i);
if (h.mSeqId <= seqId) {
h.mConsumer.accept(t);
- mDrawHandlers.remove(h);
+ handlersToRemove.add(h);
hadHandlers = true;
}
}
+ for (int i = 0; i < handlersToRemove.size(); i++) {
+ final DrawHandler h = handlersToRemove.get(i);
+ mDrawHandlers.remove(h);
+ }
if (hadHandlers) {
mWmService.mH.removeMessages(WINDOW_STATE_BLAST_SYNC_TIMEOUT, this);