diff options
| author | 2024-07-22 20:53:28 +0800 | |
|---|---|---|
| committer | 2024-07-23 20:04:09 +0800 | |
| commit | b6f318cecd92c3a354bcc8f558fe236e28f9bcdd (patch) | |
| tree | 8b8ff3138e5739e513a539e9d0986a4b5eb0724c | |
| parent | 7080a7ab54a3ae68ae0a36fbefce133d61f36880 (diff) | |
Remove ConfigurationChangeItem pooling (17/n).
Remove the use of ObjectPool in the creation and management of
ConfigurationChangeItem 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:TransactionParcelTests
Flag: EXEMPT removing com.android.window.flags.disable_object_pool
Change-Id: I41b8161591264eb56b3f01ba778a1fa79d198ae6
5 files changed, 37 insertions, 130 deletions
| diff --git a/core/java/android/app/servertransaction/ConfigurationChangeItem.java b/core/java/android/app/servertransaction/ConfigurationChangeItem.java index 22da706cc7f4..123d7926160c 100644 --- a/core/java/android/app/servertransaction/ConfigurationChangeItem.java +++ b/core/java/android/app/servertransaction/ConfigurationChangeItem.java @@ -16,6 +16,8 @@  package android.app.servertransaction; +import static java.util.Objects.requireNonNull; +  import android.annotation.NonNull;  import android.annotation.Nullable;  import android.app.ClientTransactionHandler; @@ -27,12 +29,20 @@ import java.util.Objects;  /**   * App configuration change message. + *   * @hide   */  public class ConfigurationChangeItem extends ClientTransactionItem { -    private Configuration mConfiguration; -    private int mDeviceId; +    @NonNull +    private final Configuration mConfiguration; + +    private final int mDeviceId; + +    public ConfigurationChangeItem(@NonNull Configuration config, int deviceId) { +        mConfiguration = new Configuration(config); +        mDeviceId = deviceId; +    }      @Override      public void preExecute(@NonNull ClientTransactionHandler client) { @@ -46,55 +56,31 @@ public class ConfigurationChangeItem extends ClientTransactionItem {          client.handleConfigurationChanged(mConfiguration, mDeviceId);      } -    // ObjectPoolItem implementation - -    private ConfigurationChangeItem() {} - -    /** Obtain an instance initialized with provided params. */ -    public static ConfigurationChangeItem obtain(@NonNull Configuration config, int deviceId) { -        ConfigurationChangeItem instance = ObjectPool.obtain(ConfigurationChangeItem.class); -        if (instance == null) { -            instance = new ConfigurationChangeItem(); -        } -        instance.mConfiguration = new Configuration(config); -        instance.mDeviceId = deviceId; - -        return instance; -    } - -    @Override -    public void recycle() { -        mConfiguration = null; -        mDeviceId = 0; -        ObjectPool.recycle(this); -    } - -      // Parcelable implementation -    /** Write to Parcel. */ +    /** Writes to Parcel. */      @Override      public void writeToParcel(Parcel dest, int flags) {          dest.writeTypedObject(mConfiguration, flags);          dest.writeInt(mDeviceId);      } -    /** Read from Parcel. */ +    /** Reads from Parcel. */      private ConfigurationChangeItem(Parcel in) { -        mConfiguration = in.readTypedObject(Configuration.CREATOR); +        mConfiguration = requireNonNull(in.readTypedObject(Configuration.CREATOR));          mDeviceId = in.readInt();      }      public static final @android.annotation.NonNull Creator<ConfigurationChangeItem> CREATOR = -            new Creator<ConfigurationChangeItem>() { -        public ConfigurationChangeItem createFromParcel(Parcel in) { -            return new ConfigurationChangeItem(in); -        } - -        public ConfigurationChangeItem[] newArray(int size) { -            return new ConfigurationChangeItem[size]; -        } -    }; +            new Creator<>() { +                public ConfigurationChangeItem createFromParcel(Parcel in) { +                    return new ConfigurationChangeItem(in); +                } + +                public ConfigurationChangeItem[] newArray(int size) { +                    return new ConfigurationChangeItem[size]; +                } +            };      @Override      public boolean equals(@Nullable Object o) { diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index c7d5f4182473..24f6ceaf786c 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -254,8 +254,8 @@ public class ActivityThreadTest {          try {              // Send process level config change.              ClientTransaction transaction = newTransaction(activityThread); -            transaction.addTransactionItem(ConfigurationChangeItem.obtain( -                    newConfig, DEVICE_ID_INVALID)); +            transaction.addTransactionItem( +                    new ConfigurationChangeItem(newConfig, DEVICE_ID_INVALID));              appThread.scheduleTransaction(transaction);              InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -474,15 +474,15 @@ public class ActivityThreadTest {          activity.mTestLatch = new CountDownLatch(1);          ClientTransaction transaction = newTransaction(activityThread); -        transaction.addTransactionItem(ConfigurationChangeItem.obtain( -                processConfigLandscape, DEVICE_ID_INVALID)); +        transaction.addTransactionItem( +                new ConfigurationChangeItem(processConfigLandscape, DEVICE_ID_INVALID));          appThread.scheduleTransaction(transaction);          transaction = newTransaction(activityThread);          transaction.addTransactionItem(new ActivityConfigurationChangeItem(                  activity.getActivityToken(), activityConfigLandscape, new ActivityWindowInfo())); -        transaction.addTransactionItem(ConfigurationChangeItem.obtain( -                processConfigPortrait, DEVICE_ID_INVALID)); +        transaction.addTransactionItem( +                new ConfigurationChangeItem(processConfigPortrait, DEVICE_ID_INVALID));          transaction.addTransactionItem(new ActivityConfigurationChangeItem(                  activity.getActivityToken(), activityConfigPortrait, new ActivityWindowInfo()));          appThread.scheduleTransaction(transaction); diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java deleted file mode 100644 index c068cdf6c93d..000000000000 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.app.servertransaction; - -import static android.app.servertransaction.TestUtils.config; - -import static org.junit.Assert.assertNotSame; - -import android.annotation.NonNull; -import android.os.IBinder; -import android.platform.test.annotations.Presubmit; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.SmallTest; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -import java.util.function.Supplier; - -/** - * Tests for {@link ObjectPool}. - * - * <p>Build/Install/Run: - *  atest FrameworksCoreTests:ObjectPoolTests - * - * <p>This test class is a part of Window Manager Service tests and specified in - * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. - */ -@RunWith(AndroidJUnit4.class) -@SmallTest -@Presubmit -public class ObjectPoolTests { - -    @Rule -    public final MockitoRule mocks = MockitoJUnit.rule(); - -    @Mock -    private IBinder mActivityToken; - -    // 1. Check if two obtained objects from pool are not the same. -    // 2. Check if the state of the object is cleared after recycling. -    // 3. Check if the same object is obtained from pool after recycling. - -    @Test -    public void testRecycleConfigurationChangeItem() { -        testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1)); -    } - -    private void testRecycle(@NonNull Supplier<? extends ObjectPoolItem> obtain) { -        // Reuse the same object after recycle. -        final ObjectPoolItem item = obtain.get(); -        item.recycle(); -        final ObjectPoolItem item2 = obtain.get(); - -        assertNotSame(item, item2);  // Different instance. - -        // Create new object when the pool is empty. -        final ObjectPoolItem item3 = obtain.get(); - -        assertNotSame(item, item3); -    } -} diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index 79b4b4f08ead..59d8c8dd3c60 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -74,11 +74,13 @@ public class TransactionParcelTests {      @Test      public void testConfigurationChange() {          // Write to parcel -        ConfigurationChangeItem item = ConfigurationChangeItem.obtain(config(), 1 /* deviceId */); +        final ConfigurationChangeItem item = +                new ConfigurationChangeItem(config(), 1 /* deviceId */);          writeAndPrepareForReading(item);          // Read from parcel and assert -        ConfigurationChangeItem result = ConfigurationChangeItem.CREATOR.createFromParcel(mParcel); +        final ConfigurationChangeItem result = +                ConfigurationChangeItem.CREATOR.createFromParcel(mParcel);          assertEquals(item.hashCode(), result.hashCode());          assertEquals(item, result); diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 984caf1c692b..2bae0a826417 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -437,7 +437,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio              final ConfigurationChangeItem configurationChangeItem;              synchronized (mLastReportedConfiguration) {                  onConfigurationChangePreScheduled(mLastReportedConfiguration); -                configurationChangeItem = ConfigurationChangeItem.obtain( +                configurationChangeItem = new ConfigurationChangeItem(                          mLastReportedConfiguration, mLastTopActivityDeviceId);              }              // Schedule immediately to make sure the app component (e.g. receiver, service) can get @@ -1721,8 +1721,8 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio          }          onConfigurationChangePreScheduled(config); -        scheduleClientTransactionItem(thread, ConfigurationChangeItem.obtain( -                config, mLastTopActivityDeviceId)); +        scheduleClientTransactionItem( +                thread, new ConfigurationChangeItem(config, mLastTopActivityDeviceId));      }      private void onConfigurationChangePreScheduled(@NonNull Configuration config) { |