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

Commit eed6e7d8 authored by Eric Lin's avatar Eric Lin Committed by Android (Google) Code Review
Browse files

Merge "Remove ResumeActivityItem object pooling (5/n)." into main

parents 895d3307 8f757990
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4623,7 +4623,7 @@ public final class ActivityThread extends ClientTransactionHandler

    private void scheduleResume(ActivityClientRecord r) {
        final ClientTransaction transaction = new ClientTransaction(mAppThread);
        final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(r.token,
        final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(r.token,
                /* isForward */ false, /* shouldSendCompatFakeFocus */ false);
        transaction.addTransactionItem(resumeActivityItem);
        executeTransaction(transaction);
+25 −61
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityClient;
import android.app.ActivityManager;
import android.app.ActivityManager.ProcessState;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.os.IBinder;
@@ -30,22 +31,37 @@ import android.os.Trace;

/**
 * Request to move an activity to resumed state.
 *
 * @hide
 */
public class ResumeActivityItem extends ActivityLifecycleItem {

    private static final String TAG = "ResumeActivityItem";
    @ProcessState
    private final int mProcState;

    private final boolean mIsForward;

    private int mProcState;
    private boolean mUpdateProcState;
    private boolean mIsForward;
    // Whether we should send compat fake focus when the activity is resumed. This is needed
    // because some game engines wait to get focus before drawing the content of the app.
    private boolean mShouldSendCompatFakeFocus;
    private final boolean mShouldSendCompatFakeFocus;

    public ResumeActivityItem(@NonNull IBinder activityToken, boolean isForward,
            boolean shouldSendCompatFakeFocus) {
        this(activityToken, ActivityManager.PROCESS_STATE_UNKNOWN, isForward,
                shouldSendCompatFakeFocus);
    }

    public ResumeActivityItem(@NonNull IBinder activityToken, @ProcessState int procState,
            boolean isForward, boolean shouldSendCompatFakeFocus) {
        super(activityToken);
        mProcState = procState;
        mIsForward = isForward;
        mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus;
    }

    @Override
    public void preExecute(@NonNull ClientTransactionHandler client) {
        if (mUpdateProcState) {
        if (mProcState != ActivityManager.PROCESS_STATE_UNKNOWN) {
            client.updateProcessState(mProcState, false);
        }
    }
@@ -72,71 +88,21 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
        return ON_RESUME;
    }

    // ObjectPoolItem implementation

    private ResumeActivityItem() {}

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static ResumeActivityItem obtain(@NonNull IBinder activityToken, int procState,
            boolean isForward, boolean shouldSendCompatFakeFocus) {
        ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class);
        if (instance == null) {
            instance = new ResumeActivityItem();
        }
        instance.setActivityToken(activityToken);
        instance.mProcState = procState;
        instance.mUpdateProcState = true;
        instance.mIsForward = isForward;
        instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus;

        return instance;
    }

    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static ResumeActivityItem obtain(@NonNull IBinder activityToken, boolean isForward,
            boolean shouldSendCompatFakeFocus) {
        ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class);
        if (instance == null) {
            instance = new ResumeActivityItem();
        }
        instance.setActivityToken(activityToken);
        instance.mProcState = ActivityManager.PROCESS_STATE_UNKNOWN;
        instance.mUpdateProcState = false;
        instance.mIsForward = isForward;
        instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus;

        return instance;
    }

    @Override
    public void recycle() {
        super.recycle();
        mProcState = ActivityManager.PROCESS_STATE_UNKNOWN;
        mUpdateProcState = false;
        mIsForward = false;
        mShouldSendCompatFakeFocus = 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.writeInt(mProcState);
        dest.writeBoolean(mUpdateProcState);
        dest.writeBoolean(mIsForward);
        dest.writeBoolean(mShouldSendCompatFakeFocus);
    }

    /** Read from Parcel. */
    /** Reads from Parcel. */
    private ResumeActivityItem(@NonNull Parcel in) {
        super(in);
        mProcState = in.readInt();
        mUpdateProcState = in.readBoolean();
        mIsForward = in.readBoolean();
        mShouldSendCompatFakeFocus = in.readBoolean();
    }
@@ -160,7 +126,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
            return false;
        }
        final ResumeActivityItem other = (ResumeActivityItem) o;
        return mProcState == other.mProcState && mUpdateProcState == other.mUpdateProcState
        return mProcState == other.mProcState
                && mIsForward == other.mIsForward
                && mShouldSendCompatFakeFocus == other.mShouldSendCompatFakeFocus;
    }
