Merge "Boost remote-transition animator processes during animation" into sc-v2-dev

This commit is contained in:
Evan Rosky
2021-11-03 20:59:07 +00:00
committed by Android (Google) Code Review
12 changed files with 118 additions and 23 deletions

View File

@@ -18,6 +18,7 @@ package android.window;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.IApplicationThread;
import android.os.IBinder; import android.os.IBinder;
import android.os.Parcelable; import android.os.Parcelable;
@@ -34,6 +35,14 @@ public class RemoteTransition implements Parcelable {
/** The actual remote-transition interface used to run the transition animation. */ /** The actual remote-transition interface used to run the transition animation. */
private @NonNull IRemoteTransition mRemoteTransition; 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. */ /** Get the IBinder associated with the underlying IRemoteTransition. */
public @Nullable IBinder asBinder() { public @Nullable IBinder asBinder() {
return mRemoteTransition.asBinder(); return mRemoteTransition.asBinder();
@@ -59,13 +68,17 @@ public class RemoteTransition implements Parcelable {
* *
* @param remoteTransition * @param remoteTransition
* The actual remote-transition interface used to run the transition animation. * 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 @DataClass.Generated.Member
public RemoteTransition( public RemoteTransition(
@NonNull IRemoteTransition remoteTransition) { @NonNull IRemoteTransition remoteTransition,
@Nullable IApplicationThread appThread) {
this.mRemoteTransition = remoteTransition; this.mRemoteTransition = remoteTransition;
com.android.internal.util.AnnotationValidations.validate( com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mRemoteTransition); NonNull.class, null, mRemoteTransition);
this.mAppThread = appThread;
// onConstructed(); // You can define this method to get a callback // onConstructed(); // You can define this method to get a callback
} }
@@ -78,6 +91,14 @@ public class RemoteTransition implements Parcelable {
return mRemoteTransition; 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. * The actual remote-transition interface used to run the transition animation.
*/ */
@@ -89,6 +110,15 @@ public class RemoteTransition implements Parcelable {
return this; 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 @Override
@DataClass.Generated.Member @DataClass.Generated.Member
public String toString() { public String toString() {
@@ -96,7 +126,8 @@ public class RemoteTransition implements Parcelable {
// String fieldNameToString() { ... } // String fieldNameToString() { ... }
return "RemoteTransition { " + 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: // You can override field parcelling by defining methods like:
// void parcelFieldName(Parcel dest, int flags) { ... } // void parcelFieldName(Parcel dest, int flags) { ... }
byte flg = 0;
if (mAppThread != null) flg |= 0x2;
dest.writeByte(flg);
dest.writeStrongInterface(mRemoteTransition); dest.writeStrongInterface(mRemoteTransition);
if (mAppThread != null) dest.writeStrongInterface(mAppThread);
} }
@Override @Override
@@ -120,11 +155,14 @@ public class RemoteTransition implements Parcelable {
// You can override field unparcelling by defining methods like: // You can override field unparcelling by defining methods like:
// static FieldType unparcelFieldName(Parcel in) { ... } // static FieldType unparcelFieldName(Parcel in) { ... }
byte flg = in.readByte();
IRemoteTransition remoteTransition = IRemoteTransition.Stub.asInterface(in.readStrongBinder()); IRemoteTransition remoteTransition = IRemoteTransition.Stub.asInterface(in.readStrongBinder());
IApplicationThread appThread = (flg & 0x2) == 0 ? null : IApplicationThread.Stub.asInterface(in.readStrongBinder());
this.mRemoteTransition = remoteTransition; this.mRemoteTransition = remoteTransition;
com.android.internal.util.AnnotationValidations.validate( com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mRemoteTransition); NonNull.class, null, mRemoteTransition);
this.mAppThread = appThread;
// onConstructed(); // You can define this method to get a callback // onConstructed(); // You can define this method to get a callback
} }
@@ -144,10 +182,10 @@ public class RemoteTransition implements Parcelable {
}; };
@DataClass.Generated( @DataClass.Generated(
time = 1630613039043L, time = 1630690027011L,
codegenVersion = "1.0.23", codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/window/RemoteTransition.java", 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 @Deprecated
private void __metadata() {} private void __metadata() {}

View File

@@ -340,8 +340,13 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
} }
augmentedNonApps[augmentedNonApps.length - 1] = getDividerBarLegacyTarget(); augmentedNonApps[augmentedNonApps.length - 1] = getDividerBarLegacyTarget();
try { try {
ActivityTaskManager.getService().setRunningRemoteTransitionDelegate( try {
adapter.getCallingApplication()); 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, adapter.getRunner().onAnimationStart(transit, apps, wallpapers, nonApps,
finishedCallback); finishedCallback);
} catch (RemoteException e) { } catch (RemoteException e) {

View File

@@ -18,9 +18,11 @@ package com.android.wm.shell.transition;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log; import android.util.Log;
import android.util.Slog;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.window.IRemoteTransition; import android.window.IRemoteTransition;
import android.window.IRemoteTransitionFinishedCallback; import android.window.IRemoteTransitionFinishedCallback;
@@ -89,6 +91,13 @@ public class OneShotRemoteHandler implements Transitions.TransitionHandler {
if (mRemote.asBinder() != null) { if (mRemote.asBinder() != null) {
mRemote.asBinder().linkToDeath(remoteDied, 0 /* flags */); 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); mRemote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Transitions.TAG, "Error running remote transition.", e); Log.e(Transitions.TAG, "Error running remote transition.", e);

View File

@@ -18,6 +18,7 @@ package com.android.wm.shell.transition;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.ArrayMap; import android.util.ArrayMap;
@@ -130,6 +131,13 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
}; };
try { try {
handleDeath(remote.asBinder(), finishCallback); 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); remote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Transitions.TAG, "Error running remote transition.", e); Log.e(Transitions.TAG, "Error running remote transition.", e);

View File

@@ -26,6 +26,7 @@ import static android.view.WindowManager.TransitionOldType;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER; import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.IApplicationThread;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.ArrayMap; import android.util.ArrayMap;
@@ -51,10 +52,10 @@ public class RemoteAnimationAdapterCompat {
private final RemoteTransitionCompat mRemoteTransition; private final RemoteTransitionCompat mRemoteTransition;
public RemoteAnimationAdapterCompat(RemoteAnimationRunnerCompat runner, long duration, public RemoteAnimationAdapterCompat(RemoteAnimationRunnerCompat runner, long duration,
long statusBarTransitionDelay) { long statusBarTransitionDelay, IApplicationThread appThread) {
mWrapped = new RemoteAnimationAdapter(wrapRemoteAnimationRunner(runner), duration, mWrapped = new RemoteAnimationAdapter(wrapRemoteAnimationRunner(runner), duration,
statusBarTransitionDelay); statusBarTransitionDelay);
mRemoteTransition = buildRemoteTransition(runner); mRemoteTransition = buildRemoteTransition(runner, appThread);
} }
RemoteAnimationAdapter getWrapped() { 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. */ /** 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( return new RemoteTransitionCompat(
new RemoteTransition(wrapRemoteTransition(runner))); new RemoteTransition(wrapRemoteTransition(runner), appThread));
} }
public RemoteTransitionCompat getRemoteTransition() { public RemoteTransitionCompat getRemoteTransition() {

View File

@@ -30,6 +30,7 @@ import android.annotation.Nullable;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.ActivityTaskManager; import android.app.ActivityTaskManager;
import android.app.IApplicationThread;
import android.content.ComponentName; import android.content.ComponentName;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.IBinder; import android.os.IBinder;
@@ -72,7 +73,7 @@ public class RemoteTransitionCompat implements Parcelable {
} }
public RemoteTransitionCompat(@NonNull RemoteTransitionRunner runner, public RemoteTransitionCompat(@NonNull RemoteTransitionRunner runner,
@NonNull Executor executor) { @NonNull Executor executor, @Nullable IApplicationThread appThread) {
IRemoteTransition remote = new IRemoteTransition.Stub() { IRemoteTransition remote = new IRemoteTransition.Stub() {
@Override @Override
public void startAnimation(IBinder transition, TransitionInfo info, public void startAnimation(IBinder transition, TransitionInfo info,
@@ -103,12 +104,12 @@ public class RemoteTransitionCompat implements Parcelable {
finishAdapter)); finishAdapter));
} }
}; };
mTransition = new RemoteTransition(remote); mTransition = new RemoteTransition(remote, appThread);
} }
/** Constructor specifically for recents animation */ /** Constructor specifically for recents animation */
public RemoteTransitionCompat(RecentsAnimationListener recents, public RemoteTransitionCompat(RecentsAnimationListener recents,
RecentsAnimationControllerCompat controller) { RecentsAnimationControllerCompat controller, IApplicationThread appThread) {
IRemoteTransition remote = new IRemoteTransition.Stub() { IRemoteTransition remote = new IRemoteTransition.Stub() {
final RecentsControllerWrap mRecentsSession = new RecentsControllerWrap(); final RecentsControllerWrap mRecentsSession = new RecentsControllerWrap();
IBinder mToken = null; IBinder mToken = null;
@@ -168,7 +169,7 @@ public class RemoteTransitionCompat implements Parcelable {
} }
} }
}; };
mTransition = new RemoteTransition(remote); mTransition = new RemoteTransition(remote, appThread);
} }
/** Adds a filter check that restricts this remote transition to home open transitions. */ /** Adds a filter check that restricts this remote transition to home open transitions. */

View File

@@ -238,7 +238,7 @@ public class KeyguardService extends Service {
TransitionFilter f = new TransitionFilter(); TransitionFilter f = new TransitionFilter();
f.mFlags = TRANSIT_FLAG_KEYGUARD_GOING_AWAY; f.mFlags = TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
shellTransitions.registerRemote(f, shellTransitions.registerRemote(f,
new RemoteTransition(wrap(mExitAnimationRunner))); new RemoteTransition(wrap(mExitAnimationRunner), getIApplicationThread()));
} }
if (sEnableRemoteKeyguardOccludeAnimation) { if (sEnableRemoteKeyguardOccludeAnimation) {
Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_(UN)OCCLUDE"); Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_(UN)OCCLUDE");
@@ -257,7 +257,8 @@ public class KeyguardService extends Service {
f.mRequirements[1].mMustBeIndependent = false; f.mRequirements[1].mMustBeIndependent = false;
f.mRequirements[1].mFlags = FLAG_OCCLUDES_KEYGUARD; f.mRequirements[1].mFlags = FLAG_OCCLUDES_KEYGUARD;
f.mRequirements[1].mModes = new int[]{TRANSIT_CLOSE, TRANSIT_TO_BACK}; f.mRequirements[1].mModes = new int[]{TRANSIT_CLOSE, TRANSIT_TO_BACK};
shellTransitions.registerRemote(f, new RemoteTransition(mOccludeAnimation)); shellTransitions.registerRemote(f,
new RemoteTransition(mOccludeAnimation, getIApplicationThread()));
// Now register for un-occlude. // Now register for un-occlude.
f = new TransitionFilter(); f = new TransitionFilter();
@@ -277,7 +278,8 @@ public class KeyguardService extends Service {
f.mRequirements[0].mMustBeIndependent = false; f.mRequirements[0].mMustBeIndependent = false;
f.mRequirements[0].mFlags = FLAG_OCCLUDES_KEYGUARD; f.mRequirements[0].mFlags = FLAG_OCCLUDES_KEYGUARD;
f.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT}; f.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT};
shellTransitions.registerRemote(f, new RemoteTransition(mUnoccludeAnimation)); shellTransitions.registerRemote(f,
new RemoteTransition(mUnoccludeAnimation, getIApplicationThread()));
} }
} else { } else {
RemoteAnimationDefinition definition = new RemoteAnimationDefinition(); RemoteAnimationDefinition definition = new RemoteAnimationDefinition();

View File

@@ -27,6 +27,7 @@ import static android.view.WindowManager.TRANSIT_OPEN;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.IApplicationThread;
import android.os.IBinder; import android.os.IBinder;
import android.os.IRemoteCallback; import android.os.IRemoteCallback;
import android.os.RemoteException; import android.os.RemoteException;
@@ -68,6 +69,7 @@ class TransitionController {
private ITransitionPlayer mTransitionPlayer; private ITransitionPlayer mTransitionPlayer;
final TransitionMetricsReporter mTransitionMetricsReporter = new TransitionMetricsReporter(); final TransitionMetricsReporter mTransitionMetricsReporter = new TransitionMetricsReporter();
private IApplicationThread mTransitionPlayerThread;
final ActivityTaskManagerService mAtm; final ActivityTaskManagerService mAtm;
final TaskSnapshotController mTaskSnapshotController; final TaskSnapshotController mTaskSnapshotController;
@@ -136,7 +138,8 @@ class TransitionController {
return mCollectingTransition; return mCollectingTransition;
} }
void registerTransitionPlayer(@Nullable ITransitionPlayer player) { void registerTransitionPlayer(@Nullable ITransitionPlayer player,
@Nullable IApplicationThread appThread) {
try { try {
// Note: asBinder() can be null if player is same process (likely in a test). // Note: asBinder() can be null if player is same process (likely in a test).
if (mTransitionPlayer != null) { if (mTransitionPlayer != null) {
@@ -149,6 +152,7 @@ class TransitionController {
player.asBinder().linkToDeath(mTransitionPlayerDeath, 0); player.asBinder().linkToDeath(mTransitionPlayerDeath, 0);
} }
mTransitionPlayer = player; mTransitionPlayer = player;
mTransitionPlayerThread = appThread;
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException("Unable to set transition player"); throw new RuntimeException("Unable to set transition player");
} }
@@ -362,6 +366,9 @@ class TransitionController {
} }
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Finish Transition: %s", record); ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Finish Transition: %s", record);
mPlayingTransitions.remove(record); mPlayingTransitions.remove(record);
if (mPlayingTransitions.isEmpty()) {
setAnimationRunning(false /* running */);
}
record.finishTransition(); record.finishTransition();
mRunningLock.doNotifyLocked(); mRunningLock.doNotifyLocked();
} }
@@ -371,9 +378,22 @@ class TransitionController {
throw new IllegalStateException("Trying to move non-collecting transition to playing"); throw new IllegalStateException("Trying to move non-collecting transition to playing");
} }
mCollectingTransition = null; mCollectingTransition = null;
if (mPlayingTransitions.isEmpty()) {
setAnimationRunning(true /* running */);
}
mPlayingTransitions.add(transition); mPlayingTransitions.add(transition);
} }
private void setAnimationRunning(boolean running) {
if (mTransitionPlayerThread == null) return;
final WindowProcessController wpc = mAtm.getProcessController(mTransitionPlayerThread);
if (wpc == null) {
Slog.w(TAG, "Unable to find process for player thread=" + mTransitionPlayerThread);
return;
}
wpc.setRunningRemoteAnimation(running);
}
void abort(Transition transition) { void abort(Transition transition) {
if (transition != mCollectingTransition) { if (transition != mCollectingTransition) {
throw new IllegalStateException("Too late to abort."); throw new IllegalStateException("Too late to abort.");

View File

@@ -45,6 +45,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.ActivityOptions; import android.app.ActivityOptions;
import android.app.IApplicationThread;
import android.app.WindowConfiguration; import android.app.WindowConfiguration;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
@@ -1031,10 +1032,18 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
@Override @Override
public void registerTransitionPlayer(ITransitionPlayer player) { public void registerTransitionPlayer(ITransitionPlayer player) {
enforceTaskPermission("registerTransitionPlayer()"); enforceTaskPermission("registerTransitionPlayer()");
final int callerPid = Binder.getCallingPid();
final int callerUid = Binder.getCallingUid();
final long ident = Binder.clearCallingIdentity(); final long ident = Binder.clearCallingIdentity();
try { try {
synchronized (mGlobalLock) { synchronized (mGlobalLock) {
mTransitionController.registerTransitionPlayer(player); final WindowProcessController wpc =
mService.getProcessController(callerPid, callerUid);
IApplicationThread appThread = null;
if (wpc != null) {
appThread = wpc.getThread();
}
mTransitionController.registerTransitionPlayer(player, appThread);
} }
} finally { } finally {
Binder.restoreCallingIdentity(ident); Binder.restoreCallingIdentity(ident);

View File

@@ -473,7 +473,7 @@ public class TransitionTests extends WindowTestsBase {
final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class); final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class);
final TransitionController controller = new TransitionController(mAtm, snapshotController); final TransitionController controller = new TransitionController(mAtm, snapshotController);
final ITransitionPlayer player = new ITransitionPlayer.Default(); final ITransitionPlayer player = new ITransitionPlayer.Default();
controller.registerTransitionPlayer(player); controller.registerTransitionPlayer(player, null /* appThread */);
ITaskOrganizer mockOrg = mock(ITaskOrganizer.class); ITaskOrganizer mockOrg = mock(ITaskOrganizer.class);
final Transition openTransition = controller.createTransition(TRANSIT_OPEN); final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
@@ -539,7 +539,7 @@ public class TransitionTests extends WindowTestsBase {
final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class); final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class);
final TransitionController controller = new TransitionController(mAtm, snapshotController); final TransitionController controller = new TransitionController(mAtm, snapshotController);
final ITransitionPlayer player = new ITransitionPlayer.Default(); final ITransitionPlayer player = new ITransitionPlayer.Default();
controller.registerTransitionPlayer(player); controller.registerTransitionPlayer(player, null /* appThread */);
ITaskOrganizer mockOrg = mock(ITaskOrganizer.class); ITaskOrganizer mockOrg = mock(ITaskOrganizer.class);
final Transition openTransition = controller.createTransition(TRANSIT_OPEN); final Transition openTransition = controller.createTransition(TRANSIT_OPEN);

View File

@@ -316,7 +316,8 @@ public class WallpaperControllerTests extends WindowTestsBase {
final IBinder mockBinder = mock(IBinder.class); final IBinder mockBinder = mock(IBinder.class);
final ITransitionPlayer mockPlayer = mock(ITransitionPlayer.class); final ITransitionPlayer mockPlayer = mock(ITransitionPlayer.class);
doReturn(mockBinder).when(mockPlayer).asBinder(); doReturn(mockBinder).when(mockPlayer).asBinder();
mWm.mAtmService.getTransitionController().registerTransitionPlayer(mockPlayer); mWm.mAtmService.getTransitionController().registerTransitionPlayer(mockPlayer,
null /* appThread */);
Transition transit = Transition transit =
mWm.mAtmService.getTransitionController().createTransition(TRANSIT_OPEN); mWm.mAtmService.getTransitionController().createTransition(TRANSIT_OPEN);

View File

@@ -802,7 +802,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
TestTransitionPlayer registerTestTransitionPlayer() { TestTransitionPlayer registerTestTransitionPlayer() {
final TestTransitionPlayer testPlayer = new TestTransitionPlayer( final TestTransitionPlayer testPlayer = new TestTransitionPlayer(
mAtm.getTransitionController(), mAtm.mWindowOrganizerController); mAtm.getTransitionController(), mAtm.mWindowOrganizerController);
testPlayer.mController.registerTransitionPlayer(testPlayer); testPlayer.mController.registerTransitionPlayer(testPlayer, null /* appThread */);
return testPlayer; return testPlayer;
} }