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

Commit e4cccebd authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes Id04463b3,I1945ad52 into main

* changes:
  Remove EnterPip/PipState object pooling (11/n).
  Remove ActivityResultItem object pooling (10/n).
parents 2ae89f37 ab1b591b
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -3818,8 +3818,7 @@ public final class ActivityThread extends ClientTransactionHandler
        final ArrayList<ResultInfo> list = new ArrayList<>();
        final ArrayList<ResultInfo> list = new ArrayList<>();
        list.add(new ResultInfo(id, requestCode, resultCode, data, activityToken));
        list.add(new ResultInfo(id, requestCode, resultCode, data, activityToken));
        final ClientTransaction clientTransaction = new ClientTransaction(mAppThread);
        final ClientTransaction clientTransaction = new ClientTransaction(mAppThread);
        final ActivityResultItem activityResultItem = ActivityResultItem.obtain(
        final ActivityResultItem activityResultItem = new ActivityResultItem(activityToken, list);
                activityToken, list);
        clientTransaction.addTransactionItem(activityResultItem);
        clientTransaction.addTransactionItem(activityResultItem);
        try {
        try {
            mAppThread.scheduleTransaction(clientTransaction);
            mAppThread.scheduleTransaction(clientTransaction);
+12 −27
Original line number Original line Diff line number Diff line
@@ -41,10 +41,13 @@ import java.util.Objects;


/**
/**
 * Activity result delivery callback.
 * Activity result delivery callback.
 *
 * @hide
 * @hide
 */
 */
public class ActivityResultItem extends ActivityTransactionItem {
public class ActivityResultItem extends ActivityTransactionItem {


    // TODO(b/170729553): Mark this with @NonNull and final once @UnsupportedAppUsage removed.
    //  We cannot do it now to avoid app compatibility regression.
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private List<ResultInfo> mResultInfoList;
    private List<ResultInfo> mResultInfoList;


@@ -56,6 +59,12 @@ public class ActivityResultItem extends ActivityTransactionItem {
    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
    public static final long CALL_ACTIVITY_RESULT_BEFORE_RESUME = 78294732L;
    public static final long CALL_ACTIVITY_RESULT_BEFORE_RESUME = 78294732L;


    public ActivityResultItem(@NonNull IBinder activityToken,
            @NonNull List<ResultInfo> resultInfoList) {
        super(activityToken);
        mResultInfoList = new ArrayList<>(resultInfoList);
    }

    @Override
    @Override
    public int getPostExecutionState() {
    public int getPostExecutionState() {
        return CompatChanges.isChangeEnabled(CALL_ACTIVITY_RESULT_BEFORE_RESUME)
        return CompatChanges.isChangeEnabled(CALL_ACTIVITY_RESULT_BEFORE_RESUME)
@@ -70,43 +79,19 @@ public class ActivityResultItem extends ActivityTransactionItem {
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }
    }


    // ObjectPoolItem implementation

    private ActivityResultItem() {}

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static ActivityResultItem obtain(@NonNull IBinder activityToken,
            @NonNull List<ResultInfo> resultInfoList) {
        ActivityResultItem instance = ObjectPool.obtain(ActivityResultItem.class);
        if (instance == null) {
            instance = new ActivityResultItem();
        }
        instance.setActivityToken(activityToken);
        instance.mResultInfoList = new ArrayList<>(resultInfoList);

        return instance;
    }

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

    // Parcelable implementation
    // Parcelable implementation


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


    /** Read from Parcel. */
    /** Reads from Parcel. */
    private ActivityResultItem(@NonNull Parcel in) {
    private ActivityResultItem(@NonNull Parcel in) {
        super(in);
        super(in);
        // TODO(b/170729553): Wrap with requireNonNull once @UnsupportedAppUsage removed.
        mResultInfoList = in.createTypedArrayList(ResultInfo.CREATOR);
        mResultInfoList = in.createTypedArrayList(ResultInfo.CREATOR);
    }
    }


+6 −21
Original line number Original line Diff line number Diff line
@@ -24,39 +24,24 @@ import android.os.Parcel;


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


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

    @Override
    @Override
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
            @NonNull PendingTransactionActions pendingActions) {
        client.handlePictureInPictureRequested(r);
        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
    // Parcelable implementation


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


/**
/**
 * Request an activity to enter picture-in-picture mode.
 * Request an activity to enter picture-in-picture mode.
 *
 * @hide
 * @hide
 */
 */
public final class PipStateTransactionItem extends ActivityTransactionItem {
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
    @NonNull
    public static PipStateTransactionItem obtain(@NonNull IBinder activityToken,
    private final PictureInPictureUiState mPipState;
            @NonNull PictureInPictureUiState pipState) {
        PipStateTransactionItem instance = ObjectPool.obtain(PipStateTransactionItem.class);
        if (instance == null) {
            instance = new PipStateTransactionItem();
        }
        instance.setActivityToken(activityToken);
        instance.mPipState = pipState;


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


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


    // Parcelable implementation
    // Parcelable implementation


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


    /** Read from Parcel. */
    /** Reads from Parcel. */
    private PipStateTransactionItem(@NonNull Parcel in) {
    private PipStateTransactionItem(@NonNull Parcel in) {
        super(in);
        super(in);
        mPipState = PictureInPictureUiState.CREATOR.createFromParcel(in);
        mPipState = PictureInPictureUiState.CREATOR.createFromParcel(in);
+0 −5
Original line number Original line Diff line number Diff line
@@ -71,11 +71,6 @@ public class ObjectPoolTests {
    // 2. Check if the state of the object is cleared after recycling.
    // 2. Check if the state of the object is cleared after recycling.
    // 3. Check if the same object is obtained from pool after recycling.
    // 3. Check if the same object is obtained from pool after recycling.


    @Test
    public void testRecycleActivityResultItem() {
        testRecycle(() -> ActivityResultItem.obtain(mActivityToken, resultInfoList()));
    }

    @Test
    @Test
    public void testRecycleConfigurationChangeItem() {
    public void testRecycleConfigurationChangeItem() {
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
Loading