diff options
9 files changed, 41 insertions, 34 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 460de01a7d1d..78bf9104ae70 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4916,7 +4916,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final ActivityLifecycleItem lifecycleItem = getLifecycleItemForCurrentStateForResult(); try { if (lifecycleItem != null) { - mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems( + mAtmService.getLifecycleManager().scheduleTransactionItems( app.getThread(), activityResultItem, lifecycleItem); } else { Slog.w(TAG, "Unable to get the lifecycle item for state " + mState @@ -9628,7 +9628,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } else { lifecycleItem = new PauseActivityItem(token); } - mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems( + mAtmService.getLifecycleManager().scheduleTransactionItems( app.getThread(), callbackItem, lifecycleItem); startRelaunching(); // Note: don't need to call pauseIfSleepingLocked() here, because the caller will only diff --git a/services/core/java/com/android/server/wm/ActivityRefresher.java b/services/core/java/com/android/server/wm/ActivityRefresher.java index 5243a1069bed..ed8b6890b2d3 100644 --- a/services/core/java/com/android/server/wm/ActivityRefresher.java +++ b/services/core/java/com/android/server/wm/ActivityRefresher.java @@ -89,7 +89,7 @@ class ActivityRefresher { final ResumeActivityItem resumeActivityItem = new ResumeActivityItem( activity.token, /* isForward */ false, /* shouldSendCompatFakeFocus */ false); try { - activity.mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems( + activity.mAtmService.getLifecycleManager().scheduleTransactionItems( activity.app.getThread(), refreshCallbackItem, resumeActivityItem); mHandler.postDelayed(() -> { synchronized (mWmService.mGlobalLock) { diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 4f71719006f5..0cf8ac995741 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -964,11 +964,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { // transaction. mService.getLifecycleManager().dispatchPendingTransaction(proc.getThread()); } - mService.getLifecycleManager().scheduleTransactionAndLifecycleItems( - proc.getThread(), launchActivityItem, lifecycleItem, + mService.getLifecycleManager().scheduleTransactionItems( + proc.getThread(), // Immediately dispatch the transaction, so that if it fails, the server can // restart the process and retry now. - true /* shouldDispatchImmediately */); + true /* shouldDispatchImmediately */, + launchActivityItem, lifecycleItem); if (procConfig.seq > mRootWindowContainer.getConfiguration().seq) { // If the seq is increased, there should be something changed (e.g. registered diff --git a/services/core/java/com/android/server/wm/ClientLifecycleManager.java b/services/core/java/com/android/server/wm/ClientLifecycleManager.java index 0acc6610a218..d291d99f2a7a 100644 --- a/services/core/java/com/android/server/wm/ClientLifecycleManager.java +++ b/services/core/java/com/android/server/wm/ClientLifecycleManager.java @@ -19,7 +19,6 @@ package com.android.server.wm; import android.annotation.NonNull; import android.app.IApplicationThread; import android.app.compat.CompatChanges; -import android.app.servertransaction.ActivityLifecycleItem; import android.app.servertransaction.ClientTransaction; import android.app.servertransaction.ClientTransactionItem; import android.app.servertransaction.LaunchActivityItem; @@ -97,31 +96,34 @@ class ClientLifecycleManager { } /** - * Schedules a single transaction item, either a callback or a lifecycle request, delivery to - * client application. + * Schedules a transaction with the given item, delivery to client application. + * * @throws RemoteException * @see ClientTransactionItem */ void scheduleTransactionItem(@NonNull IApplicationThread client, - @NonNull ClientTransactionItem transactionItem) throws RemoteException { + @NonNull ClientTransactionItem item) throws RemoteException { // Wait until RootWindowContainer#performSurfacePlacementNoTrace to dispatch all pending // transactions at once. final ClientTransaction clientTransaction = getOrCreatePendingTransaction(client); - clientTransaction.addTransactionItem(transactionItem); + clientTransaction.addTransactionItem(item); - onClientTransactionItemScheduled(clientTransaction, - false /* shouldDispatchImmediately */); + onClientTransactionItemScheduled(clientTransaction, false /* shouldDispatchImmediately */); } - void scheduleTransactionAndLifecycleItems(@NonNull IApplicationThread client, - @NonNull ClientTransactionItem transactionItem, - @NonNull ActivityLifecycleItem lifecycleItem) throws RemoteException { - scheduleTransactionAndLifecycleItems(client, transactionItem, lifecycleItem, - false /* shouldDispatchImmediately */); + /** + * Schedules a transaction with the given items, delivery to client application. + * + * @throws RemoteException + * @see ClientTransactionItem + */ + void scheduleTransactionItems(@NonNull IApplicationThread client, + @NonNull ClientTransactionItem... items) throws RemoteException { + scheduleTransactionItems(client, false /* shouldDispatchImmediately */, items); } /** - * Schedules a single transaction item with a lifecycle request, delivery to client application. + * Schedules a transaction with the given items, delivery to client application. * * @param shouldDispatchImmediately whether or not to dispatch the transaction immediately. This * should only be {@code true} when it is important to know the @@ -133,15 +135,17 @@ class ClientLifecycleManager { * @throws RemoteException * @see ClientTransactionItem */ - void scheduleTransactionAndLifecycleItems(@NonNull IApplicationThread client, - @NonNull ClientTransactionItem transactionItem, - @NonNull ActivityLifecycleItem lifecycleItem, - boolean shouldDispatchImmediately) throws RemoteException { + void scheduleTransactionItems(@NonNull IApplicationThread client, + boolean shouldDispatchImmediately, + @NonNull ClientTransactionItem... items) throws RemoteException { // Wait until RootWindowContainer#performSurfacePlacementNoTrace to dispatch all pending // transactions at once. final ClientTransaction clientTransaction = getOrCreatePendingTransaction(client); - clientTransaction.addTransactionItem(transactionItem); - clientTransaction.addTransactionItem(lifecycleItem); + + final int size = items.length; + for (int i = 0; i < size; i++) { + clientTransaction.addTransactionItem(items[i]); + } onClientTransactionItemScheduled(clientTransaction, shouldDispatchImmediately); } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java index cb17f35f64d7..63dafcd0b5a8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java @@ -197,7 +197,7 @@ public class ActivityRefresherTests extends WindowTestsBase { /* isForward */ false, /* shouldSendCompatFakeFocus */ false); verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0)) - .scheduleTransactionAndLifecycleItems(mActivity.app.getThread(), + .scheduleTransactionItems(mActivity.app.getThread(), refreshCallbackItem, resumeActivityItem); } diff --git a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java index a07fd235d14f..e447565a55bd 100644 --- a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java @@ -453,7 +453,7 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { /* isForward */ false, /* shouldSendCompatFakeFocus */ false); verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0)) - .scheduleTransactionAndLifecycleItems(mActivity.app.getThread(), + .scheduleTransactionItems(mActivity.app.getThread(), refreshCallbackItem, resumeActivityItem); } diff --git a/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java b/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java index 3ddf8da18d16..02ad9dbfda8e 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java @@ -123,7 +123,7 @@ public class ClientLifecycleManagerTests extends SystemServiceTestsBase { } @Test - public void testScheduleTransactionItemUnlocked() throws RemoteException { + public void testScheduleTransactionItemNow() throws RemoteException { // Use non binder client to get non-recycled ClientTransaction. mLifecycleManager.scheduleTransactionItemNow(mNonBinderClient, mTransactionItem); @@ -133,12 +133,12 @@ public class ClientLifecycleManagerTests extends SystemServiceTestsBase { } @Test - public void testScheduleTransactionAndLifecycleItems() throws RemoteException { + public void testScheduleTransactionItems() throws RemoteException { spyOn(mWms.mWindowPlacerLocked); doReturn(true).when(mWms.mWindowPlacerLocked).isTraversalScheduled(); // Use non binder client to get non-recycled ClientTransaction. - mLifecycleManager.scheduleTransactionAndLifecycleItems(mNonBinderClient, mTransactionItem, + mLifecycleManager.scheduleTransactionItems(mNonBinderClient, mTransactionItem, mLifecycleItem); assertEquals(1, mLifecycleManager.mPendingTransactions.size()); @@ -155,14 +155,15 @@ public class ClientLifecycleManagerTests extends SystemServiceTestsBase { } @Test - public void testScheduleTransactionAndLifecycleItems_shouldDispatchImmediately() + public void testScheduleTransactionItems_shouldDispatchImmediately() throws RemoteException { spyOn(mWms.mWindowPlacerLocked); doReturn(true).when(mWms.mWindowPlacerLocked).isTraversalScheduled(); // Use non binder client to get non-recycled ClientTransaction. - mLifecycleManager.scheduleTransactionAndLifecycleItems(mNonBinderClient, mTransactionItem, - mLifecycleItem, true /* shouldDispatchImmediately */); + mLifecycleManager.scheduleTransactionItems(mNonBinderClient, + true /* shouldDispatchImmediately */, + mTransactionItem, mLifecycleItem); verify(mLifecycleManager).scheduleTransaction(any()); assertTrue(mLifecycleManager.mPendingTransactions.isEmpty()); diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java index 35c9e3fb3aaf..9055353162a9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java @@ -614,7 +614,7 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase { /* isForward */ false, /* shouldSendCompatFakeFocus */ false); verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0)) - .scheduleTransactionAndLifecycleItems(mActivity.app.getThread(), + .scheduleTransactionItems(mActivity.app.getThread(), refreshCallbackItem, resumeActivityItem); } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java index 9bad2ec2ca2a..1dfb20a41816 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java @@ -309,6 +309,7 @@ public class WindowProcessControllerTests extends WindowTestsBase { newConfig.densityDpi += 100; mWpc.onConfigurationChanged(newConfig); verify(mClientLifecycleManager, never()).scheduleTransactionItem(eq(thread), any()); + verify(mClientLifecycleManager, never()).scheduleTransactionItems(eq(thread), any()); verify(mClientLifecycleManager, never()).scheduleTransactionItemNow(eq(thread), any()); // Cached -> non-cached will send the previous deferred config immediately. |