From 2f0567b00d22edba0b87c0d06766c3cacaa0e041 Mon Sep 17 00:00:00 2001 From: chaviw Date: Mon, 29 Jan 2018 16:22:02 -0800 Subject: [PATCH] Use self's pendingTransaction object when setting position. When iterating through each child to set its updated position, the transaction object was passed to the children. This could allow multiple transactions to update the same property on the same child. If that occurs, then the merge does not guarantee the same order. This could cause earlier transactions to overwrite later ones. Instead, have each WC update its own transaction object. Change-Id: Ie1bb758e4efd74fa012c7ec945d9c1c586162df4 Fixes: 72198558 Fixes: 72463091 Test: Issues from bugs no longer occur. Test: go/wm-smoke-auto --- .../core/java/com/android/server/wm/TaskStack.java | 8 ++------ .../java/com/android/server/wm/WindowContainer.java | 10 +++------- .../core/java/com/android/server/wm/WindowState.java | 8 ++++++-- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index cf54b67e1229c..ae5341bd8e45f 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -736,15 +736,11 @@ public class TaskStack extends WindowContainer implements } private void updateSurfaceBounds() { - updateSurfaceBounds(getPendingTransaction()); + updateSurfaceSize(getPendingTransaction()); + updateSurfacePosition(); scheduleAnimation(); } - void updateSurfaceBounds(SurfaceControl.Transaction transaction) { - updateSurfaceSize(transaction); - updateSurfacePosition(transaction); - } - private void updateSurfaceSize(SurfaceControl.Transaction transaction) { if (mSurfaceControl == null) { return; diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 0c0ce0e17dd85..6bd7f22a4a4c5 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -131,7 +131,7 @@ class WindowContainer extends ConfigurationContainer< @Override public void onConfigurationChanged(Configuration newParentConfig) { super.onConfigurationChanged(newParentConfig); - updateSurfacePosition(getPendingTransaction()); + updateSurfacePosition(); scheduleAnimation(); } @@ -1204,7 +1204,7 @@ class WindowContainer extends ConfigurationContainer< } } - void updateSurfacePosition(SurfaceControl.Transaction transaction) { + void updateSurfacePosition() { if (mSurfaceControl == null) { return; } @@ -1214,12 +1214,8 @@ class WindowContainer extends ConfigurationContainer< return; } - transaction.setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y); + getPendingTransaction().setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y); mLastSurfacePosition.set(mTmpPos.x, mTmpPos.y); - - for (int i = mChildren.size() - 1; i >= 0; i--) { - mChildren.get(i).updateSurfacePosition(transaction); - } } void getRelativePosition(Point outPos) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 55c982c174a64..53a8d82f551e2 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -4519,7 +4519,7 @@ class WindowState extends WindowContainer implements WindowManagerP if (dimmer != null) { applyDims(dimmer); } - updateSurfacePosition(mPendingTransaction); + updateSurfacePosition(); mWinAnimator.prepareSurfaceLocked(true); super.prepareSurfaces(); @@ -4541,7 +4541,11 @@ class WindowState extends WindowContainer implements WindowManagerP } @Override - void updateSurfacePosition(Transaction t) { + void updateSurfacePosition() { + updateSurfacePosition(getPendingTransaction()); + } + + private void updateSurfacePosition(Transaction t) { if (mSurfaceControl == null) { return; }