diff options
| author | 2024-04-02 17:02:50 +0200 | |
|---|---|---|
| committer | 2024-04-02 17:38:12 +0200 | |
| commit | 5767ffa618556d36e2d61cba011c698758656d86 (patch) | |
| tree | e389795a47814fe756a140f6c3c64a305bd16358 | |
| parent | ef54218e380cef85f62bb012a78ce861724afde3 (diff) | |
Add vsync id to predictive back transactions
Bug: 331808052
Flag: ACONFIG com.android.window.flags.predictive_back_system_anims TRUNKFOOD
Test: Manual, i.e. recorded perfetto trace and verified that missedFrames metrics showed up
Change-Id: Ida7a1fb2c474e54b8b4e0716393d863255c677ea
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt | 19 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java | 13 |
2 files changed, 22 insertions, 10 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt index 772eae72ac38..c6d46207b119 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt @@ -25,6 +25,7 @@ import android.graphics.PointF import android.graphics.Rect import android.graphics.RectF import android.os.RemoteException +import android.view.Choreographer import android.view.Display import android.view.IRemoteAnimationFinishedCallback import android.view.IRemoteAnimationRunner @@ -137,7 +138,7 @@ class CrossActivityBackAnimation @Inject constructor( enteringTarget!!.taskInfo.taskDescription!!.backgroundColor, transaction ) ensureScrimLayer() - transaction.apply() + applyTransaction() } private fun onGestureProgress(backEvent: BackEvent) { @@ -150,7 +151,7 @@ class CrossActivityBackAnimation @Inject constructor( currentEnteringRect.setInterpolatedRectF(startEnteringRect, targetEnteringRect, progress) currentEnteringRect.offset(0f, yOffset) applyTransform(enteringTarget?.leash, currentEnteringRect, 1f) - transaction.apply() + applyTransaction() } private fun getYOffset(centeredRect: RectF, touchY: Float): Float { @@ -210,7 +211,7 @@ class CrossActivityBackAnimation @Inject constructor( applyTransform(closingTarget?.leash, currentClosingRect, closingAlpha) currentEnteringRect.setInterpolatedRectF(startEnteringRect, targetEnteringRect, progress) applyTransform(enteringTarget?.leash, currentEnteringRect, 1f) - transaction.apply() + applyTransaction() } private fun finishAnimation() { @@ -226,7 +227,7 @@ class CrossActivityBackAnimation @Inject constructor( closingTarget = null background.removeBackground(transaction) - transaction.apply() + applyTransaction() transformMatrix.reset() initialTouchPos.set(0f, 0f) try { @@ -250,6 +251,11 @@ class CrossActivityBackAnimation @Inject constructor( .setCornerRadius(leash, cornerRadius) } + private fun applyTransaction() { + transaction.setFrameTimelineVsync(Choreographer.getInstance().vsyncId) + transaction.apply() + } + private fun ensureScrimLayer() { if (scrimLayer != null) return val isDarkTheme: Boolean = isDarkMode(context) @@ -275,7 +281,8 @@ class CrossActivityBackAnimation @Inject constructor( private fun removeScrimLayer() { scrimLayer?.let { if (it.isValid) { - transaction.remove(it).apply() + transaction.remove(it) + applyTransaction() } } scrimLayer = null @@ -287,7 +294,7 @@ class CrossActivityBackAnimation @Inject constructor( // in case we're still animating an onBackCancelled event, let's remove the finish- // callback from the progress animator to prevent calling finishAnimation() before // restarting a new animation - progressAnimator.removeOnBackCancelledFinishCallback(); + progressAnimator.removeOnBackCancelledFinishCallback() startBackAnimation(backMotionEvent) progressAnimator.onBackStarted(backMotionEvent) { backEvent: BackEvent -> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java index cae2e80d5320..987001d66219 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java @@ -34,6 +34,7 @@ import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.os.RemoteException; +import android.view.Choreographer; import android.view.IRemoteAnimationFinishedCallback; import android.view.IRemoteAnimationRunner; import android.view.RemoteAnimationTarget; @@ -192,7 +193,7 @@ public class CrossTaskBackAnimation extends ShellBackAnimation { applyTransform(mClosingTarget.leash, mClosingCurrentRect, mCornerRadius); applyTransform(mEnteringTarget.leash, mEnteringCurrentRect, mCornerRadius); - mTransaction.apply(); + applyTransaction(); mBackground.onBackProgressed(progress); } @@ -242,6 +243,11 @@ public class CrossTaskBackAnimation extends ShellBackAnimation { .setCornerRadius(leash, cornerRadius); } + private void applyTransaction() { + mTransaction.setFrameTimelineVsync(Choreographer.getInstance().getVsyncId()); + mTransaction.apply(); + } + private void finishAnimation() { if (mEnteringTarget != null) { mEnteringTarget.leash.release(); @@ -255,8 +261,7 @@ public class CrossTaskBackAnimation extends ShellBackAnimation { if (mBackground != null) { mBackground.removeBackground(mTransaction); } - - mTransaction.apply(); + applyTransaction(); mBackInProgress = false; mTransformMatrix.reset(); mClosingCurrentRect.setEmpty(); @@ -303,7 +308,7 @@ public class CrossTaskBackAnimation extends ShellBackAnimation { if (progress > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD) { mBackground.resetStatusBarCustomization(); } - mTransaction.apply(); + applyTransaction(); }); valueAnimator.addListener(new AnimatorListenerAdapter() { |