Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5767ffa6 authored by Johannes Gallmann's avatar Johannes Gallmann
Browse files

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
parent ef54218e
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -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 ->
+9 −4
Original line number Diff line number Diff line
@@ -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() {