Remove PauseActivityItem object pooling (7/n).

Remove the use of ObjectPool in the creation and management of
PauseActivityItem object. Instead of being obtained from the pool,
these objects are now directly instantiated, simplifying their handling
and aligning with the broader removal of the object pooling mechanism.

Bug: 311089192
Test: atest FrameworksCoreTests:ObjectPoolTests
Test: atest FrameworksCoreTests:TransactionParcelTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: I7a49fa4e28c36d80ca146e46f627e1e29929c969
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 8696e0f..75f2c4b 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4614,7 +4614,7 @@
 
     private void schedulePauseWithUserLeavingHint(ActivityClientRecord r) {
         final ClientTransaction transaction = new ClientTransaction(mAppThread);
-        final PauseActivityItem pauseActivityItem = PauseActivityItem.obtain(r.token,
+        final PauseActivityItem pauseActivityItem = new PauseActivityItem(r.token,
                 r.activity.isFinishing(), /* userLeaving */ true,
                 /* dontReport */ false, /* autoEnteringPip */ false);
         transaction.addTransactionItem(pauseActivityItem);
diff --git a/core/java/android/app/servertransaction/ActivityLifecycleItem.java b/core/java/android/app/servertransaction/ActivityLifecycleItem.java
index d07ad46..778f134 100644
--- a/core/java/android/app/servertransaction/ActivityLifecycleItem.java
+++ b/core/java/android/app/servertransaction/ActivityLifecycleItem.java
@@ -58,12 +58,6 @@
         super(activityToken);
     }
 
-    // TODO(b/311089192): Remove this method once no subclasses obtain from the object pool.
-    @Deprecated
-    ActivityLifecycleItem() {
-        super();
-    }
-
     // Parcelable implementation
 
     /** Reads from Parcel. */
diff --git a/core/java/android/app/servertransaction/PauseActivityItem.java b/core/java/android/app/servertransaction/PauseActivityItem.java
index d230284..09fc51b 100644
--- a/core/java/android/app/servertransaction/PauseActivityItem.java
+++ b/core/java/android/app/servertransaction/PauseActivityItem.java
@@ -29,16 +29,29 @@
 
 /**
  * Request to move an activity to paused state.
+ *
  * @hide
  */
 public class PauseActivityItem extends ActivityLifecycleItem {
 
-    private static final String TAG = "PauseActivityItem";
+    private final boolean mFinished;
+    private final boolean mUserLeaving;
+    private final boolean mDontReport;
+    private final boolean mAutoEnteringPip;
 
-    private boolean mFinished;
-    private boolean mUserLeaving;
-    private boolean mDontReport;
-    private boolean mAutoEnteringPip;
+    public PauseActivityItem(@NonNull IBinder activityToken) {
+        this(activityToken, false /* finished */, false /* userLeaving */,
+                true /* dontReport */, false /* autoEnteringPip*/);
+    }
+
+    public PauseActivityItem(@NonNull IBinder activityToken, boolean finished,
+            boolean userLeaving, boolean dontReport, boolean autoEnteringPip) {
+        super(activityToken);
+        mFinished = finished;
+        mUserLeaving = userLeaving;
+        mDontReport = dontReport;
+        mAutoEnteringPip = autoEnteringPip;
+    }
 
     @Override
     public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
@@ -64,47 +77,9 @@
         ActivityClient.getInstance().activityPaused(getActivityToken());
     }
 
-    // ObjectPoolItem implementation
-
-    private PauseActivityItem() {}
-
-    /** Obtain an instance initialized with provided params. */
-    @NonNull
-    public static PauseActivityItem obtain(@NonNull IBinder activityToken, boolean finished,
-            boolean userLeaving, boolean dontReport, boolean autoEnteringPip) {
-        PauseActivityItem instance = ObjectPool.obtain(PauseActivityItem.class);
-        if (instance == null) {
-            instance = new PauseActivityItem();
-        }
-        instance.setActivityToken(activityToken);
-        instance.mFinished = finished;
-        instance.mUserLeaving = userLeaving;
-        instance.mDontReport = dontReport;
-        instance.mAutoEnteringPip = autoEnteringPip;
-
-        return instance;
-    }
-
-    /** Obtain an instance initialized with default params. */
-    @NonNull
-    public static PauseActivityItem obtain(@NonNull IBinder activityToken) {
-        return obtain(activityToken, false /* finished */, false /* userLeaving */,
-                true /* dontReport */, false /* autoEnteringPip*/);
-    }
-
-    @Override
-    public void recycle() {
-        super.recycle();
-        mFinished = false;
-        mUserLeaving = false;
-        mDontReport = false;
-        mAutoEnteringPip = false;
-        ObjectPool.recycle(this);
-    }
-
     // Parcelable implementation
 
-    /** Write to Parcel. */
+    /** Writes to Parcel. */
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         super.writeToParcel(dest, flags);
@@ -114,7 +89,7 @@
         dest.writeBoolean(mAutoEnteringPip);
     }
 
