Loading apex/jobscheduler/service/aconfig/device_idle.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -37,3 +37,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "stop_power_save_temp_whitelist_broadcast" namespace: "backstage_power" description: "Stop sending the power_save_temp_whitelist broadcast" bug: "427275343" metadata { purpose: PURPOSE_BUGFIX } } apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +9 −3 Original line number Diff line number Diff line Loading @@ -4498,10 +4498,12 @@ public class DeviceIdleController extends SystemService private void reportTempWhitelistChangedLocked(final int uid, final boolean added) { mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, uid, added ? 1 : 0) .sendToTarget(); getContext().sendBroadcastAsUser(mPowerSaveTempWhitelistChangedIntent, UserHandle.SYSTEM, null /* receiverPermission */, if (!Flags.stopPowerSaveTempWhitelistBroadcast()) { getContext().sendBroadcastAsUser(mPowerSaveTempWhitelistChangedIntent, UserHandle.SYSTEM, null /* receiverPermission */, mPowerSaveTempWhilelistChangedOptions); } } private void passWhiteListsToForceAppStandbyTrackerLocked() { mAppStateTracker.setPowerSaveExemptionListAppIds( Loading Loading @@ -5264,6 +5266,10 @@ public class DeviceIdleController extends SystemService pw.print(Flags.FLAG_REMOVE_IDLE_LOCATION); pw.print("="); pw.println(Flags.removeIdleLocation()); pw.print(" "); pw.print(Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST); pw.print("="); pw.println(Flags.stopPowerSaveTempWhitelistBroadcast()); pw.println(); synchronized (this) { Loading services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java +43 −1 Original line number Diff line number Diff line Loading @@ -438,7 +438,8 @@ public class DeviceIdleControllerTest { @Test @EnableFlags(Flags.FLAG_USE_CPU_TIME_FOR_TEMP_ALLOWLIST) public void testTempAllowlistCountsUptime() { @DisableFlags(Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST) public void testTempAllowlistCountsUptime_flagDisabled() { doNothing().when(getContext()).sendBroadcastAsUser(any(), any(), any(), any()); final int testUid = 12345; final long durationMs = 4300; Loading Loading @@ -476,6 +477,47 @@ public class DeviceIdleControllerTest { assertFalse(mDeviceIdleController.mTempWhitelistAppIdEndTimes.contains(testUid)); } @Test @EnableFlags({Flags.FLAG_USE_CPU_TIME_FOR_TEMP_ALLOWLIST, Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST}) public void testTempAllowlistCountsUptime() { final int testUid = 12345; final long durationMs = 4300; final long startTime = 100; // Arbitrary starting point in time. mInjector.nowUptime = mInjector.nowElapsed = startTime; mDeviceIdleController.addPowerSaveTempWhitelistAppDirectInternal(0, testUid, durationMs, TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED, true, REASON_OTHER, "test"); assertEquals(startTime + durationMs, mDeviceIdleController.mTempWhitelistAppIdEndTimes.get(testUid).first.value); final InOrder inorder = inOrder(mHandler); // mHandler is already stubbed to do nothing on handleMessage. inorder.verify(mHandler).sendMessageDelayed( argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid), eq(durationMs)); mInjector.nowElapsed += durationMs; mInjector.nowUptime += 2; // Elapsed time moved past the expiration but not uptime. The check should be rescheduled. mDeviceIdleController.checkTempAppWhitelistTimeout(testUid); inorder.verify(mHandler).sendMessageDelayed( argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid), eq(durationMs - 2)); assertEquals(startTime + durationMs, mDeviceIdleController.mTempWhitelistAppIdEndTimes.get(testUid).first.value); mInjector.nowUptime += durationMs; // Uptime moved past the expiration time. Uid should be removed from the temp allowlist. mDeviceIdleController.checkTempAppWhitelistTimeout(testUid); inorder.verify(mHandler, never()).sendMessageDelayed( argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid), anyLong()); assertFalse(mDeviceIdleController.mTempWhitelistAppIdEndTimes.contains(testUid)); verify(getContext(), never()).sendBroadcastAsUser(any(), any(), any(), any()); } @Test public void testUpdateInteractivityLocked() { doReturn(false).when(mPowerManager).isInteractive(); Loading Loading
apex/jobscheduler/service/aconfig/device_idle.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -37,3 +37,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "stop_power_save_temp_whitelist_broadcast" namespace: "backstage_power" description: "Stop sending the power_save_temp_whitelist broadcast" bug: "427275343" metadata { purpose: PURPOSE_BUGFIX } }
apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +9 −3 Original line number Diff line number Diff line Loading @@ -4498,10 +4498,12 @@ public class DeviceIdleController extends SystemService private void reportTempWhitelistChangedLocked(final int uid, final boolean added) { mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, uid, added ? 1 : 0) .sendToTarget(); getContext().sendBroadcastAsUser(mPowerSaveTempWhitelistChangedIntent, UserHandle.SYSTEM, null /* receiverPermission */, if (!Flags.stopPowerSaveTempWhitelistBroadcast()) { getContext().sendBroadcastAsUser(mPowerSaveTempWhitelistChangedIntent, UserHandle.SYSTEM, null /* receiverPermission */, mPowerSaveTempWhilelistChangedOptions); } } private void passWhiteListsToForceAppStandbyTrackerLocked() { mAppStateTracker.setPowerSaveExemptionListAppIds( Loading Loading @@ -5264,6 +5266,10 @@ public class DeviceIdleController extends SystemService pw.print(Flags.FLAG_REMOVE_IDLE_LOCATION); pw.print("="); pw.println(Flags.removeIdleLocation()); pw.print(" "); pw.print(Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST); pw.print("="); pw.println(Flags.stopPowerSaveTempWhitelistBroadcast()); pw.println(); synchronized (this) { Loading
services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java +43 −1 Original line number Diff line number Diff line Loading @@ -438,7 +438,8 @@ public class DeviceIdleControllerTest { @Test @EnableFlags(Flags.FLAG_USE_CPU_TIME_FOR_TEMP_ALLOWLIST) public void testTempAllowlistCountsUptime() { @DisableFlags(Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST) public void testTempAllowlistCountsUptime_flagDisabled() { doNothing().when(getContext()).sendBroadcastAsUser(any(), any(), any(), any()); final int testUid = 12345; final long durationMs = 4300; Loading Loading @@ -476,6 +477,47 @@ public class DeviceIdleControllerTest { assertFalse(mDeviceIdleController.mTempWhitelistAppIdEndTimes.contains(testUid)); } @Test @EnableFlags({Flags.FLAG_USE_CPU_TIME_FOR_TEMP_ALLOWLIST, Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST}) public void testTempAllowlistCountsUptime() { final int testUid = 12345; final long durationMs = 4300; final long startTime = 100; // Arbitrary starting point in time. mInjector.nowUptime = mInjector.nowElapsed = startTime; mDeviceIdleController.addPowerSaveTempWhitelistAppDirectInternal(0, testUid, durationMs, TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED, true, REASON_OTHER, "test"); assertEquals(startTime + durationMs, mDeviceIdleController.mTempWhitelistAppIdEndTimes.get(testUid).first.value); final InOrder inorder = inOrder(mHandler); // mHandler is already stubbed to do nothing on handleMessage. inorder.verify(mHandler).sendMessageDelayed( argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid), eq(durationMs)); mInjector.nowElapsed += durationMs; mInjector.nowUptime += 2; // Elapsed time moved past the expiration but not uptime. The check should be rescheduled. mDeviceIdleController.checkTempAppWhitelistTimeout(testUid); inorder.verify(mHandler).sendMessageDelayed( argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid), eq(durationMs - 2)); assertEquals(startTime + durationMs, mDeviceIdleController.mTempWhitelistAppIdEndTimes.get(testUid).first.value); mInjector.nowUptime += durationMs; // Uptime moved past the expiration time. Uid should be removed from the temp allowlist. mDeviceIdleController.checkTempAppWhitelistTimeout(testUid); inorder.verify(mHandler, never()).sendMessageDelayed( argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid), anyLong()); assertFalse(mDeviceIdleController.mTempWhitelistAppIdEndTimes.contains(testUid)); verify(getContext(), never()).sendBroadcastAsUser(any(), any(), any(), any()); } @Test public void testUpdateInteractivityLocked() { doReturn(false).when(mPowerManager).isInteractive(); Loading