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

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

Remove NewIntent/TopResumedItem pooling (15/n).

Remove the use of ObjectPool in the creation and management of
NewIntentItem and TopResumedActivityChangeItem 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 FrameworksCoreTests:ActivityThreadTest
Test: atest FrameworksCoreTests:ObjectPoolTests
Test: atest FrameworksCoreTests:TransactionParcelTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: I74f250434ba76633a71f180054e58977fd76c7bd
parent fc37d3a7
Loading
Loading
Loading
Loading
+15 −30
Original line number Original line Diff line number Diff line
@@ -38,13 +38,24 @@ import java.util.Objects;


/**
/**
 * New intent message.
 * New intent message.
 *
 * @hide
 * @hide
 */
 */
public class NewIntentItem extends ActivityTransactionItem {
public class NewIntentItem 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<ReferrerIntent> mIntents;
    private List<ReferrerIntent> mIntents;
    private boolean mResume;

    private final boolean mResume;

    public NewIntentItem(@NonNull IBinder activityToken,
            @NonNull List<ReferrerIntent> intents, boolean resume) {
        super(activityToken);
        mIntents = new ArrayList<>(intents);
        mResume = resume;
    }


    @Override
    @Override
    public int getPostExecutionState() {
    public int getPostExecutionState() {
@@ -59,36 +70,9 @@ public class NewIntentItem extends ActivityTransactionItem {
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
    }
    }


    // ObjectPoolItem implementation

    private NewIntentItem() {}

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static NewIntentItem obtain(@NonNull IBinder activityToken,
            @NonNull List<ReferrerIntent> intents, boolean resume) {
        NewIntentItem instance = ObjectPool.obtain(NewIntentItem.class);
        if (instance == null) {
            instance = new NewIntentItem();
        }
        instance.setActivityToken(activityToken);
        instance.mIntents = new ArrayList<>(intents);
        instance.mResume = resume;

        return instance;
    }

    @Override
    public void recycle() {
        super.recycle();
        mIntents = null;
        mResume = false;
        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);
@@ -96,10 +80,11 @@ public class NewIntentItem extends ActivityTransactionItem {
        dest.writeTypedList(mIntents, flags);
        dest.writeTypedList(mIntents, flags);
    }
    }


    /** Read from Parcel. */
    /** Reads from Parcel. */
    private NewIntentItem(@NonNull Parcel in) {
    private NewIntentItem(@NonNull Parcel in) {
        super(in);
        super(in);
        mResume = in.readBoolean();
        mResume = in.readBoolean();
        // TODO(b/170729553): Wrap with requireNonNull once @UnsupportedAppUsage removed.
        mIntents = in.createTypedArrayList(ReferrerIntent.CREATOR);
        mIntents = in.createTypedArrayList(ReferrerIntent.CREATOR);
    }
    }


+11 −31
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@
 * See the License for the specific language governing permissions and
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * limitations under the License.
 */
 */

package android.app.servertransaction;
package android.app.servertransaction;


import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
@@ -28,11 +29,17 @@ import android.os.Trace;


/**
/**
 * Top resumed activity changed callback.
 * Top resumed activity changed callback.
 *
 * @hide
 * @hide
 */
 */
public class TopResumedActivityChangeItem extends ActivityTransactionItem {
public class TopResumedActivityChangeItem extends ActivityTransactionItem {


    private boolean mOnTop;
    private final boolean mOnTop;

    public TopResumedActivityChangeItem(@NonNull IBinder activityToken, boolean onTop) {
        super(activityToken);
        mOnTop = onTop;
    }


    @Override
    @Override
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
@@ -58,42 +65,16 @@ public class TopResumedActivityChangeItem extends ActivityTransactionItem {
        ActivityClient.getInstance().activityTopResumedStateLost();
        ActivityClient.getInstance().activityTopResumedStateLost();
    }
    }


    // ObjectPoolItem implementation

    private TopResumedActivityChangeItem() {}

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

        return instance;
    }

    @Override
    public void recycle() {
        super.recycle();
        mOnTop = false;
        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.writeBoolean(mOnTop);
        dest.writeBoolean(mOnTop);
    }
    }


    /** Read from Parcel. */
    /** Reads from Parcel. */
    private TopResumedActivityChangeItem(@NonNull Parcel in) {
    private TopResumedActivityChangeItem(@NonNull Parcel in) {
        super(in);
        super(in);
        mOnTop = in.readBoolean();
        mOnTop = in.readBoolean();
@@ -131,7 +112,6 @@ public class TopResumedActivityChangeItem extends ActivityTransactionItem {


    @Override
    @Override
    public String toString() {
    public String toString() {
        return "TopResumedActivityChangeItem{" + super.toString()
        return "TopResumedActivityChangeItem{" + super.toString() + ",onTop=" + mOnTop + "}";
                + ",onTop=" + mOnTop + "}";
    }
    }
}
}
+1 −2
Original line number Original line Diff line number Diff line
@@ -1030,8 +1030,7 @@ public class ActivityThreadTest {
    @NonNull
    @NonNull
    private static ClientTransaction newNewIntentTransaction(@NonNull Activity activity,
    private static ClientTransaction newNewIntentTransaction(@NonNull Activity activity,
            @NonNull List<ReferrerIntent> intents, boolean resume) {
            @NonNull List<ReferrerIntent> intents, boolean resume) {
        final NewIntentItem item = NewIntentItem.obtain(activity.getActivityToken(), intents,
        final NewIntentItem item = new NewIntentItem(activity.getActivityToken(), intents, resume);
                resume);


        final ClientTransaction transaction = newTransaction(activity);
        final ClientTransaction transaction = newTransaction(activity);
        transaction.addTransactionItem(item);
        transaction.addTransactionItem(item);
+0 −6
Original line number Original line Diff line number Diff line
@@ -17,7 +17,6 @@
package android.app.servertransaction;
package android.app.servertransaction;


import static android.app.servertransaction.TestUtils.config;
import static android.app.servertransaction.TestUtils.config;
import static android.app.servertransaction.TestUtils.referrerIntentList;


import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNotSame;


@@ -66,11 +65,6 @@ public class ObjectPoolTests {
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1));
    }
    }


    @Test
    public void testRecycleNewIntentItem() {
        testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false));
    }

    private void testRecycle(@NonNull Supplier<? extends ObjectPoolItem> obtain) {
    private void testRecycle(@NonNull Supplier<? extends ObjectPoolItem> obtain) {
        // Reuse the same object after recycle.
        // Reuse the same object after recycle.
        final ObjectPoolItem item = obtain.get();
        final ObjectPoolItem item = obtain.get();
+6 −5
Original line number Original line Diff line number Diff line
@@ -122,11 +122,12 @@ public class TransactionParcelTests {
    @Test
    @Test
    public void testNewIntent() {
    public void testNewIntent() {
        // Write to parcel
        // Write to parcel
        NewIntentItem item = NewIntentItem.obtain(mActivityToken, referrerIntentList(), false);
        final NewIntentItem item =
                new NewIntentItem(mActivityToken, referrerIntentList(), false /* resume */);
        writeAndPrepareForReading(item);
        writeAndPrepareForReading(item);


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


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


@@ -305,7 +306,7 @@ public class TransactionParcelTests {
        writeAndPrepareForReading(transaction);
        writeAndPrepareForReading(transaction);


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


        assertEquals(transaction.hashCode(), result.hashCode());
        assertEquals(transaction.hashCode(), result.hashCode());
        assertEquals(transaction, result);
        assertEquals(transaction, result);
Loading