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

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

Merge changes I28903621,Ifda4a2d4 into main

* changes:
  Remove TransferSplashStateItem pooling (14/n).
  Remove MoveToDisplayItem object pooling (13/n).
parents 54b1fa9c fc37d3a7
Loading
Loading
Loading
Loading
+22 −36
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.app.servertransaction;

import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;

import static java.util.Objects.requireNonNull;

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

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

    private int mTargetDisplayId;
    private Configuration mConfiguration;
    private ActivityWindowInfo mActivityWindowInfo;
    private final int mTargetDisplayId;

    @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
    public void preExecute(@NonNull ClientTransactionHandler client) {
@@ -58,38 +73,9 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        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

    /** Write to Parcel. */
    /** Writes to Parcel. */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
@@ -98,12 +84,12 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        dest.writeTypedObject(mActivityWindowInfo, flags);
    }

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

    public static final @NonNull Creator<MoveToDisplayItem> CREATOR = new Creator<>() {
+17 −28
Original line number Diff line number Diff line
@@ -29,12 +29,24 @@ import java.util.Objects;

/**
 * Transfer a splash screen view to an Activity.
 *
 * @hide
 */
public class TransferSplashScreenViewStateItem extends ActivityTransactionItem {

    private SplashScreenViewParcelable mSplashScreenViewParcelable;
    private SurfaceControl mStartingWindowLeash;
    @Nullable
    private final SplashScreenViewParcelable mSplashScreenViewParcelable;

    @Nullable
    private final SurfaceControl mStartingWindowLeash;

    public TransferSplashScreenViewStateItem(@NonNull IBinder activityToken,
            @Nullable SplashScreenViewParcelable parcelable,
            @Nullable SurfaceControl startingWindowLeash) {
        super(activityToken);
        mSplashScreenViewParcelable = parcelable;
        mStartingWindowLeash = startingWindowLeash;
    }

    @Override
    public void execute(@NonNull ClientTransactionHandler client,
@@ -43,14 +55,9 @@ public class TransferSplashScreenViewStateItem extends ActivityTransactionItem {
        client.handleAttachSplashScreenView(r, mSplashScreenViewParcelable, mStartingWindowLeash);
    }

    @Override
    public void recycle() {
        super.recycle();
        mSplashScreenViewParcelable = null;
        mStartingWindowLeash = null;
        ObjectPool.recycle(this);
    }
    // Parcelable implementation

    /** Writes to Parcel. */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
@@ -58,31 +65,13 @@ public class TransferSplashScreenViewStateItem extends ActivityTransactionItem {
        dest.writeTypedObject(mStartingWindowLeash, flags);
    }

    private TransferSplashScreenViewStateItem() {}

    /** Reads from Parcel. */
    private TransferSplashScreenViewStateItem(@NonNull Parcel in) {
        super(in);
        mSplashScreenViewParcelable = in.readTypedObject(SplashScreenViewParcelable.CREATOR);
        mStartingWindowLeash = in.readTypedObject(SurfaceControl.CREATOR);
    }

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static TransferSplashScreenViewStateItem obtain(
            @NonNull IBinder activityToken, @Nullable SplashScreenViewParcelable parcelable,
            @Nullable SurfaceControl startingWindowLeash) {
        TransferSplashScreenViewStateItem instance =
                ObjectPool.obtain(TransferSplashScreenViewStateItem.class);
        if (instance == null) {
            instance = new TransferSplashScreenViewStateItem();
        }
        instance.setActivityToken(activityToken);
        instance.mSplashScreenViewParcelable = parcelable;
        instance.mStartingWindowLeash = startingWindowLeash;

        return instance;
    }

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

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

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

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

        // 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, result);
+6 −5
Original line number 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,
                    config);

            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    MoveToDisplayItem.obtain(token, displayId, config, activityWindowInfo));
            final MoveToDisplayItem item =
                    new MoveToDisplayItem(token, displayId, config, activityWindowInfo);
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item);
        } catch (RemoteException e) {
            // If process died, whatever.
        }
@@ -2811,9 +2812,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }
        try {
            mTransferringSplashScreenState = TRANSFER_SPLASH_SCREEN_ATTACH_TO_CLIENT;
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(),
                    TransferSplashScreenViewStateItem.obtain(token, parcelable,
                            windowAnimationLeash));
            final TransferSplashScreenViewStateItem item =
                    new TransferSplashScreenViewStateItem(token, parcelable, windowAnimationLeash);
            mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item);
            scheduleTransferSplashScreenTimeout();
        } catch (Exception e) {
            Slog.w(TAG, "onCopySplashScreenComplete fail: " + this);