summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Johannes Gallmann <gallmann@google.com> 2024-04-02 17:02:50 +0200
committer Johannes Gallmann <gallmann@google.com> 2024-04-02 17:38:12 +0200
commit5767ffa618556d36e2d61cba011c698758656d86 (patch)
treee389795a47814fe756a140f6c3c64a305bd16358
parentef54218e380cef85f62bb012a78ce861724afde3 (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.kt19
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java13
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() {