summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2022-07-28 23:35:13 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-07-28 23:35:13 +0000
commitd3f1cdffa596ecd5b8d58645f9ac67e8a4a17ec9 (patch)
tree757d6a81d85181623b808e831e2aaaa620de9750
parent8dbae9f6899d8e4fc755dde483846d206b108e3c (diff)
parent0897c09ee7224d37405759f7872a3827b15b5c85 (diff)
Merge "Make a copy for draw transaction of local window" into tm-qpr-dev am: 0897c09ee7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19429367 Change-Id: I9cd102d429b7cec660029447f763d1a3bfa34280 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/wm/AsyncRotationController.java18
1 files changed, 12 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java
index 1898cc65b107..219092baface 100644
--- a/services/core/java/com/android/server/wm/AsyncRotationController.java
+++ b/services/core/java/com/android/server/wm/AsyncRotationController.java
@@ -204,11 +204,8 @@ class AsyncRotationController extends FadeAnimationController implements Consume
for (int i = mTargetWindowTokens.size() - 1; i >= 0; i--) {
final WindowToken token = mTargetWindowTokens.keyAt(i);
for (int j = token.getChildCount() - 1; j >= 0; j--) {
- // TODO(b/234585256): The consumer should be handleFinishDrawing(). And check why
- // the local window might easily time out.
- final WindowState w = token.getChildAt(j);
- if (w.isClientLocal()) continue;
- w.applyWithNextDraw(t -> {});
+ // TODO(b/234585256): The consumer should be handleFinishDrawing().
+ token.getChildAt(j).applyWithNextDraw(t -> {});
}
}
mIsSyncDrawRequested = true;
@@ -484,7 +481,16 @@ class AsyncRotationController extends FadeAnimationController implements Consume
if (op == null) return false;
if (DEBUG) Slog.d(TAG, "handleFinishDrawing " + w);
if (op.mDrawTransaction == null) {
- op.mDrawTransaction = postDrawTransaction;
+ if (w.isClientLocal()) {
+ // Use a new transaction to merge the draw transaction of local window because the
+ // same instance will be cleared (Transaction#clear()) after reporting draw.
+ op.mDrawTransaction = mService.mTransactionFactory.get();
+ op.mDrawTransaction.merge(postDrawTransaction);
+ } else {
+ // The transaction read from parcel (the client is in a different process) is
+ // already a copy, so just reference it directly.
+ op.mDrawTransaction = postDrawTransaction;
+ }
} else {
op.mDrawTransaction.merge(postDrawTransaction);
}