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

Commit 59165198 authored by Eric Lin's avatar Eric Lin
Browse files

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
parent 4f36c959
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4614,7 +4614,7 @@ public final class ActivityThread extends ClientTransactionHandler

    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);
+0 −6
Original line number Diff line number Diff line
@@ -58,12 +58,6 @@ public abstract class ActivityLifecycleItem extends ActivityTransactionItem {
        super(activityToken);
    }

    // TODO(b/311089192): Remove this method once no subclasses obtain from the object pool.
    @Deprecated
    ActivityLifecycleItem() {
        super();
    }

    // Parcelable implementation

    /** Reads from Parcel. */
+20 −45
Original line number Diff line number Diff line
@@ -29,16 +29,29 @@ import android.os.Trace;

/**
 * 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 @@ public class PauseActivityItem extends ActivityLifecycleItem {
        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 @@ public class PauseActivityItem extends ActivityLifecycleItem {
        dest.writeBoolean(mAutoEnteringPip);
    }

    /** Read from Parcel. */
    /** Reads from Parcel. */
    private PauseActivityItem(@NonNull Parcel in) {
        super(in);
        mFinished = in.readBoolean();
+1 −1
Original line number Diff line number Diff line
@@ -198,7 +198,7 @@ public class TransactionExecutorHelper {
                // 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);
+0 −5
Original line number Diff line number Diff line
@@ -154,11 +154,6 @@ public class ObjectPoolTests {
        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();
Loading