Remove ResumeActivityItem object pooling (5/n).
Remove the use of ObjectPool in the creation and management of
ResumeActivityItem 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:ActivityRefresherTests
Test: atest WmTests:CameraCompatFreeformPolicyTests
Test: atest WmTests:DisplayRotationCompatPolicyTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: I959904ca72c70ba1c4b0b54ddb203ea99e971dde
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 4952af3..8696e0f 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4623,7 +4623,7 @@
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);
diff --git a/core/java/android/app/servertransaction/ResumeActivityItem.java b/core/java/android/app/servertransaction/ResumeActivityItem.java
index 4a0ea98..a28791f 100644
--- a/core/java/android/app/servertransaction/ResumeActivityItem.java
+++ b/core/java/android/app/servertransaction/ResumeActivityItem.java
@@ -22,6 +22,7 @@
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 @@
/**
* 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 int mProcState;
- private boolean mUpdateProcState;
- private boolean mIsForward;
+ private final 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 @@
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 @@
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 @@
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 String toString() {
return "ResumeActivityItem{" + super.toString()
+ ",procState=" + mProcState
- + ",updateProcState=" + mUpdateProcState
+ ",isForward=" + mIsForward
+ ",shouldSendCompatFakeFocus=" + mShouldSendCompatFakeFocus + "}";
}
diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
index 9f622e9..8ba9076 100644
--- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java
+++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
@@ -42,6 +42,7 @@
/**
* Helper class for {@link TransactionExecutor} that contains utils for lifecycle path resolution.
+ *
* @hide
*/
public class TransactionExecutorHelper {
@@ -203,7 +204,7 @@
lifecycleItem = StopActivityItem.obtain(r.token);
break;
default:
- lifecycleItem = ResumeActivityItem.obtain(r.token, false /* isForward */,
+ lifecycleItem = new ResumeActivityItem(r.token, false /* isForward */,
false /* shouldSendCompatFakeFocus */);
break;
}
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index f5affd3..4f5107a 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -983,7 +983,7 @@
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 @@
@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);
diff --git a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java
index ff30f19..911b759 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java
@@ -21,13 +21,17 @@
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;
@@ -134,6 +138,41 @@
}
@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
.obtain(mWindowClientToken, mConfiguration, DEFAULT_DISPLAY);
diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
index 40f6aa0..1817b87 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
@@ -161,11 +161,6 @@
}
@Test
- public void testRecycleResumeActivityItem() {
- testRecycle(() -> ResumeActivityItem.obtain(mActivityToken, 3, true, false));
- }
-
- @Test
public void testRecycleStartActivityItem() {
testRecycle(() -> StartActivityItem.obtain(mActivityToken,
new ActivityOptions.SceneTransitionInfo()));
diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
index dafcf28..dde6ab1 100644
--- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
@@ -249,12 +249,12 @@
@Test
public void testResume() {
// Write to parcel
- ResumeActivityItem item = ResumeActivityItem.obtain(mActivityToken, 27 /* procState */,
+ final ResumeActivityItem item = new ResumeActivityItem(mActivityToken, 27 /* procState */,
true /* isForward */, false /* shouldSendCompatFakeFocus */);
writeAndPrepareForReading(item);
// Read from parcel and assert
- ResumeActivityItem result = ResumeActivityItem.CREATOR.createFromParcel(mParcel);
+ final ResumeActivityItem result = ResumeActivityItem.CREATOR.createFromParcel(mParcel);
assertEquals(item.hashCode(), result.hashCode());
assertEquals(item, result);
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index ee4deae..f31280e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -9997,7 +9997,7 @@
preserveWindow, getActivityWindowInfo());
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(token, isTransitionForward(),
+ lifecycleItem = new ResumeActivityItem(token, isTransitionForward(),
shouldSendCompatFakeFocus());
} else {
lifecycleItem = PauseActivityItem.obtain(token);
diff --git a/services/core/java/com/android/server/wm/ActivityRefresher.java b/services/core/java/com/android/server/wm/ActivityRefresher.java
index bc82271..c02501f 100644
--- a/services/core/java/com/android/server/wm/ActivityRefresher.java
+++ b/services/core/java/com/android/server/wm/ActivityRefresher.java
@@ -86,7 +86,7 @@
+ "activityRecord=%s", activity);
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(
activity.token, cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(
activity.token, /* isForward */ false, /* shouldSendCompatFakeFocus */ false);
try {
activity.mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems(
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index e81b440..021caaf 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -942,7 +942,7 @@
// Set desired final state.
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(r.token, isTransitionForward,
+ lifecycleItem = new ResumeActivityItem(r.token, isTransitionForward,
r.shouldSendCompatFakeFocus());
} else if (r.isVisibleRequested()) {
lifecycleItem = PauseActivityItem.obtain(r.token);
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 9b2c022..5bdab2b 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -1636,7 +1636,7 @@
final int topProcessState = mAtmService.mTopProcessState;
next.app.setPendingUiCleanAndForceProcessStateUpTo(topProcessState);
next.abortAndClearOptionsAnimation();
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(
next.token, topProcessState, dc.isNextTransitionForward(),
next.shouldSendCompatFakeFocus());
mAtmService.getLifecycleManager().scheduleTransactionItem(
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java
index 6ad1044..68ccb31 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java
@@ -193,7 +193,7 @@
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(mActivity.token,
cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(mActivity.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(mActivity.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0))
diff --git a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
index eaa1641..c43f414 100644
--- a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
@@ -309,7 +309,7 @@
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(mActivity.token,
cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(mActivity.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(mActivity.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0))
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java
index e9fcc40..12bc3ed 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java
@@ -615,7 +615,7 @@
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(mActivity.token,
cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(mActivity.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(mActivity.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0))