diff options
| author | 2024-07-22 17:36:01 +0800 | |
|---|---|---|
| committer | 2024-07-23 20:04:09 +0800 | |
| commit | 0b0bfc3da65c94d89e68ca71adbb2184621caec4 (patch) | |
| tree | 09a2dbb43de085652cffe9d4eaf64bc86565abb3 | |
| parent | bf6e6a269306add96de96c94156573a313cac072 (diff) | |
Remove MoveToDisplayItem object pooling (13/n).
Remove the use of ObjectPool in the creation and management of
MoveToDisplayItem 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:ObjectPoolTests
Test: atest FrameworksCoreTests:TransactionParcelTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: Ifda4a2d4ccdd5c1e01d30956a076215e86cb7980
4 files changed, 28 insertions, 48 deletions
diff --git a/core/java/android/app/servertransaction/MoveToDisplayItem.java b/core/java/android/app/servertransaction/MoveToDisplayItem.java index 8706edd26406..1aa563aa6363 100644 --- a/core/java/android/app/servertransaction/MoveToDisplayItem.java +++ b/core/java/android/app/servertransaction/MoveToDisplayItem.java @@ -18,6 +18,8 @@ package android.app.servertransaction; import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER; +import static java.util.Objects.requireNonNull; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityThread.ActivityClientRecord; @@ -33,13 +35,26 @@ import java.util.Objects; /** * Activity move to a different display message. + * * @hide */ public class MoveToDisplayItem extends ActivityTransactionItem { - private int mTargetDisplayId; - private Configuration mConfiguration; - private ActivityWindowInfo mActivityWindowInfo; + private final int mTargetDisplayId; + + @NonNull + private final Configuration mConfiguration; + + @NonNull + private final ActivityWindowInfo mActivityWindowInfo; + + public MoveToDisplayItem(@NonNull IBinder activityToken, int targetDisplayId, + @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) { + super(activityToken); + mTargetDisplayId = targetDisplayId; + mConfiguration = new Configuration(configuration); + mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo); + } @Override public void preExecute(@NonNull ClientTransactionHandler client) { @@ -58,38 +73,9 @@ public class MoveToDisplayItem extends ActivityTransactionItem { Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } - // ObjectPoolItem implementation - - private MoveToDisplayItem() {} - - /** Obtain an instance initialized with provided params. */ - @NonNull - public static MoveToDisplayItem obtain(@NonNull IBinder activityToken, int targetDisplayId, - @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) { - MoveToDisplayItem instance = ObjectPool.obtain(MoveToDisplayItem.class); - if (instance == null) { - instance = new MoveToDisplayItem(); - } - instance.setActivityToken(activityToken); - instance.mTargetDisplayId = targetDisplayId; - instance.mConfiguration = new Configuration(configuration); - instance.mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo); - - return instance; - } - - @Override - public void recycle() { - super.recycle(); - mTargetDisplayId = 0; - 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,12 +84,12 @@ public class MoveToDisplayItem extends ActivityTransactionItem { dest.writeTypedObject(mActivityWindowInfo, flags); } - /** Read from Parcel. */ + /** Reads from Parcel. */ private MoveToDisplayItem(@NonNull Parcel in) { super(in); mTargetDisplayId = in.readInt(); - 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<MoveToDisplayItem> CREATOR = new Creator<>() { diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index 098e92e812b5..d5a7d51097d1 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotSame; import android.annotation.NonNull; import android.os.IBinder; import android.platform.test.annotations.Presubmit; -import android.window.ActivityWindowInfo; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -68,12 +67,6 @@ public class ObjectPoolTests { } @Test - public void testRecycleMoveToDisplayItem() { - testRecycle(() -> MoveToDisplayItem.obtain(mActivityToken, 4, config(), - new ActivityWindowInfo())); - } - - @Test public void testRecycleNewIntentItem() { testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false)); } diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index dd4aa1dde54d..644e9f4dd562 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -108,12 +108,12 @@ public class TransactionParcelTests { final ActivityWindowInfo activityWindowInfo = new ActivityWindowInfo(); activityWindowInfo.set(true /* isEmbedded */, new Rect(0, 0, 500, 1000), new Rect(0, 0, 500, 500)); - MoveToDisplayItem item = MoveToDisplayItem.obtain(mActivityToken, 4 /* targetDisplayId */, - config(), activityWindowInfo); + final MoveToDisplayItem item = new MoveToDisplayItem(mActivityToken, + 4 /* targetDisplayId */, config(), activityWindowInfo); writeAndPrepareForReading(item); // Read from parcel and assert - MoveToDisplayItem result = MoveToDisplayItem.CREATOR.createFromParcel(mParcel); + final MoveToDisplayItem result = MoveToDisplayItem.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 e8aced824420..32a01cb71cbb 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1467,8 +1467,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId, config); - mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), - MoveToDisplayItem.obtain(token, displayId, config, activityWindowInfo)); + final MoveToDisplayItem item = + new MoveToDisplayItem(token, displayId, config, activityWindowInfo); + mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item); } catch (RemoteException e) { // If process died, whatever. } |