diff options
author | 2022-05-13 09:00:32 +0000 | |
---|---|---|
committer | 2022-05-13 09:00:32 +0000 | |
commit | 8300146b6a2abc23e26e55c90059f2e199f18d30 (patch) | |
tree | f3d18f096027714c609f8c8d65a91b5b61ddb4ff | |
parent | 4864cabf0dfc9ca409a1bfa89cbaf8e1be25c43b (diff) | |
parent | 89913957554b7f932ba6600ca45005bef4c969a9 (diff) |
Merge "Use getSyncTransaction in SurfaceAnimator and SurfaceFreezer" into tm-dev am: 8991395755
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18281704
Change-Id: I2198998be6e099f8b4494f0f342aeb67fd695bd0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
8 files changed, 63 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java index 029056ac26fb..e7ab63eab202 100644 --- a/services/core/java/com/android/server/wm/Dimmer.java +++ b/services/core/java/com/android/server/wm/Dimmer.java @@ -50,11 +50,16 @@ class Dimmer { } @Override - public SurfaceControl.Transaction getPendingTransaction() { + public SurfaceControl.Transaction getSyncTransaction() { return mHost.getSyncTransaction(); } @Override + public SurfaceControl.Transaction getPendingTransaction() { + return mHost.getPendingTransaction(); + } + + @Override public void commitPendingTransaction() { mHost.commitPendingTransaction(); } @@ -105,7 +110,7 @@ class Dimmer { void removeSurface() { if (mDimLayer != null && mDimLayer.isValid()) { - getPendingTransaction().remove(mDimLayer); + getSyncTransaction().remove(mDimLayer); } mDimLayer = null; } diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index b4029d185b9f..518bfd4c90df 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -565,6 +565,7 @@ class ScreenRotationAnimation { private SimpleSurfaceAnimatable.Builder initializeBuilder() { return new SimpleSurfaceAnimatable.Builder() + .setSyncTransactionSupplier(mDisplayContent::getSyncTransaction) .setPendingTransactionSupplier(mDisplayContent::getPendingTransaction) .setCommitTransactionRunnable(mDisplayContent::commitPendingTransaction) .setAnimationLeashSupplier(mDisplayContent::makeOverlay); diff --git a/services/core/java/com/android/server/wm/SimpleSurfaceAnimatable.java b/services/core/java/com/android/server/wm/SimpleSurfaceAnimatable.java index bf5d5e2653a8..3b3db890f67e 100644 --- a/services/core/java/com/android/server/wm/SimpleSurfaceAnimatable.java +++ b/services/core/java/com/android/server/wm/SimpleSurfaceAnimatable.java @@ -41,6 +41,7 @@ public class SimpleSurfaceAnimatable implements SurfaceAnimator.Animatable { private final SurfaceControl mParentSurfaceControl; private final Runnable mCommitTransactionRunnable; private final Supplier<SurfaceControl.Builder> mAnimationLeashFactory; + private final Supplier<SurfaceControl.Transaction> mSyncTransaction; private final Supplier<SurfaceControl.Transaction> mPendingTransaction; private final BiConsumer<SurfaceControl.Transaction, SurfaceControl> mOnAnimationLeashCreated; private final Consumer<SurfaceControl.Transaction> mOnAnimationLeashLost; @@ -60,10 +61,16 @@ public class SimpleSurfaceAnimatable implements SurfaceAnimator.Animatable { mAnimationLeashFactory = builder.mAnimationLeashFactory; mOnAnimationLeashCreated = builder.mOnAnimationLeashCreated; mOnAnimationLeashLost = builder.mOnAnimationLeashLost; + mSyncTransaction = builder.mSyncTransactionSupplier; mPendingTransaction = builder.mPendingTransactionSupplier; mOnAnimationFinished = builder.mOnAnimationFinished; } + @Override + public SurfaceControl.Transaction getSyncTransaction() { + return mSyncTransaction.get(); + } + @NonNull @Override public SurfaceControl.Transaction getPendingTransaction() { @@ -160,6 +167,9 @@ public class SimpleSurfaceAnimatable implements SurfaceAnimator.Animatable { private Consumer<Runnable> mOnAnimationFinished = null; @NonNull + private Supplier<SurfaceControl.Transaction> mSyncTransactionSupplier; + + @NonNull private Supplier<SurfaceControl.Transaction> mPendingTransactionSupplier; @NonNull @@ -207,6 +217,15 @@ public class SimpleSurfaceAnimatable implements SurfaceAnimator.Animatable { } /** + * @see SurfaceAnimator.Animatable#getSyncTransaction() + */ + public Builder setSyncTransactionSupplier( + @NonNull Supplier<SurfaceControl.Transaction> syncTransactionSupplier) { + mSyncTransactionSupplier = syncTransactionSupplier; + return this; + } + + /** * @see SurfaceAnimator.Animatable#getPendingTransaction() */ public Builder setPendingTransactionSupplier( @@ -290,6 +309,9 @@ public class SimpleSurfaceAnimatable implements SurfaceAnimator.Animatable { } public SurfaceAnimator.Animatable build() { + if (mSyncTransactionSupplier == null) { + throw new IllegalArgumentException("mSyncTransactionSupplier cannot be null"); + } if (mPendingTransactionSupplier == null) { throw new IllegalArgumentException("mPendingTransactionSupplier cannot be null"); } diff --git a/services/core/java/com/android/server/wm/SurfaceAnimator.java b/services/core/java/com/android/server/wm/SurfaceAnimator.java index fbf04262cc37..3dde2f1aa01f 100644 --- a/services/core/java/com/android/server/wm/SurfaceAnimator.java +++ b/services/core/java/com/android/server/wm/SurfaceAnimator.java @@ -128,7 +128,7 @@ class SurfaceAnimator { } final OnAnimationFinishedCallback animationFinishCallback = mSurfaceAnimationFinishedCallback; - reset(mAnimatable.getPendingTransaction(), true /* destroyLeash */); + reset(mAnimatable.getSyncTransaction(), true /* destroyLeash */); if (staticAnimationFinishedCallback != null) { staticAnimationFinishedCallback.onAnimationFinished(type, anim); } @@ -234,7 +234,7 @@ class SurfaceAnimator { final boolean delayed = mAnimationStartDelayed; mAnimationStartDelayed = false; if (delayed && mAnimation != null) { - mAnimation.startAnimation(mLeash, mAnimatable.getPendingTransaction(), + mAnimation.startAnimation(mLeash, mAnimatable.getSyncTransaction(), mAnimationType, mInnerAnimationFinishedCallback); mAnimatable.commitPendingTransaction(); } @@ -264,7 +264,7 @@ class SurfaceAnimator { * Cancels any currently running animation. */ void cancelAnimation() { - cancelAnimation(mAnimatable.getPendingTransaction(), false /* restarting */, + cancelAnimation(mAnimatable.getSyncTransaction(), false /* restarting */, true /* forwardCancel */); mAnimatable.commitPendingTransaction(); } @@ -319,7 +319,7 @@ class SurfaceAnimator { return; } endDelayingAnimationStart(); - final Transaction t = mAnimatable.getPendingTransaction(); + final Transaction t = mAnimatable.getSyncTransaction(); cancelAnimation(t, true /* restarting */, true /* forwardCancel */); mLeash = from.mLeash; mAnimation = from.mAnimation; @@ -620,6 +620,12 @@ class SurfaceAnimator { interface Animatable { /** + * Use this method instead of {@link #getPendingTransaction()} if the transaction should be + * synchronized with the client. + */ + @NonNull Transaction getSyncTransaction(); + + /** * @return The pending transaction that will be committed in the next frame. */ @NonNull Transaction getPendingTransaction(); diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index a480c37fbcf3..f9d19e22ddc7 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -1004,7 +1004,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< void onDisplayChanged(DisplayContent dc) { if (mDisplayContent != null && mDisplayContent.mChangingContainers.remove(this)) { // Cancel any change transition queued-up for this container on the old display. - mSurfaceFreezer.unfreeze(getPendingTransaction()); + mSurfaceFreezer.unfreeze(getSyncTransaction()); } mDisplayContent = dc; if (dc != null && dc != this) { @@ -2697,6 +2697,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< * @return {@link #mBLASTSyncTransaction} if available. Otherwise, returns * {@link #getPendingTransaction()} */ + @Override public Transaction getSyncTransaction() { if (mSyncTransactionCommitCallbackDepth > 0) { return mSyncTransaction; @@ -2767,7 +2768,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< void cancelAnimation() { doAnimationFinished(mSurfaceAnimator.getAnimationType(), mSurfaceAnimator.getAnimation()); mSurfaceAnimator.cancelAnimation(); - mSurfaceFreezer.unfreeze(getPendingTransaction()); + mSurfaceFreezer.unfreeze(getSyncTransaction()); } /** Whether we can start change transition with this window and current display status. */ diff --git a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java index 7f21eeb43d59..9b6f4d947694 100644 --- a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java +++ b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java @@ -167,6 +167,11 @@ class WindowContainerThumbnail implements Animatable { } @Override + public Transaction getSyncTransaction() { + return mWindowContainer.getSyncTransaction(); + } + + @Override public Transaction getPendingTransaction() { return mWindowContainer.getPendingTransaction(); } diff --git a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java index 3beb7f2049df..55a7c1ba0bca 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java @@ -64,6 +64,11 @@ public class DimmerTests extends WindowTestsBase { } @Override + public SurfaceControl.Transaction getSyncTransaction() { + return mTransaction; + } + + @Override public SurfaceControl.Transaction getPendingTransaction() { return mTransaction; } @@ -102,6 +107,11 @@ public class DimmerTests extends WindowTestsBase { } @Override + public SurfaceControl.Transaction getSyncTransaction() { + return mHostTransaction; + } + + @Override public SurfaceControl.Transaction getPendingTransaction() { return mHostTransaction; } diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java index 79ba1759f4c4..ff0063c4ffa0 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java @@ -338,6 +338,11 @@ public class SurfaceAnimatorTest extends WindowTestsBase { } @Override + public SurfaceControl.Transaction getSyncTransaction() { + return mTransaction; + } + + @Override public Transaction getPendingTransaction() { return mTransaction; } |