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

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

Remove ActivityConfigurationChangeItem pool (8/n).

Remove the use of ObjectPool in the creation and management of
ActivityConfigurationChangeItem 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:ActivityThreadTest
Test: atest FrameworksCoreTests:ObjectPoolTests
Test: atest FrameworksCoreTests:TransactionParcelTests
Test: atest WmTests:ActivityRecordTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: Ib458941e91cf86500524b0c3a99c5790f89586ba
parent 59165198
Loading
Loading
Loading
Loading
+19 −35
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package android.app.servertransaction;
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static android.view.Display.INVALID_DISPLAY;

import static java.util.Objects.requireNonNull;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread.ActivityClientRecord;
@@ -34,12 +36,23 @@ import java.util.Objects;

/**
 * Activity configuration changed callback.
 *
 * @hide
 */
public class ActivityConfigurationChangeItem extends ActivityTransactionItem {

    private Configuration mConfiguration;
    private ActivityWindowInfo mActivityWindowInfo;
    @NonNull
    private final Configuration mConfiguration;

    @NonNull
    private final ActivityWindowInfo mActivityWindowInfo;

    public ActivityConfigurationChangeItem(@NonNull IBinder activityToken,
            @NonNull Configuration config, @NonNull ActivityWindowInfo activityWindowInfo) {
        super(activityToken);
        mConfiguration = new Configuration(config);
        mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo);
    }

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

    // ObjectPoolItem implementation

    private ActivityConfigurationChangeItem() {}

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

        return instance;
    }

    @Override
    public void recycle() {
        super.recycle();
        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,11 +82,11 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
        dest.writeTypedObject(mActivityWindowInfo, flags);
    }

    /** Read from Parcel. */
    /** Reads from Parcel. */
    private ActivityConfigurationChangeItem(@NonNull Parcel in) {
        super(in);
        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<ActivityConfigurationChangeItem> CREATOR =
+6 −6
Original line number Diff line number Diff line
@@ -271,7 +271,7 @@ public class ActivityThreadTest {
            newConfig.seq++;
            newConfig.smallestScreenWidthDp++;
            transaction = newTransaction(activityThread);
            transaction.addTransactionItem(ActivityConfigurationChangeItem.obtain(
            transaction.addTransactionItem(new ActivityConfigurationChangeItem(
                    activity.getActivityToken(), newConfig, new ActivityWindowInfo()));
            appThread.scheduleTransaction(transaction);
            InstrumentationRegistry.getInstrumentation().waitForIdleSync();
@@ -479,11 +479,11 @@ public class ActivityThreadTest {
        appThread.scheduleTransaction(transaction);

        transaction = newTransaction(activityThread);
        transaction.addTransactionItem(ActivityConfigurationChangeItem.obtain(
        transaction.addTransactionItem(new ActivityConfigurationChangeItem(
                activity.getActivityToken(), activityConfigLandscape, new ActivityWindowInfo()));
        transaction.addTransactionItem(ConfigurationChangeItem.obtain(
                processConfigPortrait, DEVICE_ID_INVALID));
        transaction.addTransactionItem(ActivityConfigurationChangeItem.obtain(
        transaction.addTransactionItem(new ActivityConfigurationChangeItem(
                activity.getActivityToken(), activityConfigPortrait, new ActivityWindowInfo()));
        appThread.scheduleTransaction(transaction);

@@ -881,7 +881,7 @@ public class ActivityThreadTest {
            final ActivityWindowInfo activityWindowInfo = new ActivityWindowInfo();
            activityWindowInfo.set(true /* isEmbedded */, taskBounds, taskFragmentBounds);
            final ActivityConfigurationChangeItem activityConfigurationChangeItem =
                    ActivityConfigurationChangeItem.obtain(
                    new ActivityConfigurationChangeItem(
                            activity.getActivityToken(), config, activityWindowInfo);
            final ClientTransaction transaction = newTransaction(activity);
            transaction.addTransactionItem(activityConfigurationChangeItem);
@@ -898,7 +898,7 @@ public class ActivityThreadTest {
                    new ActivityWindowInfo(activityWindowInfo);
            config.seq++;
            final ActivityConfigurationChangeItem activityConfigurationChangeItem2 =
                    ActivityConfigurationChangeItem.obtain(
                    new ActivityConfigurationChangeItem(
                            activity.getActivityToken(), config, activityWindowInfo2);
            final ClientTransaction transaction2 = newTransaction(activity);
            transaction2.addTransactionItem(activityConfigurationChangeItem2);
@@ -1018,7 +1018,7 @@ public class ActivityThreadTest {
    @NonNull
    private static ClientTransaction newActivityConfigTransaction(@NonNull Activity activity,
            @NonNull Configuration config) {
        final ActivityConfigurationChangeItem item = ActivityConfigurationChangeItem.obtain(
        final ActivityConfigurationChangeItem item = new ActivityConfigurationChangeItem(
                activity.getActivityToken(), config, new ActivityWindowInfo());

        final ClientTransaction transaction = newTransaction(activity);
+0 −6
Original line number Diff line number Diff line
@@ -72,12 +72,6 @@ public class ObjectPoolTests {
    // 2. Check if the state of the object is cleared after recycling.
    // 3. Check if the same object is obtained from pool after recycling.

    @Test
    public void testRecycleActivityConfigurationChangeItem() {
        testRecycle(() -> ActivityConfigurationChangeItem.obtain(mActivityToken, config(),
                new ActivityWindowInfo()));
    }

    @Test
    public void testRecycleActivityResultItem() {
        testRecycle(() -> ActivityResultItem.obtain(mActivityToken, resultInfoList()));
+4 −3
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ public class TransactionParcelTests {
        final ActivityWindowInfo activityWindowInfo = new ActivityWindowInfo();
        activityWindowInfo.set(true /* isEmbedded */, new Rect(0, 0, 500, 1000),
                new Rect(0, 0, 500, 500));
        ActivityConfigurationChangeItem item = ActivityConfigurationChangeItem.obtain(
        final ActivityConfigurationChangeItem item = new ActivityConfigurationChangeItem(
                mActivityToken, config(), activityWindowInfo);
        writeAndPrepareForReading(item);

@@ -290,8 +290,9 @@ public class TransactionParcelTests {
    @Test
    public void testClientTransaction() {
        // Write to parcel
        NewIntentItem callback1 = NewIntentItem.obtain(mActivityToken, new ArrayList<>(), true);
        ActivityConfigurationChangeItem callback2 = ActivityConfigurationChangeItem.obtain(
        final NewIntentItem callback1 = NewIntentItem.obtain(
                mActivityToken, new ArrayList<>(), true);
        final ActivityConfigurationChangeItem callback2 = new ActivityConfigurationChangeItem(
                mActivityToken, config(), new ActivityWindowInfo());

        final StopActivityItem lifecycleRequest = new StopActivityItem(mActivityToken);
+3 −2
Original line number Diff line number Diff line
@@ -1485,8 +1485,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending new config to %s, "
                    + "config: %s", this, config);

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