@@ -170,7 +136,6 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
        int result = 17;
        result = 31 * result + super.hashCode();
        result = 31 * result + mProcState;
        result = 31 * result + (mUpdateProcState ? 1 : 0);
        result = 31 * result + (mIsForward ? 1 : 0);
        result = 31 * result + (mShouldSendCompatFakeFocus ? 1 : 0);
        return result;
@@ -180,7 +145,6 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
    public String toString() {
        return "ResumeActivityItem{" + super.toString()
                + ",procState=" + mProcState
                + ",updateProcState=" + mUpdateProcState
                + ",isForward=" + mIsForward
                + ",shouldSendCompatFakeFocus=" + mShouldSendCompatFakeFocus + "}";
    }
+2 −1
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import java.util.List;

/**
 * Helper class for {@link TransactionExecutor} that contains utils for lifecycle path resolution.
 *
 * @hide
 */
public class TransactionExecutorHelper {
@@ -203,7 +204,7 @@ public class TransactionExecutorHelper {
                lifecycleItem = StopActivityItem.obtain(r.token);
                break;
            default:
                lifecycleItem = ResumeActivityItem.obtain(r.token, false /* isForward */,
                lifecycleItem = new ResumeActivityItem(r.token, false /* isForward */,
                        false /* shouldSendCompatFakeFocus */);
                break;
        }
+2 −2
Original line number Diff line number Diff line
@@ -983,7 +983,7 @@ public class ActivityThreadTest {
                new MergedConfiguration(currentConfig, currentConfig),
                false /* preserveWindow */, activityWindowInfo);
        final ResumeActivityItem resumeStateRequest =
                ResumeActivityItem.obtain(activity.getActivityToken(), true /* isForward */,
                new ResumeActivityItem(activity.getActivityToken(), true /* isForward */,
                        false /* shouldSendCompatFakeFocus*/);

        final ClientTransaction transaction = newTransaction(activity);
@@ -996,7 +996,7 @@ public class ActivityThreadTest {
    @NonNull
    private static ClientTransaction newResumeTransaction(@NonNull Activity activity) {
        final ResumeActivityItem resumeStateRequest =
                ResumeActivityItem.obtain(activity.getActivityToken(), true /* isForward */,
                new ResumeActivityItem(activity.getActivityToken(), true /* isForward */,
                        false /* shouldSendCompatFakeFocus */);

        final ClientTransaction transaction = newTransaction(activity);
+39 −0
Original line number Diff line number Diff line
@@ -21,13 +21,17 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.ClientTransactionHandler;
import android.content.res.Configuration;
@@ -133,6 +137,41 @@ public class ClientTransactionItemTest {
                eq(false) /* getNonConfigInstance */, any());
    }

    @Test
    public void testResumeActivityItem_preExecute_withProcState_updatesProcessState() {
        final ResumeActivityItem item = new ResumeActivityItem(mActivityToken,
                ActivityManager.PROCESS_STATE_TOP /* procState */,
                true /* isForward */,
                false /* shouldSendCompatFakeFocus*/);

        item.preExecute(mHandler);

        verify(mHandler).updateProcessState(ActivityManager.PROCESS_STATE_TOP, false);
    }

    @Test
    public void testResumeActivityItem_preExecute_withUnknownProcState_skipsProcessStateUpdate() {
        final ResumeActivityItem item = new ResumeActivityItem(mActivityToken,
                ActivityManager.PROCESS_STATE_UNKNOWN /* procState */,
                true /* isForward */,
                false /* shouldSendCompatFakeFocus*/);

        item.preExecute(mHandler);

        verify(mHandler, never()).updateProcessState(anyInt(), anyBoolean());
    }

    @Test
    public void testResumeActivityItem_preExecute_withoutProcState_skipsProcessStateUpdate() {
        final ResumeActivityItem item = new ResumeActivityItem(mActivityToken,
                true /* isForward */,
                false /* shouldSendCompatFakeFocus*/);

        item.preExecute(mHandler);

        verify(mHandler, never()).updateProcessState(anyInt(), anyBoolean());
    }

    @Test
    public void testWindowContextInfoChangeItem_execute() {
        final WindowContextInfoChangeItem item = WindowContextInfoChangeItem
Loading