Remove Start/StopActivityItem obj pooling (6/n).

Remove the use of ObjectPool in the creation and management of
StartActivityItem and StopActivityItem objects. 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:ActivityThreadTest
Test: atest FrameworksCoreTests:ObjectPoolTests
Test: atest FrameworksCoreTests:TransactionParcelTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: Icc9ec34fbdca82ad3d321bb59acfbaf73434638d
diff --git a/core/java/android/app/servertransaction/StartActivityItem.java b/core/java/android/app/servertransaction/StartActivityItem.java
index a0f93ce..6bae92b 100644
--- a/core/java/android/app/servertransaction/StartActivityItem.java
+++ b/core/java/android/app/servertransaction/StartActivityItem.java
@@ -29,13 +29,19 @@
 
 /**
  * Request to move an activity to started and visible state.
+ *
  * @hide
  */
 public class StartActivityItem extends ActivityLifecycleItem {
 
-    private static final String TAG = "StartActivityItem";
+    @Nullable
+    private final SceneTransitionInfo mSceneTransitionInfo;
 
-    private SceneTransitionInfo mSceneTransitionInfo;
+    public StartActivityItem(@NonNull IBinder activityToken,
+            @Nullable SceneTransitionInfo sceneTransitionInfo) {
+        super(activityToken);
+        mSceneTransitionInfo = sceneTransitionInfo;
+    }
 
     @Override
     public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
@@ -50,41 +56,16 @@
         return ON_START;
     }
 
-    // ObjectPoolItem implementation
-
-    private StartActivityItem() {}
-
-    /** Obtain an instance initialized with provided params. */
-    @NonNull
-    public static StartActivityItem obtain(@NonNull IBinder activityToken,
-            @Nullable SceneTransitionInfo sceneTransitionInfo) {
-        StartActivityItem instance = ObjectPool.obtain(StartActivityItem.class);
-        if (instance == null) {
-            instance = new StartActivityItem();
-        }
-        instance.setActivityToken(activityToken);
-        instance.mSceneTransitionInfo = sceneTransitionInfo;
-
-        return instance;
-    }
-
-    @Override
-    public void recycle() {
-        super.recycle();
-        mSceneTransitionInfo = null;
-        ObjectPool.recycle(this);
-    }
-
     // Parcelable implementation
 
-    /** Write to Parcel. */
+    /** Writes to Parcel. */
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         super.writeToParcel(dest, flags);
         dest.writeTypedObject(mSceneTransitionInfo, flags);
     }
 
