Loading api/system-current.txt +1 −13 Original line number Diff line number Diff line Loading @@ -5835,6 +5835,7 @@ package android.provider { method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(String, String, String, boolean); field public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager"; field public static final String NAMESPACE_AUTOFILL = "autofill"; field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture"; field public static final String NAMESPACE_GAME_DRIVER = "game_driver"; Loading @@ -5843,19 +5844,6 @@ package android.provider { field public static final String NAMESPACE_SYSTEMUI = "systemui"; } public static interface DeviceConfig.ActivityManager { field public static final String KEY_COMPACT_ACTION_1 = "compact_action_1"; field public static final String KEY_COMPACT_ACTION_2 = "compact_action_2"; field public static final String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate"; field public static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1"; field public static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2"; field public static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3"; field public static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4"; field public static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes"; field public static final String KEY_USE_COMPACTION = "use_compaction"; field public static final String NAMESPACE = "activity_manager"; } public static interface DeviceConfig.ActivityManagerNativeBoot { field public static final String NAMESPACE = "activity_manager_native_boot"; field public static final String OFFLOAD_QUEUE_ENABLED = "offload_queue_enabled"; Loading core/java/android/provider/DeviceConfig.java +9 −29 Original line number Diff line number Diff line Loading @@ -54,6 +54,15 @@ public final class DeviceConfig { */ public static final Uri CONTENT_URI = Uri.parse("content://" + Settings.AUTHORITY + "/config"); /** * Namespace for activity manager related features. These features will be applied * immediately upon change. * * @hide */ @SystemApi public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager"; /** * Namespace for all Game Driver features. * Loading Loading @@ -280,35 +289,6 @@ public final class DeviceConfig { String PRIV_APPS_OOB_WHITELIST = "priv_apps_oob_whitelist"; } /** * Namespace for activity manager related features. These features will be applied * immediately upon change. * * @hide */ @SystemApi public interface ActivityManager { String NAMESPACE = "activity_manager"; /** * App compaction flags. See {@link com.android.server.am.AppCompactor}. */ String KEY_USE_COMPACTION = "use_compaction"; String KEY_COMPACT_ACTION_1 = "compact_action_1"; String KEY_COMPACT_ACTION_2 = "compact_action_2"; String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1"; String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2"; String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3"; String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4"; String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate"; /** * Maximum number of cached processes. See * {@link com.android.server.am.ActivityManagerConstants}. */ String KEY_MAX_CACHED_PROCESSES = "max_cached_processes"; } /** * Namespace for {@link AttentionManagerService} related features. * Loading services/core/java/com/android/server/am/ActivityManagerConstants.java +8 −4 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.server.am; import static android.provider.DeviceConfig.ActivityManager.KEY_MAX_CACHED_PROCESSES; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK; import android.app.ActivityThread; Loading Loading @@ -105,6 +103,12 @@ final class ActivityManagerConstants extends ContentObserver { private static final long DEFAULT_MEMORY_INFO_THROTTLE_TIME = 5*60*1000; private static final long DEFAULT_TOP_TO_FGS_GRACE_DURATION = 15 * 1000; // Flag stored in the DeviceConfig API. /** * Maximum number of cached processes. */ private static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes"; // Maximum number of cached processes we will allow. public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES; Loading Loading @@ -292,7 +296,7 @@ final class ActivityManagerConstants extends ContentObserver { updateConstants(); updateActivityStartsLoggingEnabled(); updateBackgroundActivityStartsEnabled(); DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, ActivityThread.currentApplication().getMainExecutor(), mOnDeviceConfigChangedListener); updateMaxCachedProcesses(); Loading Loading @@ -412,7 +416,7 @@ final class ActivityManagerConstants extends ContentObserver { private void updateMaxCachedProcesses() { String maxCachedProcessesFlag = DeviceConfig.getProperty( DeviceConfig.ActivityManager.NAMESPACE, KEY_MAX_CACHED_PROCESSES); DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MAX_CACHED_PROCESSES); try { CUR_MAX_CACHED_PROCESSES = mOverrideMaxCachedProcesses < 0 ? (TextUtils.isEmpty(maxCachedProcessesFlag) Loading services/core/java/com/android/server/am/AppCompactor.java +20 −17 Original line number Diff line number Diff line Loading @@ -17,14 +17,6 @@ package com.android.server.am; import static android.os.Process.THREAD_PRIORITY_FOREGROUND; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4; import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION; import android.app.ActivityManager; import android.app.ActivityThread; Loading @@ -51,6 +43,17 @@ import java.util.Random; public final class AppCompactor { // Flags stored in the DeviceConfig API. @VisibleForTesting static final String KEY_USE_COMPACTION = "use_compaction"; @VisibleForTesting static final String KEY_COMPACT_ACTION_1 = "compact_action_1"; @VisibleForTesting static final String KEY_COMPACT_ACTION_2 = "compact_action_2"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4"; @VisibleForTesting static final String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate"; // Phenotype sends int configurations and we map them to the strings we'll use on device, // preventing a weird string value entering the kernel. private static final int COMPACT_ACTION_FILE_FLAG = 1; Loading Loading @@ -165,7 +168,7 @@ public final class AppCompactor { * starts the background thread if necessary. */ public void init() { DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, ActivityThread.currentApplication().getMainExecutor(), mOnFlagsChangedListener); synchronized (mPhenotypeFlagLock) { updateUseCompaction(); Loading Loading @@ -228,7 +231,7 @@ public final class AppCompactor { @GuardedBy("mPhenotypeFlagLock") private void updateUseCompaction() { String useCompactionFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_USE_COMPACTION); mUseCompaction = TextUtils.isEmpty(useCompactionFlag) ? DEFAULT_USE_COMPACTION : Boolean.parseBoolean(useCompactionFlag); Loading @@ -241,10 +244,10 @@ public final class AppCompactor { @GuardedBy("mPhenotypeFlagLock") private void updateCompactionActions() { String compactAction1Flag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_ACTION_1); String compactAction2Flag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_ACTION_2); int compactAction1 = DEFAULT_COMPACT_ACTION_1; Loading @@ -271,16 +274,16 @@ public final class AppCompactor { private void updateCompactionThrottles() { boolean useThrottleDefaults = false; String throttleSomeSomeFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_1); String throttleSomeFullFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_2); String throttleFullSomeFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_3); String throttleFullFullFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_4); if (TextUtils.isEmpty(throttleSomeSomeFlag) || TextUtils.isEmpty(throttleSomeFullFlag) Loading Loading @@ -309,7 +312,7 @@ public final class AppCompactor { @GuardedBy("mPhenotypeFlagLock") private void updateStatsdSampleRate() { String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_STATSD_SAMPLE_RATE); try { mStatsdSampleRate = TextUtils.isEmpty(sampleRateFlag) Loading services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java +58 −67 Original line number Diff line number Diff line Loading @@ -16,15 +16,6 @@ package com.android.server.am; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4; import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION; import static com.android.server.am.ActivityManagerService.Injector; import static com.android.server.am.AppCompactor.compactActionIntToString; Loading Loading @@ -117,28 +108,28 @@ public final class AppCompactorTest { // When the DeviceConfig already has a flag value stored (note this test will need to // change if the default value changes from false). assertThat(AppCompactor.DEFAULT_USE_COMPACTION).isFalse(); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "true", false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "true", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_1 + 1 % 4) + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_2 + 1 % 4) + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_1, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_1, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_2, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_2, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_3, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_3, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_4, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_4, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false); // Then calling init will read and set that flag. Loading Loading @@ -169,8 +160,8 @@ public final class AppCompactorTest { // When we call init and change some the flag value... mCompactorUnderTest.init(); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "true", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "true", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then that new flag value is updated in the implementation. Loading @@ -179,8 +170,8 @@ public final class AppCompactorTest { // And again, setting the flag the other way. mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "false", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "false", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.useCompaction()).isFalse(); } Loading @@ -193,8 +184,8 @@ public final class AppCompactorTest { // When we push an invalid flag value... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "foobar", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "foobar", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then we set the default. Loading @@ -212,11 +203,11 @@ public final class AppCompactorTest { for (int i = 1; i < 5; i++) { mCountDown = new CountDownLatch(2); int expectedSome = (AppCompactor.DEFAULT_COMPACT_ACTION_1 + i) % 4 + 1; DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false); int expectedFull = (AppCompactor.DEFAULT_COMPACT_ACTION_2 + i) % 4 + 1; DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then the updates are reflected in the flags. Loading @@ -233,10 +224,10 @@ public final class AppCompactorTest { // When we override new values for the compaction action with bad values ... mCountDown = new CountDownLatch(2); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, "foo", false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then the default values are reflected in the flag Loading @@ -246,10 +237,10 @@ public final class AppCompactorTest { compactActionIntToString(AppCompactor.DEFAULT_COMPACT_ACTION_2)); mCountDown = new CountDownLatch(2); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, "", false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, "", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, "", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, "", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactActionSome).isEqualTo( Loading @@ -264,17 +255,17 @@ public final class AppCompactorTest { // When we override new reasonable throttle values after init... mCountDown = new CountDownLatch(4); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_1, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_1, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_2, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_2, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_3, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_3, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_4, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_4, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading @@ -296,8 +287,8 @@ public final class AppCompactorTest { // When one of the throttles is overridden with a bad value... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_1, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_1, "foo", false); // Then all the throttles have the defaults set. assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( Loading @@ -311,8 +302,8 @@ public final class AppCompactorTest { // Repeat for each of the throttle keys. mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_2, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_2, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( AppCompactor.DEFAULT_COMPACT_THROTTLE_1); Loading @@ -324,8 +315,8 @@ public final class AppCompactorTest { AppCompactor.DEFAULT_COMPACT_THROTTLE_4); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_3, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_3, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( AppCompactor.DEFAULT_COMPACT_THROTTLE_1); Loading @@ -337,8 +328,8 @@ public final class AppCompactorTest { AppCompactor.DEFAULT_COMPACT_THROTTLE_4); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_4, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_4, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( AppCompactor.DEFAULT_COMPACT_THROTTLE_1); Loading @@ -356,8 +347,8 @@ public final class AppCompactorTest { // When we override mStatsdSampleRate with a reasonable values ... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading @@ -373,8 +364,8 @@ public final class AppCompactorTest { // When we override mStatsdSampleRate with a reasonable values ... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then that override is reflected in the compactor. Loading @@ -389,8 +380,8 @@ public final class AppCompactorTest { // When we override mStatsdSampleRate with an value outside of [0..1]... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(-1.0f), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading @@ -398,8 +389,8 @@ public final class AppCompactorTest { assertThat(mCompactorUnderTest.mStatsdSampleRate).isEqualTo(0.0f); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(1.01f), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading Loading
api/system-current.txt +1 −13 Original line number Diff line number Diff line Loading @@ -5835,6 +5835,7 @@ package android.provider { method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(String, String, String, boolean); field public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager"; field public static final String NAMESPACE_AUTOFILL = "autofill"; field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture"; field public static final String NAMESPACE_GAME_DRIVER = "game_driver"; Loading @@ -5843,19 +5844,6 @@ package android.provider { field public static final String NAMESPACE_SYSTEMUI = "systemui"; } public static interface DeviceConfig.ActivityManager { field public static final String KEY_COMPACT_ACTION_1 = "compact_action_1"; field public static final String KEY_COMPACT_ACTION_2 = "compact_action_2"; field public static final String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate"; field public static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1"; field public static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2"; field public static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3"; field public static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4"; field public static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes"; field public static final String KEY_USE_COMPACTION = "use_compaction"; field public static final String NAMESPACE = "activity_manager"; } public static interface DeviceConfig.ActivityManagerNativeBoot { field public static final String NAMESPACE = "activity_manager_native_boot"; field public static final String OFFLOAD_QUEUE_ENABLED = "offload_queue_enabled"; Loading
core/java/android/provider/DeviceConfig.java +9 −29 Original line number Diff line number Diff line Loading @@ -54,6 +54,15 @@ public final class DeviceConfig { */ public static final Uri CONTENT_URI = Uri.parse("content://" + Settings.AUTHORITY + "/config"); /** * Namespace for activity manager related features. These features will be applied * immediately upon change. * * @hide */ @SystemApi public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager"; /** * Namespace for all Game Driver features. * Loading Loading @@ -280,35 +289,6 @@ public final class DeviceConfig { String PRIV_APPS_OOB_WHITELIST = "priv_apps_oob_whitelist"; } /** * Namespace for activity manager related features. These features will be applied * immediately upon change. * * @hide */ @SystemApi public interface ActivityManager { String NAMESPACE = "activity_manager"; /** * App compaction flags. See {@link com.android.server.am.AppCompactor}. */ String KEY_USE_COMPACTION = "use_compaction"; String KEY_COMPACT_ACTION_1 = "compact_action_1"; String KEY_COMPACT_ACTION_2 = "compact_action_2"; String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1"; String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2"; String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3"; String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4"; String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate"; /** * Maximum number of cached processes. See * {@link com.android.server.am.ActivityManagerConstants}. */ String KEY_MAX_CACHED_PROCESSES = "max_cached_processes"; } /** * Namespace for {@link AttentionManagerService} related features. * Loading
services/core/java/com/android/server/am/ActivityManagerConstants.java +8 −4 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.server.am; import static android.provider.DeviceConfig.ActivityManager.KEY_MAX_CACHED_PROCESSES; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK; import android.app.ActivityThread; Loading Loading @@ -105,6 +103,12 @@ final class ActivityManagerConstants extends ContentObserver { private static final long DEFAULT_MEMORY_INFO_THROTTLE_TIME = 5*60*1000; private static final long DEFAULT_TOP_TO_FGS_GRACE_DURATION = 15 * 1000; // Flag stored in the DeviceConfig API. /** * Maximum number of cached processes. */ private static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes"; // Maximum number of cached processes we will allow. public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES; Loading Loading @@ -292,7 +296,7 @@ final class ActivityManagerConstants extends ContentObserver { updateConstants(); updateActivityStartsLoggingEnabled(); updateBackgroundActivityStartsEnabled(); DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, ActivityThread.currentApplication().getMainExecutor(), mOnDeviceConfigChangedListener); updateMaxCachedProcesses(); Loading Loading @@ -412,7 +416,7 @@ final class ActivityManagerConstants extends ContentObserver { private void updateMaxCachedProcesses() { String maxCachedProcessesFlag = DeviceConfig.getProperty( DeviceConfig.ActivityManager.NAMESPACE, KEY_MAX_CACHED_PROCESSES); DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MAX_CACHED_PROCESSES); try { CUR_MAX_CACHED_PROCESSES = mOverrideMaxCachedProcesses < 0 ? (TextUtils.isEmpty(maxCachedProcessesFlag) Loading
services/core/java/com/android/server/am/AppCompactor.java +20 −17 Original line number Diff line number Diff line Loading @@ -17,14 +17,6 @@ package com.android.server.am; import static android.os.Process.THREAD_PRIORITY_FOREGROUND; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4; import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION; import android.app.ActivityManager; import android.app.ActivityThread; Loading @@ -51,6 +43,17 @@ import java.util.Random; public final class AppCompactor { // Flags stored in the DeviceConfig API. @VisibleForTesting static final String KEY_USE_COMPACTION = "use_compaction"; @VisibleForTesting static final String KEY_COMPACT_ACTION_1 = "compact_action_1"; @VisibleForTesting static final String KEY_COMPACT_ACTION_2 = "compact_action_2"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3"; @VisibleForTesting static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4"; @VisibleForTesting static final String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate"; // Phenotype sends int configurations and we map them to the strings we'll use on device, // preventing a weird string value entering the kernel. private static final int COMPACT_ACTION_FILE_FLAG = 1; Loading Loading @@ -165,7 +168,7 @@ public final class AppCompactor { * starts the background thread if necessary. */ public void init() { DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, ActivityThread.currentApplication().getMainExecutor(), mOnFlagsChangedListener); synchronized (mPhenotypeFlagLock) { updateUseCompaction(); Loading Loading @@ -228,7 +231,7 @@ public final class AppCompactor { @GuardedBy("mPhenotypeFlagLock") private void updateUseCompaction() { String useCompactionFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_USE_COMPACTION); mUseCompaction = TextUtils.isEmpty(useCompactionFlag) ? DEFAULT_USE_COMPACTION : Boolean.parseBoolean(useCompactionFlag); Loading @@ -241,10 +244,10 @@ public final class AppCompactor { @GuardedBy("mPhenotypeFlagLock") private void updateCompactionActions() { String compactAction1Flag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_ACTION_1); String compactAction2Flag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_ACTION_2); int compactAction1 = DEFAULT_COMPACT_ACTION_1; Loading @@ -271,16 +274,16 @@ public final class AppCompactor { private void updateCompactionThrottles() { boolean useThrottleDefaults = false; String throttleSomeSomeFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_1); String throttleSomeFullFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_2); String throttleFullSomeFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_3); String throttleFullFullFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_THROTTLE_4); if (TextUtils.isEmpty(throttleSomeSomeFlag) || TextUtils.isEmpty(throttleSomeFullFlag) Loading Loading @@ -309,7 +312,7 @@ public final class AppCompactor { @GuardedBy("mPhenotypeFlagLock") private void updateStatsdSampleRate() { String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE, String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_COMPACT_STATSD_SAMPLE_RATE); try { mStatsdSampleRate = TextUtils.isEmpty(sampleRateFlag) Loading
services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java +58 −67 Original line number Diff line number Diff line Loading @@ -16,15 +16,6 @@ package com.android.server.am; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3; import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4; import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION; import static com.android.server.am.ActivityManagerService.Injector; import static com.android.server.am.AppCompactor.compactActionIntToString; Loading Loading @@ -117,28 +108,28 @@ public final class AppCompactorTest { // When the DeviceConfig already has a flag value stored (note this test will need to // change if the default value changes from false). assertThat(AppCompactor.DEFAULT_USE_COMPACTION).isFalse(); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "true", false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "true", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_1 + 1 % 4) + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_2 + 1 % 4) + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_1, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_1, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_2, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_2, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_3, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_3, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_4, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_4, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false); // Then calling init will read and set that flag. Loading Loading @@ -169,8 +160,8 @@ public final class AppCompactorTest { // When we call init and change some the flag value... mCompactorUnderTest.init(); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "true", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "true", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then that new flag value is updated in the implementation. Loading @@ -179,8 +170,8 @@ public final class AppCompactorTest { // And again, setting the flag the other way. mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "false", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "false", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.useCompaction()).isFalse(); } Loading @@ -193,8 +184,8 @@ public final class AppCompactorTest { // When we push an invalid flag value... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_USE_COMPACTION, "foobar", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_USE_COMPACTION, "foobar", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then we set the default. Loading @@ -212,11 +203,11 @@ public final class AppCompactorTest { for (int i = 1; i < 5; i++) { mCountDown = new CountDownLatch(2); int expectedSome = (AppCompactor.DEFAULT_COMPACT_ACTION_1 + i) % 4 + 1; DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false); int expectedFull = (AppCompactor.DEFAULT_COMPACT_ACTION_2 + i) % 4 + 1; DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then the updates are reflected in the flags. Loading @@ -233,10 +224,10 @@ public final class AppCompactorTest { // When we override new values for the compaction action with bad values ... mCountDown = new CountDownLatch(2); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, "foo", false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then the default values are reflected in the flag Loading @@ -246,10 +237,10 @@ public final class AppCompactorTest { compactActionIntToString(AppCompactor.DEFAULT_COMPACT_ACTION_2)); mCountDown = new CountDownLatch(2); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_1, "", false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_ACTION_2, "", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_1, "", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_ACTION_2, "", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactActionSome).isEqualTo( Loading @@ -264,17 +255,17 @@ public final class AppCompactorTest { // When we override new reasonable throttle values after init... mCountDown = new CountDownLatch(4); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_1, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_1, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_2, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_2, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_3, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_3, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_4, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_4, Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading @@ -296,8 +287,8 @@ public final class AppCompactorTest { // When one of the throttles is overridden with a bad value... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_1, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_1, "foo", false); // Then all the throttles have the defaults set. assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( Loading @@ -311,8 +302,8 @@ public final class AppCompactorTest { // Repeat for each of the throttle keys. mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_2, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_2, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( AppCompactor.DEFAULT_COMPACT_THROTTLE_1); Loading @@ -324,8 +315,8 @@ public final class AppCompactorTest { AppCompactor.DEFAULT_COMPACT_THROTTLE_4); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_3, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_3, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( AppCompactor.DEFAULT_COMPACT_THROTTLE_1); Loading @@ -337,8 +328,8 @@ public final class AppCompactorTest { AppCompactor.DEFAULT_COMPACT_THROTTLE_4); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_THROTTLE_4, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_THROTTLE_4, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo( AppCompactor.DEFAULT_COMPACT_THROTTLE_1); Loading @@ -356,8 +347,8 @@ public final class AppCompactorTest { // When we override mStatsdSampleRate with a reasonable values ... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading @@ -373,8 +364,8 @@ public final class AppCompactorTest { // When we override mStatsdSampleRate with a reasonable values ... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); // Then that override is reflected in the compactor. Loading @@ -389,8 +380,8 @@ public final class AppCompactorTest { // When we override mStatsdSampleRate with an value outside of [0..1]... mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(-1.0f), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading @@ -398,8 +389,8 @@ public final class AppCompactorTest { assertThat(mCompactorUnderTest.mStatsdSampleRate).isEqualTo(0.0f); mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE, KEY_COMPACT_STATSD_SAMPLE_RATE, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, Float.toString(1.01f), false); assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue(); Loading