diff options
| author | 2022-02-17 11:24:57 +0100 | |
|---|---|---|
| committer | 2022-02-25 15:58:51 +0000 | |
| commit | 1dd3129e14965b565d721a83fd829e124fe6d4d2 (patch) | |
| tree | b0a8ce411bcd692217873129486b9da5db1591d6 | |
| parent | 5012d490b65cb630d3c77c07e0ce45e303bb824e (diff) | |
Set DreamsActivateOnSleepSetting and handle Sandman in tests
Two PowerManagerServiceTest were failing on TV:
- testRemovedDisplayGroupWakeLock_affectsNoDisplayGroups
- testWakeLock_affectsProperDisplayGroup
These tests expected the device to be DOZING at the end of the test,
but the devices was found to be DREAMING.
This difference came from `mDreamsActivateOnSleepSetting`, which was
not set for phones, but is set on TV.
Two tests are added to test the behaviour of this setting.
This CL also changes a call to `Handler#sendMessage` to
`Handler#sendMessageAtTime`, which schedules the message according to
the time of the test clock, instead of the real SystemClock.
This causes `handleSandman` to actually run during the test,
which would put the device to sleep if DOZING and dream couldn't be
started, so when #startDream is called on the DreamManager mock,
we set #isDreaming on the mock.
Bug: 205837239
Test: atest PowerManagerServiceTest
Change-Id: I6f27ea6a5cf8ddb1b7735c8d6ef67f27a5eb3747
(cherry picked from commit dbcf8a0aaba568fc31730fded1dcd893f48e745a)
| -rw-r--r-- | services/core/java/com/android/server/power/PowerManagerService.java | 4 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java | 49 |
2 files changed, 51 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index bd58472f2d2c..8291f48bb723 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -2001,7 +2001,7 @@ public final class PowerManagerService extends SystemService private boolean dozePowerGroupLocked(final PowerGroup powerGroup, long eventTime, int reason, int uid) { if (DEBUG_SPEW) { - Slog.d(TAG, "sleepDisplayGroupNoUpdateLocked: eventTime=" + eventTime + Slog.d(TAG, "dozePowerGroup: eventTime=" + eventTime + ", groupId=" + powerGroup.getGroupId() + ", reason=" + reason + ", uid=" + uid); } @@ -3130,7 +3130,7 @@ public final class PowerManagerService extends SystemService Message msg = mHandler.obtainMessage(MSG_SANDMAN); msg.arg1 = powerGroup.getGroupId(); msg.setAsynchronous(true); - mHandler.sendMessage(msg); + mHandler.sendMessageAtTime(msg, mClock.uptimeMillis()); } } } diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java index 1b92017b8a00..ee9a1e0fc481 100644 --- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java @@ -213,6 +213,8 @@ public class PowerManagerServiceTest { Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0); + Settings.Secure.putInt(mContextSpy.getContentResolver(), + Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0); mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); @@ -721,6 +723,48 @@ public class PowerManagerServiceTest { assertThat(mService.getBinderServiceInstance().forceSuspend()).isFalse(); } + @SuppressWarnings("GuardedBy") + @Test + public void testScreensaverActivateOnSleepDisabled_powered_afterTimeout_goesToDozing() { + when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(true); + + doAnswer(inv -> { + when(mDreamManagerInternalMock.isDreaming()).thenReturn(true); + return null; + }).when(mDreamManagerInternalMock).startDream(anyBoolean()); + + setMinimumScreenOffTimeoutConfig(5); + createService(); + startSystem(); + + assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + + advanceTime(15000); + assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING); + } + + @SuppressWarnings("GuardedBy") + @Test + public void testScreensaverActivateOnSleepEnabled_powered_afterTimeout_goesToDreaming() { + when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(true); + Settings.Secure.putInt(mContextSpy.getContentResolver(), + Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1); + + doAnswer(inv -> { + when(mDreamManagerInternalMock.isDreaming()).thenReturn(true); + return null; + }).when(mDreamManagerInternalMock).startDream(anyBoolean()); + + setMinimumScreenOffTimeoutConfig(5); + createService(); + startSystem(); + + assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); + + advanceTime(15000); + assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING); + } + @Test public void testSetDozeOverrideFromDreamManager_triggersSuspendBlocker() { final String suspendBlockerName = "PowerManagerService.Display"; @@ -1148,6 +1192,11 @@ public class PowerManagerServiceTest { info.displayGroupId = nonDefaultDisplayGroupId; when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info); + doAnswer(inv -> { + when(mDreamManagerInternalMock.isDreaming()).thenReturn(true); + return null; + }).when(mDreamManagerInternalMock).startDream(anyBoolean()); + final String pkg = mContextSpy.getOpPackageName(); final Binder token = new Binder(); final String tag = "testRemovedDisplayGroupWakeLock_affectsNoDisplayGroups"; |