-    /** Read from Parcel. */
+    /** Reads from Parcel. */
     private StartActivityItem(@NonNull Parcel in) {
         super(in);
         mSceneTransitionInfo = in.readTypedObject(SceneTransitionInfo.CREATOR);
diff --git a/core/java/android/app/servertransaction/StopActivityItem.java b/core/java/android/app/servertransaction/StopActivityItem.java
index def7b3f..012b82e 100644
--- a/core/java/android/app/servertransaction/StopActivityItem.java
+++ b/core/java/android/app/servertransaction/StopActivityItem.java
@@ -27,11 +27,14 @@
 
 /**
  * Request to move an activity to stopped state.
+ *
  * @hide
  */
 public class StopActivityItem extends ActivityLifecycleItem {
 
-    private static final String TAG = "StopActivityItem";
+    public StopActivityItem(@NonNull IBinder activityToken) {
+        super(activityToken);
+    }
 
     @Override
     public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
@@ -53,34 +56,9 @@
         return ON_STOP;
     }
 
-    // ObjectPoolItem implementation
-
-    private StopActivityItem() {}
-
-    /**
-     * Obtain an instance initialized with provided params.
-     * @param activityToken the activity that stops.
-     */
-    @NonNull
-    public static StopActivityItem obtain(@NonNull IBinder activityToken) {
-        StopActivityItem instance = ObjectPool.obtain(StopActivityItem.class);
-        if (instance == null) {
-            instance = new StopActivityItem();
-        }
-        instance.setActivityToken(activityToken);
-
-        return instance;
-    }
-
-    @Override
-    public void recycle() {
-        super.recycle();
-        ObjectPool.recycle(this);
-    }
-
     // Parcelable implementation
 
-    /** Read from Parcel. */
+    /** Reads from Parcel. */
     private StopActivityItem(@NonNull Parcel in) {
         super(in);
     }
diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
index 8ba9076..ea0f4ad 100644
--- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java
+++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
@@ -201,7 +201,7 @@
                 lifecycleItem = PauseActivityItem.obtain(r.token);
                 break;
             case ON_STOP:
-                lifecycleItem = StopActivityItem.obtain(r.token);
+                lifecycleItem = new StopActivityItem(r.token);
                 break;
             default:
                 lifecycleItem = new ResumeActivityItem(r.token, false /* isForward */,
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index 4f5107a..5ed0d1c 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -1007,8 +1007,7 @@
 
     @NonNull
     private static ClientTransaction newStopTransaction(@NonNull Activity activity) {
-        final StopActivityItem stopStateRequest = StopActivityItem.obtain(
-                activity.getActivityToken());
+        final StopActivityItem stopStateRequest = new StopActivityItem(activity.getActivityToken());
 
         final ClientTransaction transaction = newTransaction(activity);
         transaction.addTransactionItem(stopStateRequest);
diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
index 1817b87..7544bef 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
@@ -24,7 +24,6 @@
 import static org.junit.Assert.assertNotSame;
 
 import android.annotation.NonNull;
-import android.app.ActivityOptions;
 import android.app.servertransaction.TestUtils.LaunchActivityItemBuilder;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
@@ -160,17 +159,6 @@
         testRecycle(() -> PauseActivityItem.obtain(mActivityToken, true, true, true, true));
     }
 
-    @Test
-    public void testRecycleStartActivityItem() {
-        testRecycle(() -> StartActivityItem.obtain(mActivityToken,
-                new ActivityOptions.SceneTransitionInfo()));
-    }
-
-    @Test
-    public void testRecycleStopItem() {
-        testRecycle(() -> StopActivityItem.obtain(mActivityToken));
-    }
-
     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 dde6ab1..c70c04f 100644
--- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
@@ -263,11 +263,11 @@
     @Test
     public void testStop() {
         // Write to parcel
-        StopActivityItem item = StopActivityItem.obtain(mActivityToken);
+        final StopActivityItem item = new StopActivityItem(mActivityToken);
         writeAndPrepareForReading(item);
 
         // Read from parcel and assert
-        StopActivityItem result = StopActivityItem.CREATOR.createFromParcel(mParcel);
+        final StopActivityItem result = StopActivityItem.CREATOR.createFromParcel(mParcel);
 
         assertEquals(item.hashCode(), result.hashCode());
         assertEquals(item, result);
@@ -276,12 +276,12 @@
     @Test
     public void testStart() {
         // Write to parcel
-        StartActivityItem item = StartActivityItem.obtain(mActivityToken,
+        final StartActivityItem item = new StartActivityItem(mActivityToken,
                 new ActivityOptions.SceneTransitionInfo());
         writeAndPrepareForReading(item);
 
         // Read from parcel and assert
-        StartActivityItem result = StartActivityItem.CREATOR.createFromParcel(mParcel);
+        final StartActivityItem result = StartActivityItem.CREATOR.createFromParcel(mParcel);
 
         assertEquals(item.hashCode(), result.hashCode());
         assertEquals(item, result);
@@ -294,7 +294,7 @@
         ActivityConfigurationChangeItem callback2 = ActivityConfigurationChangeItem.obtain(
                 mActivityToken, config(), new ActivityWindowInfo());
 
-        StopActivityItem lifecycleRequest = StopActivityItem.obtain(mActivityToken);
+        final StopActivityItem lifecycleRequest = new StopActivityItem(mActivityToken);
 
         final ClientTransaction transaction = new ClientTransaction();
         transaction.addTransactionItem(callback1);
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index f31280e..5c10174 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -5050,13 +5050,13 @@
     private ActivityLifecycleItem getLifecycleItemForCurrentStateForResult() {
         switch (mState) {
             case STARTED:
-                return StartActivityItem.obtain(token, null);
+                return new StartActivityItem(token, null);
             case PAUSING:
             case PAUSED:
                 return PauseActivityItem.obtain(token);
             case STOPPING:
             case STOPPED:
-                return StopActivityItem.obtain(token);
+                return new StopActivityItem(token);
             default:
                 // Do not send a result immediately if the activity is in state INITIALIZING,
                 // RESTARTING_PROCESS, FINISHING, DESTROYING, or DESTROYED.
@@ -6358,7 +6358,7 @@
 
             try {
                 mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
-                        StartActivityItem.obtain(token, takeSceneTransitionInfo()));
+                        new StartActivityItem(token, takeSceneTransitionInfo()));
             } catch (Exception e) {
                 Slog.w(TAG, "Exception thrown sending start: " + intent.getComponent(), e);
             }
@@ -6655,7 +6655,7 @@
             EventLogTags.writeWmStopActivity(
                     mUserId, System.identityHashCode(this), shortComponentName);
             mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
-                    StopActivityItem.obtain(token));
+                    new StopActivityItem(token));
 
             mAtmService.mH.postDelayed(mStopTimeoutRunnable, STOP_TIMEOUT);
         } catch (Exception e) {
@@ -10092,7 +10092,7 @@
         // {@link ActivityTaskManagerService.activityStopped}).
         try {
             mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
-                    StopActivityItem.obtain(token));
+                    new StopActivityItem(token));
         } catch (RemoteException e) {
             Slog.w(TAG, "Exception thrown during restart " + this, e);
         }
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index 021caaf..b744a2c 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -947,7 +947,7 @@
                 } else if (r.isVisibleRequested()) {
                     lifecycleItem = PauseActivityItem.obtain(r.token);
                 } else {
-                    lifecycleItem = StopActivityItem.obtain(r.token);
+                    lifecycleItem = new StopActivityItem(r.token);
                 }
 
                 // Schedule transaction.