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

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

Remove DestroyActivityItem object pooling (4/n).

Remove the use of ObjectPool in the creation and management of
DestroyActivityItem 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:ClientTransactionItemTest
Test: atest FrameworksCoreTests:ObjectPoolTests
Test: atest FrameworksCoreTests:TransactionExecutorTests
Test: atest FrameworksCoreTests:TransactionParcelTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: I2045956a4a3bb52fe9db987f5d1c565793081872
parent 26aa2cc4
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.app.servertransaction;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.os.IBinder;
import android.os.Parcel;

import java.lang.annotation.Retention;
@@ -25,6 +26,7 @@ import java.lang.annotation.RetentionPolicy;

/**
 * Request for lifecycle state that an activity should reach.
 *
 * @hide
 */
public abstract class ActivityLifecycleItem extends ActivityTransactionItem {
@@ -52,8 +54,19 @@ public abstract class ActivityLifecycleItem extends ActivityTransactionItem {
    public static final int ON_DESTROY = 6;
    public static final int ON_RESTART = 7;

    ActivityLifecycleItem() {}
    ActivityLifecycleItem(@NonNull IBinder activityToken) {
        super(activityToken);
    }

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

    // Parcelable implementation

    /** Reads from Parcel. */
    ActivityLifecycleItem(@NonNull Parcel in) {
        super(in);
    }
+26 −14
Original line number Diff line number Diff line
@@ -49,9 +49,29 @@ import java.util.Objects;
public abstract class ActivityTransactionItem extends ClientTransactionItem {

    /** Target client activity. */
    // TODO(b/311089192): Mark this with @NonNull and final.
    private IBinder mActivityToken;

    ActivityTransactionItem() {}
    public ActivityTransactionItem(@NonNull IBinder activityToken) {
        mActivityToken = requireNonNull(activityToken);
    }

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

    /**
     * Sets the activity token after the instance is obtained from the object pool.
     *
     * @deprecated This method is deprecated. The object pool is no longer used.
     *     Instead, directly create a new object with the activity token.
     * TODO(b/311089192): Remove this method once no subclasses obtain from the object pool.
     */
    @Deprecated
    void setActivityToken(@NonNull IBinder activityToken) {
        mActivityToken = requireNonNull(activityToken);
    }

    @Override
    public final void execute(@NonNull ClientTransactionHandler client,
@@ -94,26 +114,18 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem {
        return mActivityToken;
    }

    void setActivityToken(@NonNull IBinder activityToken) {
        mActivityToken = requireNonNull(activityToken);
    }

    // To be overridden

    ActivityTransactionItem(@NonNull Parcel in) {
        mActivityToken = in.readStrongBinder();
    }
    // Parcelable implementation

    /** Writes to Parcel. */
    @CallSuper
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeStrongBinder(mActivityToken);
    }

    @CallSuper
    @Override
    public void recycle() {
        mActivityToken = null;
    /** Reads from Parcel. */
    ActivityTransactionItem(@NonNull Parcel in) {
        this(in.readStrongBinder());
    }

    @Override
+9 −27
Original line number Diff line number Diff line
@@ -28,11 +28,17 @@ import android.os.Trace;

/**
 * Request to destroy an activity.
 *
 * @hide
 */
public class DestroyActivityItem extends ActivityLifecycleItem {

    private boolean mFinished;
    private final boolean mFinished;

    public DestroyActivityItem(@NonNull IBinder activityToken, boolean finished) {
        super(activityToken);
        mFinished = finished;
    }

    @Override
    public void preExecute(@NonNull ClientTransactionHandler client) {
@@ -60,40 +66,16 @@ public class DestroyActivityItem extends ActivityLifecycleItem {
        return ON_DESTROY;
    }

    // ObjectPoolItem implementation

    private DestroyActivityItem() {}

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static DestroyActivityItem obtain(@NonNull IBinder activityToken, boolean finished) {
        DestroyActivityItem instance = ObjectPool.obtain(DestroyActivityItem.class);
        if (instance == null) {
            instance = new DestroyActivityItem();
        }
        instance.setActivityToken(activityToken);
        instance.mFinished = finished;

        return instance;
    }

    @Override
    public void recycle() {
        super.recycle();
        mFinished = 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);
        dest.writeBoolean(mFinished);
    }

    /** Read from Parcel. */
    /** Reads from Parcel. */
    private DestroyActivityItem(@NonNull Parcel in) {
        super(in);
        mFinished = in.readBoolean();
+6 −6
Original line number Diff line number Diff line
@@ -102,8 +102,8 @@ public class ClientTransactionItemTest {

    @Test
    public void testDestroyActivityItem_preExecute() {
        final DestroyActivityItem item = DestroyActivityItem
                .obtain(mActivityToken, false /* finished */);
        final DestroyActivityItem item =
                new DestroyActivityItem(mActivityToken, false /* finished */);

        item.preExecute(mHandler);

@@ -113,8 +113,8 @@ public class ClientTransactionItemTest {

    @Test
    public void testDestroyActivityItem_postExecute() {
        final DestroyActivityItem item = DestroyActivityItem
                .obtain(mActivityToken, false /* finished */);
        final DestroyActivityItem item =
                new DestroyActivityItem(mActivityToken, false /* finished */);
        item.preExecute(mHandler);

        item.postExecute(mHandler, mPendingActions);
@@ -124,8 +124,8 @@ public class ClientTransactionItemTest {

    @Test
    public void testDestroyActivityItem_execute() {
        final DestroyActivityItem item = DestroyActivityItem
                .obtain(mActivityToken, false /* finished */);
        final DestroyActivityItem item =
                new DestroyActivityItem(mActivityToken, false /* finished */);

        item.execute(mHandler, mActivityClientRecord, mPendingActions);

+0 −5
Original line number Diff line number Diff line
@@ -89,11 +89,6 @@ public class ObjectPoolTests {
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
    }

    @Test
    public void testRecycleDestroyActivityItem() {
        testRecycle(() -> DestroyActivityItem.obtain(mActivityToken, true));
    }

    @Test
    public void testRecycleLaunchActivityItem() {
        final IBinder activityToken = new Binder();
Loading