-    /** Read from Parcel. */
+    /** Reads from Parcel. */
     private PauseActivityItem(@NonNull Parcel in) {
         super(in);
         mFinished = in.readBoolean();
diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
index ea0f4ad..c44ada7 100644
--- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java
+++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
@@ -198,7 +198,7 @@
                 // Fall through to return the PAUSE item to ensure the activity is properly
                 // resumed while relaunching.
             case ON_PAUSE:
-                lifecycleItem = PauseActivityItem.obtain(r.token);
+                lifecycleItem = new PauseActivityItem(r.token);
                 break;
             case ON_STOP:
                 lifecycleItem = new StopActivityItem(r.token);
diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
index 7544bef..f0a2074 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
@@ -154,11 +154,6 @@
         testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false));
     }
 
-    @Test
-    public void testRecyclePauseActivityItemItem() {
-        testRecycle(() -> PauseActivityItem.obtain(mActivityToken, true, true, true, true));
-    }
-
     private void testRecycle(@NonNull Supplier<? extends ObjectPoolItem> obtain) {
         // Reuse the same object after recycle.
         final ObjectPoolItem item = obtain.get();
diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
index c70c04f..7ff91e7 100644
--- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
@@ -235,12 +235,12 @@
     @Test
     public void testPause() {
         // Write to parcel
-        PauseActivityItem item = PauseActivityItem.obtain(mActivityToken, true /* finished */,
+        final PauseActivityItem item = new PauseActivityItem(mActivityToken, true /* finished */,
                 true /* userLeaving */, true /* dontReport */, true /* autoEnteringPip */);
         writeAndPrepareForReading(item);
 
         // Read from parcel and assert
-        PauseActivityItem result = PauseActivityItem.CREATOR.createFromParcel(mParcel);
+        final PauseActivityItem result = PauseActivityItem.CREATOR.createFromParcel(mParcel);
 
         assertEquals(item.hashCode(), result.hashCode());
         assertEquals(item, result);
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 5c10174..f36e381 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -5053,7 +5053,7 @@
                 return new StartActivityItem(token, null);
             case PAUSING:
             case PAUSED:
-                return PauseActivityItem.obtain(token);
+                return new PauseActivityItem(token);
             case STOPPING:
             case STOPPED:
                 return new StopActivityItem(token);
@@ -6344,9 +6344,9 @@
             EventLogTags.writeWmPauseActivity(mUserId, System.identityHashCode(this),
                     shortComponentName, "userLeaving=false", "make-active");
             try {
-                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
-                        PauseActivityItem.obtain(token, finishing, false /* userLeaving */,
-                                false /* dontReport */, mAutoEnteringPip));
+                final PauseActivityItem item = new PauseActivityItem(token, finishing,
+                        false /* userLeaving */, false /* dontReport */, mAutoEnteringPip);
+                mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item);
             } catch (Exception e) {
                 Slog.w(TAG, "Exception thrown sending pause: " + intent.getComponent(), e);
             }
@@ -10000,7 +10000,7 @@
                 lifecycleItem = new ResumeActivityItem(token, isTransitionForward(),
                         shouldSendCompatFakeFocus());
             } else {
-                lifecycleItem = PauseActivityItem.obtain(token);
+                lifecycleItem = new PauseActivityItem(token);
             }
             mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems(
                     app.getThread(), callbackItem, lifecycleItem);
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index b744a2c..bc7ed65 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -945,7 +945,7 @@
                     lifecycleItem = new ResumeActivityItem(r.token, isTransitionForward,
                             r.shouldSendCompatFakeFocus());
                 } else if (r.isVisibleRequested()) {
-                    lifecycleItem = PauseActivityItem.obtain(r.token);
+                    lifecycleItem = new PauseActivityItem(r.token);
                 } else {
                     lifecycleItem = new StopActivityItem(r.token);
                 }
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 5bdab2b..95a6e23 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -1882,9 +1882,9 @@
             EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev),
                     prev.shortComponentName, "userLeaving=" + userLeaving, reason);
 
-            mAtmService.getLifecycleManager().scheduleTransactionItem(prev.app.getThread(),
-                    PauseActivityItem.obtain(prev.token, prev.finishing, userLeaving,
-                            pauseImmediately, autoEnteringPip));
+            final PauseActivityItem item = new PauseActivityItem(prev.token, prev.finishing,
+                    userLeaving, pauseImmediately, autoEnteringPip);
+            mAtmService.getLifecycleManager().scheduleTransactionItem(prev.app.getThread(), item);
         } catch (Exception e) {
             // Ignore exception, if process died other code will cleanup.
             Slog.w(TAG, "Exception thrown during pause", e);