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

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

Remove EnterPip/PipState object pooling (11/n).

Remove the use of ObjectPool in the creation and management of
EnterPipRequestedItem and PipStateTransactionItem 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 WmTests:ActivityRecordTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: Id04463b36c426a14c508f944744b518d1c537efe
parent 8720c55b
Loading
Loading
Loading
Loading
+6 −21
Original line number Diff line number Diff line
@@ -24,39 +24,24 @@ import android.os.Parcel;

/**
 * Request an activity to enter picture-in-picture mode.
 *
 * @hide
 */
public final class EnterPipRequestedItem extends ActivityTransactionItem {

    public EnterPipRequestedItem(@NonNull IBinder activityToken) {
        super(activityToken);
    }

    @Override
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        client.handlePictureInPictureRequested(r);
    }

    // ObjectPoolItem implementation

    private EnterPipRequestedItem() {}

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

    @Override
    public void recycle() {
        super.recycle();
        ObjectPool.recycle(this);
    }

    // Parcelable implementation

    /** Reads from Parcel. */
    private EnterPipRequestedItem(@NonNull Parcel in) {
        super(in);
    }
+11 −28
Original line number Diff line number Diff line
@@ -28,53 +28,36 @@ import java.util.Objects;

/**
 * Request an activity to enter picture-in-picture mode.
 *
 * @hide
 */
public final class PipStateTransactionItem extends ActivityTransactionItem {

    private PictureInPictureUiState mPipState;

    @Override
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        client.handlePictureInPictureStateChanged(r, mPipState);
    }

    // ObjectPoolItem implementation

    private PipStateTransactionItem() {}

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static PipStateTransactionItem obtain(@NonNull IBinder activityToken,
            @NonNull PictureInPictureUiState pipState) {
        PipStateTransactionItem instance = ObjectPool.obtain(PipStateTransactionItem.class);
        if (instance == null) {
            instance = new PipStateTransactionItem();
        }
        instance.setActivityToken(activityToken);
        instance.mPipState = pipState;
    private final PictureInPictureUiState mPipState;

        return instance;
    public PipStateTransactionItem(@NonNull IBinder activityToken,
            @NonNull PictureInPictureUiState pipState) {
        super(activityToken);
        mPipState = pipState;
    }

    @Override
    public void recycle() {
        super.recycle();
        mPipState = null;
        ObjectPool.recycle(this);
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        client.handlePictureInPictureStateChanged(r, mPipState);
    }

    // Parcelable implementation

    /** Write to Parcel. */
    /** Writes to Parcel. */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        mPipState.writeToParcel(dest, flags);
    }

    /** Read from Parcel. */
    /** Reads from Parcel. */
    private PipStateTransactionItem(@NonNull Parcel in) {
        super(in);
        mPipState = PictureInPictureUiState.CREATOR.createFromParcel(in);
+4 −4
Original line number Diff line number Diff line
@@ -1124,8 +1124,8 @@ class ActivityClientController extends IActivityClientController.Stub {
        }

        try {
            mService.getLifecycleManager().scheduleTransactionItem(r.app.getThread(),
                    EnterPipRequestedItem.obtain(r.token));
            final EnterPipRequestedItem item = new EnterPipRequestedItem(r.token);
            mService.getLifecycleManager().scheduleTransactionItem(r.app.getThread(), item);
            return true;
        } catch (Exception e) {
            Slog.w(TAG, "Failed to send enter pip requested item: "
@@ -1140,8 +1140,8 @@ class ActivityClientController extends IActivityClientController.Stub {
    void onPictureInPictureUiStateChanged(@NonNull ActivityRecord r,
            PictureInPictureUiState pipState) {
        try {
            mService.getLifecycleManager().scheduleTransactionItem(r.app.getThread(),
                    PipStateTransactionItem.obtain(r.token, pipState));
            final PipStateTransactionItem item = new PipStateTransactionItem(r.token, pipState);
            mService.getLifecycleManager().scheduleTransactionItem(r.app.getThread(), item);
        } catch (Exception e) {
            Slog.w(TAG, "Failed to send pip state transaction item: "
                    + r.intent.getComponent(), e);