diff options
author | 2023-09-14 14:10:56 +0800 | |
---|---|---|
committer | 2023-11-29 01:05:59 +0000 | |
commit | 35c3af360d50355c66da913ac25440f92c16d8f6 (patch) | |
tree | d35b6c5b59b2be9998dcd5a2e33882862a5ece86 /libs | |
parent | 03bf86430d85cc61a0a5a8ce531c8a2956b7ec47 (diff) |
Prevent duplicate release same transaction from TransactionPool
Sometimes split transition immediatelly abort due to app does't
support multiwindow or other reasons, it may cause the fadeAnimation
duplicate release same transaction with SplashScreen exit shiftUpAnimation.
Bug: 295124138
Test: run auto monkey test
Change-Id: I17c73b8dae9e0f32558bc3401877dcc82bc66f70
Diffstat (limited to 'libs')
-rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java index d21f8a48e62a..3a230f2bca86 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java @@ -478,18 +478,20 @@ class SplitScreenTransitions { private void startFadeAnimation(@NonNull SurfaceControl leash, boolean show) { final float end = show ? 1.f : 0.f; final float start = 1.f - end; - final SurfaceControl.Transaction transaction = mTransactionPool.acquire(); final ValueAnimator va = ValueAnimator.ofFloat(start, end); va.setDuration(FADE_DURATION); va.setInterpolator(show ? ALPHA_IN : ALPHA_OUT); va.addUpdateListener(animation -> { float fraction = animation.getAnimatedFraction(); + final SurfaceControl.Transaction transaction = mTransactionPool.acquire(); transaction.setAlpha(leash, start * (1.f - fraction) + end * fraction); transaction.apply(); + mTransactionPool.release(transaction); }); va.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { + final SurfaceControl.Transaction transaction = mTransactionPool.acquire(); transaction.setAlpha(leash, end); transaction.apply(); mTransactionPool.release(transaction); |