Loading apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +18 −18 Original line number Diff line number Diff line Loading @@ -1970,7 +1970,7 @@ public class DeviceIdleController extends SystemService } break; case MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR: { updatePreIdleFactor(); maybeDoImmediateMaintenance(); maybeDoImmediateMaintenance("idle factor"); } break; case MSG_REPORT_STATIONARY_STATUS: { final DeviceIdleInternal.StationaryListener newListener = Loading Loading @@ -3517,11 +3517,11 @@ public class DeviceIdleController extends SystemService // doze alarm to after the upcoming AlarmClock alarm. scheduleAlarmLocked( mAlarmManager.getNextWakeFromIdleTime() - mInjector.getElapsedRealtime() + mConstants.QUICK_DOZE_DELAY_TIMEOUT, false); + mConstants.QUICK_DOZE_DELAY_TIMEOUT); } else { // Wait a small amount of time in case something (eg: background service from // recently closed app) needs to finish running. scheduleAlarmLocked(mConstants.QUICK_DOZE_DELAY_TIMEOUT, false); scheduleAlarmLocked(mConstants.QUICK_DOZE_DELAY_TIMEOUT); } } else if (mState == STATE_ACTIVE) { moveToStateLocked(STATE_INACTIVE, "no activity"); Loading @@ -3536,9 +3536,9 @@ public class DeviceIdleController extends SystemService // alarm to after the upcoming AlarmClock alarm. scheduleAlarmLocked( mAlarmManager.getNextWakeFromIdleTime() - mInjector.getElapsedRealtime() + delay, false); + delay); } else { scheduleAlarmLocked(delay, false); scheduleAlarmLocked(delay); } } } Loading Loading @@ -3753,7 +3753,7 @@ public class DeviceIdleController extends SystemService if (shouldUseIdleTimeoutFactorLocked()) { delay = (long) (mPreIdleFactor * delay); } scheduleAlarmLocked(delay, false); scheduleAlarmLocked(delay); moveToStateLocked(STATE_IDLE_PENDING, reason); break; case STATE_IDLE_PENDING: Loading @@ -3779,7 +3779,7 @@ public class DeviceIdleController extends SystemService case STATE_SENSING: cancelSensingTimeoutAlarmLocked(); moveToStateLocked(STATE_LOCATING, reason); scheduleAlarmLocked(mConstants.LOCATING_TIMEOUT, false); scheduleAlarmLocked(mConstants.LOCATING_TIMEOUT); LocationManager locationManager = mInjector.getLocationManager(); if (locationManager != null && locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null) { Loading Loading @@ -3819,7 +3819,7 @@ public class DeviceIdleController extends SystemService // Everything is in place to go into IDLE state. case STATE_IDLE_MAINTENANCE: moveToStateLocked(STATE_IDLE, reason); scheduleAlarmLocked(mNextIdleDelay, true); scheduleAlarmLocked(mNextIdleDelay); if (DEBUG) Slog.d(TAG, "Moved to STATE_IDLE. Next alarm in " + mNextIdleDelay + " ms."); mNextIdleDelay = (long)(mNextIdleDelay * mConstants.IDLE_FACTOR); Loading @@ -3842,7 +3842,7 @@ public class DeviceIdleController extends SystemService mActiveIdleOpCount = 1; mActiveIdleWakeLock.acquire(); moveToStateLocked(STATE_IDLE_MAINTENANCE, reason); scheduleAlarmLocked(mNextIdlePendingDelay, false); scheduleAlarmLocked(mNextIdlePendingDelay); if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE to STATE_IDLE_MAINTENANCE. " + "Next alarm in " + mNextIdlePendingDelay + " ms."); mMaintenanceStartTime = SystemClock.elapsedRealtime(); Loading Loading @@ -4013,19 +4013,18 @@ public class DeviceIdleController extends SystemService if (Math.abs(delay - newDelay) < MIN_STATE_STEP_ALARM_CHANGE) { return; } scheduleAlarmLocked(newDelay, false); scheduleAlarmLocked(newDelay); } } } private void maybeDoImmediateMaintenance() { private void maybeDoImmediateMaintenance(String reason) { synchronized (this) { if (mState == STATE_IDLE) { long duration = SystemClock.elapsedRealtime() - mIdleStartTime; /* Let's trgger a immediate maintenance, * if it has been idle for a long time */ // Trigger an immediate maintenance window if it has been IDLE for long enough. if (duration > mConstants.IDLE_TIMEOUT) { scheduleAlarmLocked(0, false); stepIdleStateLocked(reason); } } } Loading @@ -4045,7 +4044,7 @@ public class DeviceIdleController extends SystemService void setIdleStartTimeForTest(long idleStartTime) { synchronized (this) { mIdleStartTime = idleStartTime; maybeDoImmediateMaintenance(); maybeDoImmediateMaintenance("testing"); } } Loading Loading @@ -4224,8 +4223,9 @@ public class DeviceIdleController extends SystemService } @GuardedBy("this") void scheduleAlarmLocked(long delay, boolean idleUntil) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); @VisibleForTesting void scheduleAlarmLocked(long delay) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + stateToString(mState) + ")"); if (mUseMotionSensor && mMotionSensor == null && mState != STATE_QUICK_DOZE_DELAY Loading @@ -4241,7 +4241,7 @@ public class DeviceIdleController extends SystemService return; } mNextAlarmTime = SystemClock.elapsedRealtime() + delay; if (idleUntil) { if (mState == STATE_IDLE) { mAlarmManager.setIdleUntil(AlarmManager.ELAPSED_REALTIME_WAKEUP, mNextAlarmTime, "DeviceIdleController.deep", mDeepAlarmListener, mHandler); } else if (mState == STATE_LOCATING) { Loading services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java +18 −30 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; Loading Loading @@ -624,8 +623,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT), eq(false)); verify(mDeviceIdleController).scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT)); } @Test Loading @@ -643,8 +641,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT), eq(false)); verify(mDeviceIdleController).scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT)); // The device configuration doesn't require a motion sensor to proceed with idling. // This should be the case on TVs or other such devices. We should set an alarm to move // forward if the motion sensor is missing in this case. Loading @@ -669,8 +666,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT), eq(false)); verify(mDeviceIdleController).scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT)); // The device configuration requires a motion sensor to proceed with idling, // so we should never set an alarm to move forward if the motion sensor is // missing in this case. Loading Loading @@ -699,7 +695,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(timeUntilAlarm + mConstants.INACTIVE_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(timeUntilAlarm + mConstants.INACTIVE_TIMEOUT)); enterDeepState(STATE_ACTIVE); setQuickDozeEnabled(true); Loading @@ -709,7 +705,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController).scheduleAlarmLocked( eq(timeUntilAlarm + mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); eq(timeUntilAlarm + mConstants.QUICK_DOZE_DELAY_TIMEOUT)); } @Test Loading @@ -736,59 +732,56 @@ public class DeviceIdleControllerTest { setScreenOn(false); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_INACTIVE); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_IDLE_PENDING); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_SENSING); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_LOCATING); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); // IDLE should stay as IDLE. enterDeepState(STATE_IDLE); // Clear out any alarm setting from the order before checking for this section. inOrder.verify(mDeviceIdleController, atLeastOnce()) .scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, atLeastOnce()).scheduleAlarmLocked(anyLong()); setQuickDozeEnabled(true); verifyStateConditions(STATE_IDLE); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong()); // IDLE_MAINTENANCE should stay as IDLE_MAINTENANCE. enterDeepState(STATE_IDLE_MAINTENANCE); // Clear out any alarm setting from the order before checking for this section. inOrder.verify(mDeviceIdleController, atLeastOnce()) .scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, atLeastOnce()).scheduleAlarmLocked(anyLong()); setQuickDozeEnabled(true); verifyStateConditions(STATE_IDLE_MAINTENANCE); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong()); // State is already QUICK_DOZE_DELAY. No work should be done. enterDeepState(STATE_QUICK_DOZE_DELAY); // Clear out any alarm setting from the order before checking for this section. inOrder.verify(mDeviceIdleController, atLeastOnce()) .scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, atLeastOnce()).scheduleAlarmLocked(anyLong()); setQuickDozeEnabled(true); mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong()); } @Test Loading Loading @@ -2685,17 +2678,12 @@ public class DeviceIdleControllerTest { if (ret == mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK) { enterDeepState(STATE_IDLE); long now = SystemClock.elapsedRealtime(); long alarm = mDeviceIdleController.getNextAlarmTime(); mDeviceIdleController.setIdleStartTimeForTest( now - (long) (mConstants.IDLE_TIMEOUT * 0.6)); long newAlarm = mDeviceIdleController.getNextAlarmTime(); assertTrue("maintenance not reschedule IDLE_TIMEOUT * 0.6", newAlarm == alarm); verifyStateConditions(STATE_IDLE); mDeviceIdleController.setIdleStartTimeForTest( now - (long) (mConstants.IDLE_TIMEOUT * 1.2)); newAlarm = mDeviceIdleController.getNextAlarmTime(); assertTrue("maintenance not reschedule IDLE_TIMEOUT * 1.2", (newAlarm - now) < minuteInMillis); verifyStateConditions(STATE_IDLE_MAINTENANCE); mDeviceIdleController.resetPreIdleTimeoutMode(); } } Loading Loading
apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +18 −18 Original line number Diff line number Diff line Loading @@ -1970,7 +1970,7 @@ public class DeviceIdleController extends SystemService } break; case MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR: { updatePreIdleFactor(); maybeDoImmediateMaintenance(); maybeDoImmediateMaintenance("idle factor"); } break; case MSG_REPORT_STATIONARY_STATUS: { final DeviceIdleInternal.StationaryListener newListener = Loading Loading @@ -3517,11 +3517,11 @@ public class DeviceIdleController extends SystemService // doze alarm to after the upcoming AlarmClock alarm. scheduleAlarmLocked( mAlarmManager.getNextWakeFromIdleTime() - mInjector.getElapsedRealtime() + mConstants.QUICK_DOZE_DELAY_TIMEOUT, false); + mConstants.QUICK_DOZE_DELAY_TIMEOUT); } else { // Wait a small amount of time in case something (eg: background service from // recently closed app) needs to finish running. scheduleAlarmLocked(mConstants.QUICK_DOZE_DELAY_TIMEOUT, false); scheduleAlarmLocked(mConstants.QUICK_DOZE_DELAY_TIMEOUT); } } else if (mState == STATE_ACTIVE) { moveToStateLocked(STATE_INACTIVE, "no activity"); Loading @@ -3536,9 +3536,9 @@ public class DeviceIdleController extends SystemService // alarm to after the upcoming AlarmClock alarm. scheduleAlarmLocked( mAlarmManager.getNextWakeFromIdleTime() - mInjector.getElapsedRealtime() + delay, false); + delay); } else { scheduleAlarmLocked(delay, false); scheduleAlarmLocked(delay); } } } Loading Loading @@ -3753,7 +3753,7 @@ public class DeviceIdleController extends SystemService if (shouldUseIdleTimeoutFactorLocked()) { delay = (long) (mPreIdleFactor * delay); } scheduleAlarmLocked(delay, false); scheduleAlarmLocked(delay); moveToStateLocked(STATE_IDLE_PENDING, reason); break; case STATE_IDLE_PENDING: Loading @@ -3779,7 +3779,7 @@ public class DeviceIdleController extends SystemService case STATE_SENSING: cancelSensingTimeoutAlarmLocked(); moveToStateLocked(STATE_LOCATING, reason); scheduleAlarmLocked(mConstants.LOCATING_TIMEOUT, false); scheduleAlarmLocked(mConstants.LOCATING_TIMEOUT); LocationManager locationManager = mInjector.getLocationManager(); if (locationManager != null && locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null) { Loading Loading @@ -3819,7 +3819,7 @@ public class DeviceIdleController extends SystemService // Everything is in place to go into IDLE state. case STATE_IDLE_MAINTENANCE: moveToStateLocked(STATE_IDLE, reason); scheduleAlarmLocked(mNextIdleDelay, true); scheduleAlarmLocked(mNextIdleDelay); if (DEBUG) Slog.d(TAG, "Moved to STATE_IDLE. Next alarm in " + mNextIdleDelay + " ms."); mNextIdleDelay = (long)(mNextIdleDelay * mConstants.IDLE_FACTOR); Loading @@ -3842,7 +3842,7 @@ public class DeviceIdleController extends SystemService mActiveIdleOpCount = 1; mActiveIdleWakeLock.acquire(); moveToStateLocked(STATE_IDLE_MAINTENANCE, reason); scheduleAlarmLocked(mNextIdlePendingDelay, false); scheduleAlarmLocked(mNextIdlePendingDelay); if (DEBUG) Slog.d(TAG, "Moved from STATE_IDLE to STATE_IDLE_MAINTENANCE. " + "Next alarm in " + mNextIdlePendingDelay + " ms."); mMaintenanceStartTime = SystemClock.elapsedRealtime(); Loading Loading @@ -4013,19 +4013,18 @@ public class DeviceIdleController extends SystemService if (Math.abs(delay - newDelay) < MIN_STATE_STEP_ALARM_CHANGE) { return; } scheduleAlarmLocked(newDelay, false); scheduleAlarmLocked(newDelay); } } } private void maybeDoImmediateMaintenance() { private void maybeDoImmediateMaintenance(String reason) { synchronized (this) { if (mState == STATE_IDLE) { long duration = SystemClock.elapsedRealtime() - mIdleStartTime; /* Let's trgger a immediate maintenance, * if it has been idle for a long time */ // Trigger an immediate maintenance window if it has been IDLE for long enough. if (duration > mConstants.IDLE_TIMEOUT) { scheduleAlarmLocked(0, false); stepIdleStateLocked(reason); } } } Loading @@ -4045,7 +4044,7 @@ public class DeviceIdleController extends SystemService void setIdleStartTimeForTest(long idleStartTime) { synchronized (this) { mIdleStartTime = idleStartTime; maybeDoImmediateMaintenance(); maybeDoImmediateMaintenance("testing"); } } Loading Loading @@ -4224,8 +4223,9 @@ public class DeviceIdleController extends SystemService } @GuardedBy("this") void scheduleAlarmLocked(long delay, boolean idleUntil) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + idleUntil + ")"); @VisibleForTesting void scheduleAlarmLocked(long delay) { if (DEBUG) Slog.d(TAG, "scheduleAlarmLocked(" + delay + ", " + stateToString(mState) + ")"); if (mUseMotionSensor && mMotionSensor == null && mState != STATE_QUICK_DOZE_DELAY Loading @@ -4241,7 +4241,7 @@ public class DeviceIdleController extends SystemService return; } mNextAlarmTime = SystemClock.elapsedRealtime() + delay; if (idleUntil) { if (mState == STATE_IDLE) { mAlarmManager.setIdleUntil(AlarmManager.ELAPSED_REALTIME_WAKEUP, mNextAlarmTime, "DeviceIdleController.deep", mDeepAlarmListener, mHandler); } else if (mState == STATE_LOCATING) { Loading
services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java +18 −30 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; Loading Loading @@ -624,8 +623,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT), eq(false)); verify(mDeviceIdleController).scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT)); } @Test Loading @@ -643,8 +641,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT), eq(false)); verify(mDeviceIdleController).scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT)); // The device configuration doesn't require a motion sensor to proceed with idling. // This should be the case on TVs or other such devices. We should set an alarm to move // forward if the motion sensor is missing in this case. Loading @@ -669,8 +666,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT), eq(false)); verify(mDeviceIdleController).scheduleAlarmLocked(eq(mConstants.INACTIVE_TIMEOUT)); // The device configuration requires a motion sensor to proceed with idling, // so we should never set an alarm to move forward if the motion sensor is // missing in this case. Loading Loading @@ -699,7 +695,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_INACTIVE); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(timeUntilAlarm + mConstants.INACTIVE_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(timeUntilAlarm + mConstants.INACTIVE_TIMEOUT)); enterDeepState(STATE_ACTIVE); setQuickDozeEnabled(true); Loading @@ -709,7 +705,7 @@ public class DeviceIdleControllerTest { mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController).scheduleAlarmLocked( eq(timeUntilAlarm + mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); eq(timeUntilAlarm + mConstants.QUICK_DOZE_DELAY_TIMEOUT)); } @Test Loading @@ -736,59 +732,56 @@ public class DeviceIdleControllerTest { setScreenOn(false); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_INACTIVE); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_IDLE_PENDING); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_SENSING); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); enterDeepState(STATE_LOCATING); setQuickDozeEnabled(true); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController) .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT), eq(false)); .scheduleAlarmLocked(eq(mConstants.QUICK_DOZE_DELAY_TIMEOUT)); // IDLE should stay as IDLE. enterDeepState(STATE_IDLE); // Clear out any alarm setting from the order before checking for this section. inOrder.verify(mDeviceIdleController, atLeastOnce()) .scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, atLeastOnce()).scheduleAlarmLocked(anyLong()); setQuickDozeEnabled(true); verifyStateConditions(STATE_IDLE); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong()); // IDLE_MAINTENANCE should stay as IDLE_MAINTENANCE. enterDeepState(STATE_IDLE_MAINTENANCE); // Clear out any alarm setting from the order before checking for this section. inOrder.verify(mDeviceIdleController, atLeastOnce()) .scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, atLeastOnce()).scheduleAlarmLocked(anyLong()); setQuickDozeEnabled(true); verifyStateConditions(STATE_IDLE_MAINTENANCE); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong()); // State is already QUICK_DOZE_DELAY. No work should be done. enterDeepState(STATE_QUICK_DOZE_DELAY); // Clear out any alarm setting from the order before checking for this section. inOrder.verify(mDeviceIdleController, atLeastOnce()) .scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, atLeastOnce()).scheduleAlarmLocked(anyLong()); setQuickDozeEnabled(true); mDeviceIdleController.becomeInactiveIfAppropriateLocked(); verifyStateConditions(STATE_QUICK_DOZE_DELAY); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong(), anyBoolean()); inOrder.verify(mDeviceIdleController, never()).scheduleAlarmLocked(anyLong()); } @Test Loading Loading @@ -2685,17 +2678,12 @@ public class DeviceIdleControllerTest { if (ret == mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK) { enterDeepState(STATE_IDLE); long now = SystemClock.elapsedRealtime(); long alarm = mDeviceIdleController.getNextAlarmTime(); mDeviceIdleController.setIdleStartTimeForTest( now - (long) (mConstants.IDLE_TIMEOUT * 0.6)); long newAlarm = mDeviceIdleController.getNextAlarmTime(); assertTrue("maintenance not reschedule IDLE_TIMEOUT * 0.6", newAlarm == alarm); verifyStateConditions(STATE_IDLE); mDeviceIdleController.setIdleStartTimeForTest( now - (long) (mConstants.IDLE_TIMEOUT * 1.2)); newAlarm = mDeviceIdleController.getNextAlarmTime(); assertTrue("maintenance not reschedule IDLE_TIMEOUT * 1.2", (newAlarm - now) < minuteInMillis); verifyStateConditions(STATE_IDLE_MAINTENANCE); mDeviceIdleController.resetPreIdleTimeoutMode(); } } Loading