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

Commit 0b0bfc3d authored by Eric Lin's avatar Eric Lin
Browse files

Remove MoveToDisplayItem object pooling (13/n).

Remove the use of ObjectPool in the creation and management of
MoveToDisplayItem 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: Ifda4a2d4ccdd5c1e01d30956a076215e86cb7980
parent bf6e6a26
Loading
Loading
Loading
Loading
+22 −36
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package android.app.servertransaction;


import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;


import static java.util.Objects.requireNonNull;

import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ActivityThread.ActivityClientRecord;
@@ -33,13 +35,26 @@ import java.util.Objects;


/**
/**
 * Activity move to a different display message.
 * Activity move to a different display message.
 *
 * @hide
 * @hide
 */
 */
public class MoveToDisplayItem extends ActivityTransactionItem {
public class MoveToDisplayItem extends ActivityTransactionItem {


    private int mTargetDisplayId;
    private final int mTargetDisplayId;
    private Configuration mConfiguration;

    private ActivityWindowInfo mActivityWindowInfo;
    @NonNull
    private final Configuration mConfiguration;

    @NonNull
    private final ActivityWindowInfo mActivityWindowInfo;

    public MoveToDisplayItem(@NonNull IBinder activityToken, int targetDisplayId,
            @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) {
        super(activityToken);
        mTargetDisplayId = targetDisplayId;
        mConfiguration = new Configuration(configuration);
        mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo);
    }


    @Override
    @Override
    public void preExecute(@NonNull ClientTransactionHandler client) {
    public void preExecute(@NonNull ClientTransactionHandler client) {
@@ -58,38 +73,9 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }
    }


    // ObjectPoolItem implementation

    private MoveToDisplayItem() {}

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static MoveToDisplayItem obtain(@NonNull IBinder activityToken, int targetDisplayId,
            @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) {
        MoveToDisplayItem instance = ObjectPool.obtain(MoveToDisplayItem.class);
        if (instance == null) {
            instance = new MoveToDisplayItem();
        }
        instance.setActivityToken(activityToken);
        instance.mTargetDisplayId = targetDisplayId;
        instance.mConfiguration = new Configuration(configuration);
        instance.mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo);

        return instance;
    }

    @Override
    public void recycle() {
        super.recycle();
        mTargetDisplayId = 0;
        mConfiguration = null;
        mActivityWindowInfo = 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);
@@ -98,12 +84,12 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        dest.writeTypedObject(mActivityWindowInfo, flags);
        dest.writeTypedObject(mActivityWindowInfo, flags);
    }
    }


    /** Read from Parcel. */
    /** Reads from Parcel. */
    private MoveToDisplayItem(@NonNull Parcel in) {
    private MoveToDisplayItem(@NonNull Parcel in) {
        super(in);
        super(in);
        mTargetDisplayId = in.readInt();
        mTargetDisplayId = in.readInt();
        mConfiguration = in.readTypedObject(Configuration.CREATOR);
        mConfiguration = requireNonNull(in.readTypedObject(Configuration.CREATOR));
        mActivityWindowInfo = in.readTypedObject(ActivityWindowInfo.CREATOR);
        mActivityWindowInfo = requireNonNull(in.readTypedObject(ActivityWindowInfo.CREATOR));
    }
    }


    public static final @NonNull Creator<MoveToDisplayItem> CREATOR = new Creator<>() {
    public static final @NonNull Creator<MoveToDisplayItem> CREATOR = new Creator<>() {
+0 −7
Original line number Original line Diff line number Diff line
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotSame;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.os.IBinder;
import android.os.IBinder;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;
import android.window.ActivityWindowInfo;


import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
@@ -67,12 +66,6 @@ public class ObjectPoolTests {
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
    }
    }


    @Test
    public void testRecycleMoveToDisplayItem() {
        testRecycle(() -> MoveToDisplayItem.obtain(mActivityToken, 4, config(),
                new ActivityWindowInfo()));
    }

    @Test
    @Test
    public void testRecycleNewIntentItem() {
    public void testRecycleNewIntentItem() {
        testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false));
        testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false));
+3 −3
Original line number Original line Diff line number Diff line
@@ -108,12 +108,12 @@ public class TransactionParcelTests {
        final ActivityWindowInfo activityWindowInfo = new ActivityWindowInfo();
        final ActivityWindowInfo activityWindowInfo = new ActivityWindowInfo();
        activityWindowInfo.set(true /* isEmbedded */, new Rect(0, 0, 500, 1000),
        activityWindowInfo.set(true /* isEmbedded */, new Rect(0, 0, 500, 1000),
                new Rect(0, 0, 500, 500));
                new Rect(0, 0, 500, 500));
        MoveToDisplayItem item = MoveToDisplayItem.obtain(mActivityToken, 4 /* targetDisplayId */,
        final MoveToDisplayItem item = new MoveToDisplayItem(mActivityToken,
                config(), activityWindowInfo);
                4 /* targetDisplayId */, config(), activityWindowInfo);
        writeAndPrepareForReading(item);
        writeAndPrepareForReading(item);


        // Read from parcel and assert
        // Read from parcel and assert
        MoveToDisplayItem result = MoveToDisplayItem.CREATOR.createFromParcel(mParcel);
        final MoveToDisplayItem result = MoveToDisplayItem.CREATOR.createFromParcel(mParcel);


        assertEquals(item.hashCode(), result.hashCode());
        assertEquals(item.hashCode(), result.hashCode());
        assertEquals(item, result);
        assertEquals(item, result);
+3 −2
Original line number Original line Diff line number Diff line
@@ -1467,8 +1467,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                    + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId,
                    + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId,
                    config);
                    config);


            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
            final MoveToDisplayItem item =
                    MoveToDisplayItem.obtain(token, displayId, config, activityWindowInfo));
                    new MoveToDisplayItem(token, displayId, config, activityWindowInfo);
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            // If process died, whatever.
            // If process died, whatever.
        }
        }