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 Diff line number Diff line
@@ -38,13 +38,24 @@ import java.util.Objects;

/**
 * New intent message.
 *
 * @hide
 */
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)
    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
    public int getPostExecutionState() {
@@ -59,36 +70,9 @@ public class NewIntentItem extends ActivityTransactionItem {
        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

    /** Write to Parcel. */
    /** Writes to Parcel. */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
@@ -96,10 +80,11 @@ public class NewIntentItem extends ActivityTransactionItem {
        dest.writeTypedList(mIntents, flags);
    }

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

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

package android.app.servertransaction;

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

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

    private boolean mOnTop;
    private final boolean mOnTop;

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

    @Override
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
@@ -58,42 +65,16 @@ public class TopResumedActivityChangeItem extends ActivityTransactionItem {
        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

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

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

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

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

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

import static org.junit.Assert.assertNotSame;

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

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

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

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

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

        // 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, result);
Loading