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

Commit 5e97d131 authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Fix surface release race when using Shell Transitions" into sc-dev am: 6e895c09

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14287166

Change-Id: I5000b7db718a06427869802ecb30f46fe8b6248d
parents a7f9bec7 6e895c09
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static android.view.WindowManager.TransitionOldType;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;

import android.annotation.SuppressLint;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
@@ -241,10 +242,16 @@ public class RemoteAnimationAdapterCompat {

                final Runnable animationFinishedCallback = new Runnable() {
                    @Override
                    @SuppressLint("NewApi")
                    public void run() {
                        try {
                            counterLauncher.cleanUp(info.getRootLeash());
                            counterWallpaper.cleanUp(info.getRootLeash());
                            // Release surface references now. This is apparently to free GPU
                            // memory while doing quick operations (eg. during CTS).
                            for (int i = 0; i < info.getChanges().size(); ++i) {
                                info.getChanges().get(i).getLeash().release();
                            }
                            finishCallback.onTransitionFinished(null /* wct */);
                        } catch (RemoteException e) {
                            Log.e("ActivityOptionsCompat", "Failed to call app controlled animation"
+13 −3
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.view.WindowManager.TRANSIT_TO_FRONT;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.graphics.Rect;
import android.os.IBinder;
import android.os.Parcelable;
@@ -127,7 +128,7 @@ public class RemoteTransitionCompat implements Parcelable {
                }
                t.apply();
                final RecentsAnimationControllerCompat wrapControl =
                        new RecentsControllerWrap(controller, finishedCallback, pausingTask);
                        new RecentsControllerWrap(controller, info, finishedCallback, pausingTask);
                recents.onAnimationStart(wrapControl, apps, wallpapers, new Rect(0, 0, 0, 0),
                        new Rect());
            }
@@ -161,10 +162,12 @@ public class RemoteTransitionCompat implements Parcelable {
        private final RecentsAnimationControllerCompat mWrapped;
        private final IRemoteTransitionFinishedCallback mFinishCB;
        private final WindowContainerToken mPausingTask;
        private final TransitionInfo mInfo;

        RecentsControllerWrap(RecentsAnimationControllerCompat wrapped,
        RecentsControllerWrap(RecentsAnimationControllerCompat wrapped, TransitionInfo info,
                IRemoteTransitionFinishedCallback finishCB, WindowContainerToken pausingTask) {
            mWrapped = wrapped;
            mInfo = info;
            mFinishCB = finishCB;
            mPausingTask = pausingTask;
        }
@@ -192,7 +195,9 @@ public class RemoteTransitionCompat implements Parcelable {
            }
        }

        @Override public void finish(boolean toHome, boolean sendUserLeaveHint) {
        @Override
        @SuppressLint("NewApi")
        public void finish(boolean toHome, boolean sendUserLeaveHint) {
            try {
                if (!toHome && mPausingTask != null) {
                    // The gesture went back to opening the app rather than continuing with
@@ -207,6 +212,11 @@ public class RemoteTransitionCompat implements Parcelable {
                Log.e("RemoteTransitionCompat", "Failed to call animation finish callback", e);
            }
            if (mWrapped != null) mWrapped.finish(toHome, sendUserLeaveHint);
            // Release surface references now. This is apparently to free GPU
            // memory while doing quick operations (eg. during CTS).
            for (int i = 0; i < mInfo.getChanges().size(); ++i) {
                mInfo.getChanges().get(i).getLeash().release();
            }
        }

        @Override public void setDeferCancelUntilNextTransition(boolean defer, boolean screenshot) {