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

Commit 4f36c959 authored by Eric Lin's avatar Eric Lin
Browse files

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
parent 8f757990
Loading
Loading
Loading
Loading
+10 −29
Original line number Diff line number Diff line
@@ -29,13 +29,19 @@ import android.os.Trace;

/**
 * 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 @@ public class StartActivityItem extends ActivityLifecycleItem {
        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);
+5 −27
Original line number Diff line number Diff line
@@ -27,11 +27,14 @@ import android.os.Trace;

/**
 * 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 @@ public class StopActivityItem extends ActivityLifecycleItem {
        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);
    }
+1 −1
Original line number Diff line number Diff line
@@ -201,7 +201,7 @@ public class TransactionExecutorHelper {
                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 */,
+1 −2
Original line number Diff line number Diff line
@@ -1007,8 +1007,7 @@ public class ActivityThreadTest {

    @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);
+0 −12
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import static android.app.servertransaction.TestUtils.resultInfoList;
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 @@ public class ObjectPoolTests {
        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();
Loading