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

Commit 7122b1ee authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Boost remote-transition animator processes during animation" into...

Merge "Boost remote-transition animator processes during animation" into sc-v2-dev am: 62924f12 am: be5ed636

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

Change-Id: Ie2ca96fd1a670f749a131d43f5177a7ec6412f0b
parents 5f31f572 be5ed636
Loading
Loading
Loading
Loading
+42 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.window;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.IApplicationThread;
import android.os.IBinder;
import android.os.Parcelable;

@@ -34,6 +35,14 @@ public class RemoteTransition implements Parcelable {
    /** The actual remote-transition interface used to run the transition animation. */
    private @NonNull IRemoteTransition mRemoteTransition;

    /** The application thread that will be running the remote transition. */
    private @Nullable IApplicationThread mAppThread;

    /** Constructs with no app thread (animation runs in shell). */
    public RemoteTransition(@NonNull IRemoteTransition remoteTransition) {
        this(remoteTransition, null /* appThread */);
    }

    /** Get the IBinder associated with the underlying IRemoteTransition. */
    public @Nullable IBinder asBinder() {
        return mRemoteTransition.asBinder();
@@ -59,13 +68,17 @@ public class RemoteTransition implements Parcelable {
     *
     * @param remoteTransition
     *   The actual remote-transition interface used to run the transition animation.
     * @param appThread
     *   The application thread that will be running the remote transition.
     */
    @DataClass.Generated.Member
    public RemoteTransition(
            @NonNull IRemoteTransition remoteTransition) {
            @NonNull IRemoteTransition remoteTransition,
            @Nullable IApplicationThread appThread) {
        this.mRemoteTransition = remoteTransition;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mRemoteTransition);
        this.mAppThread = appThread;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -78,6 +91,14 @@ public class RemoteTransition implements Parcelable {
        return mRemoteTransition;
    }

    /**
     * The application thread that will be running the remote transition.
     */
    @DataClass.Generated.Member
    public @Nullable IApplicationThread getAppThread() {
        return mAppThread;
    }

    /**
     * The actual remote-transition interface used to run the transition animation.
     */
@@ -89,6 +110,15 @@ public class RemoteTransition implements Parcelable {
        return this;
    }

    /**
     * The application thread that will be running the remote transition.
     */
    @DataClass.Generated.Member
    public @NonNull RemoteTransition setAppThread(@NonNull IApplicationThread value) {
        mAppThread = value;
        return this;
    }

    @Override
    @DataClass.Generated.Member
    public String toString() {
@@ -96,7 +126,8 @@ public class RemoteTransition implements Parcelable {
        // String fieldNameToString() { ... }

        return "RemoteTransition { " +
                "remoteTransition = " + mRemoteTransition +
                "remoteTransition = " + mRemoteTransition + ", " +
                "appThread = " + mAppThread +
        " }";
    }

@@ -106,7 +137,11 @@ public class RemoteTransition implements Parcelable {
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        byte flg = 0;
        if (mAppThread != null) flg |= 0x2;
        dest.writeByte(flg);
        dest.writeStrongInterface(mRemoteTransition);
        if (mAppThread != null) dest.writeStrongInterface(mAppThread);
    }

    @Override
@@ -120,11 +155,14 @@ public class RemoteTransition implements Parcelable {
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        byte flg = in.readByte();
        IRemoteTransition remoteTransition = IRemoteTransition.Stub.asInterface(in.readStrongBinder());
        IApplicationThread appThread = (flg & 0x2) == 0 ? null : IApplicationThread.Stub.asInterface(in.readStrongBinder());

        this.mRemoteTransition = remoteTransition;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mRemoteTransition);
        this.mAppThread = appThread;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -144,10 +182,10 @@ public class RemoteTransition implements Parcelable {
    };

    @DataClass.Generated(
            time = 1630613039043L,
            time = 1630690027011L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/window/RemoteTransition.java",
            inputSignatures = "private @android.annotation.NonNull android.window.IRemoteTransition mRemoteTransition\npublic @android.annotation.Nullable android.os.IBinder asBinder()\nclass RemoteTransition extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genSetters=true, genAidl=true)")
            inputSignatures = "private @android.annotation.NonNull android.window.IRemoteTransition mRemoteTransition\nprivate @android.annotation.Nullable android.app.IApplicationThread mAppThread\npublic @android.annotation.Nullable android.os.IBinder asBinder()\nclass RemoteTransition extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genSetters=true, genAidl=true)")
    @Deprecated
    private void __metadata() {}

+7 −2
Original line number Diff line number Diff line
@@ -339,9 +339,14 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                    augmentedNonApps[i] = nonApps[i];
                }
                augmentedNonApps[augmentedNonApps.length - 1] = getDividerBarLegacyTarget();
                try {
                    try {
                        ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
                                adapter.getCallingApplication());
                    } catch (SecurityException e) {
                        Slog.e(TAG, "Unable to boost animation thread. This should only happen"
                                + " during unit tests");
                    }
                    adapter.getRunner().onAnimationStart(transit, apps, wallpapers, nonApps,
                            finishedCallback);
                } catch (RemoteException e) {
+9 −0
Original line number Diff line number Diff line
@@ -18,9 +18,11 @@ package com.android.wm.shell.transition;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;
import android.view.SurfaceControl;
import android.window.IRemoteTransition;
import android.window.IRemoteTransitionFinishedCallback;
@@ -89,6 +91,13 @@ public class OneShotRemoteHandler implements Transitions.TransitionHandler {
            if (mRemote.asBinder() != null) {
                mRemote.asBinder().linkToDeath(remoteDied, 0 /* flags */);
            }
            try {
                ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
                        mRemote.getAppThread());
            } catch (SecurityException e) {
                Slog.e(Transitions.TAG, "Unable to boost animation thread. This should only happen"
                        + " during unit tests");
            }
            mRemote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
        } catch (RemoteException e) {
            Log.e(Transitions.TAG, "Error running remote transition.", e);
+8 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell.transition;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.ArrayMap;
@@ -130,6 +131,13 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
        };
        try {
            handleDeath(remote.asBinder(), finishCallback);
            try {
                ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
                        remote.getAppThread());
            } catch (SecurityException e) {
                Log.e(Transitions.TAG, "Unable to boost animation thread. This should only happen"
                        + " during unit tests");
            }
            remote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
        } catch (RemoteException e) {
            Log.e(Transitions.TAG, "Error running remote transition.", e);
+6 −4
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.view.WindowManager.TransitionOldType;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;

import android.annotation.SuppressLint;
import android.app.IApplicationThread;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.ArrayMap;
@@ -51,10 +52,10 @@ public class RemoteAnimationAdapterCompat {
    private final RemoteTransitionCompat mRemoteTransition;

    public RemoteAnimationAdapterCompat(RemoteAnimationRunnerCompat runner, long duration,
            long statusBarTransitionDelay) {
            long statusBarTransitionDelay, IApplicationThread appThread) {
        mWrapped = new RemoteAnimationAdapter(wrapRemoteAnimationRunner(runner), duration,
                statusBarTransitionDelay);
        mRemoteTransition = buildRemoteTransition(runner);
        mRemoteTransition = buildRemoteTransition(runner, appThread);
    }

    RemoteAnimationAdapter getWrapped() {
@@ -62,9 +63,10 @@ public class RemoteAnimationAdapterCompat {
    }

    /** Helper to just build a remote transition. Use this if the legacy adapter isn't needed. */
    public static RemoteTransitionCompat buildRemoteTransition(RemoteAnimationRunnerCompat runner) {
    public static RemoteTransitionCompat buildRemoteTransition(RemoteAnimationRunnerCompat runner,
            IApplicationThread appThread) {
        return new RemoteTransitionCompat(
                new RemoteTransition(wrapRemoteTransition(runner)));
                new RemoteTransition(wrapRemoteTransition(runner), appThread));
    }

    public RemoteTransitionCompat getRemoteTransition() {
Loading