Test deep transitions when an alarm is imminent.

This adds a test for when an alarm will fire soon. In that case, the
system should stay out of deep idle.

Bug: 116512267
Test: atest com.android.server.DeviceIdleControllerTest
Change-Id: I51f10104422579ad64766c03366f0e952e3ff1ac
This commit is contained in:
Kweku Adams
2018-10-09 18:26:56 -07:00
parent fa66c22c20
commit bf86938b2f

View File

@@ -359,6 +359,54 @@ public class DeviceIdleControllerTest {
verifyStateConditions(STATE_ACTIVE);
}
@Test
public void testStepIdleStateLocked_ValidStates_WithWakeFromIdleAlarmSoon() {
enterDeepState(STATE_ACTIVE);
// Return that there's an alarm coming soon.
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_ACTIVE);
// Everything besides ACTIVE should end up as INACTIVE since the screen would be off.
enterDeepState(STATE_INACTIVE);
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_INACTIVE);
enterDeepState(STATE_IDLE_PENDING);
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_INACTIVE);
enterDeepState(STATE_SENSING);
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_INACTIVE);
enterDeepState(STATE_LOCATING);
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_INACTIVE);
enterDeepState(STATE_IDLE);
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_INACTIVE);
enterDeepState(STATE_IDLE_MAINTENANCE);
doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
mAlarmManager).getNextWakeFromIdleTime();
mDeviceIdleController.stepIdleStateLocked("testing");
verifyStateConditions(STATE_INACTIVE);
}
@Test
public void testStepIdleStateLocked_ValidStates_NoLocationManager() {
mDeviceIdleController.setLocationManagerForTest(null);
@@ -429,7 +477,6 @@ public class DeviceIdleControllerTest {
public void testStepIdleStateLocked_ValidStates_WithLocationManager_WithProviders() {
doReturn(mock(LocationProvider.class)).when(mLocationManager).getProvider(anyString());
// Make sure the controller doesn't think there's a wake-from-idle alarm coming soon.
// TODO: add tests for when there's a wake-from-idle alarm coming soon.
doReturn(Long.MAX_VALUE).when(mAlarmManager).getNextWakeFromIdleTime();
// Set state to INACTIVE.
mDeviceIdleController.becomeActiveLocked("testing", 0);