Loading services/core/java/com/android/server/power/PowerManagerService.java +8 −4 Original line number Diff line number Diff line Loading @@ -3379,7 +3379,7 @@ public final class PowerManagerService extends SystemService } changed = sleepPowerGroupLocked(powerGroup, time, PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE, Process.SYSTEM_UID); } else if (shouldNapAtBedTimeLocked()) { } else if (shouldNapAtBedTimeLocked(powerGroup)) { changed = dreamPowerGroupLocked(powerGroup, time, Process.SYSTEM_UID, /* allowWake= */ false); } else { Loading @@ -3395,7 +3395,10 @@ public final class PowerManagerService extends SystemService * activity timeout has expired and it's bedtime. */ @GuardedBy("mLock") private boolean shouldNapAtBedTimeLocked() { private boolean shouldNapAtBedTimeLocked(PowerGroup powerGroup) { if (!powerGroup.supportsSandmanLocked()) { return false; } return mDreamsActivateOnSleepSetting || (mDreamsActivateOnDockSetting && mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) Loading Loading @@ -3617,9 +3620,10 @@ public final class PowerManagerService extends SystemService if (!mDreamsDisabledByAmbientModeSuppressionConfig) { return; } final PowerGroup defaultPowerGroup = mPowerGroups.get(Display.DEFAULT_DISPLAY_GROUP); if (!isSuppressed && mIsPowered && mDreamsSupportedConfig && mDreamsEnabledSetting && shouldNapAtBedTimeLocked() && isItBedTimeYetLocked( mPowerGroups.get(Display.DEFAULT_DISPLAY_GROUP))) { && shouldNapAtBedTimeLocked(defaultPowerGroup) && isItBedTimeYetLocked(defaultPowerGroup)) { napInternal(SystemClock.uptimeMillis(), Process.SYSTEM_UID, /* allowWake= */ true); } else if (isSuppressed) { mDirty |= DIRTY_SETTINGS; Loading services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -2500,6 +2500,49 @@ public class PowerManagerServiceTest { verify(mDreamManagerInternalMock).startDream(eq(true), anyString()); } @Test public void testMultiDisplay_twoDisplays_onlyDefaultDisplayCanDream() { final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1; final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener = new AtomicReference<>(); doAnswer((Answer<Void>) invocation -> { listener.set(invocation.getArgument(0)); return null; }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any()); final DisplayInfo info = new DisplayInfo(); info.displayGroupId = nonDefaultDisplayGroupId; when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info); 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(), anyString()); setMinimumScreenOffTimeoutConfig(5); createService(); startSystem(); listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId); assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( WAKEFULNESS_AWAKE); assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( WAKEFULNESS_AWAKE); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); advanceTime(15000); // Only the default display group is dreaming. assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( WAKEFULNESS_DREAMING); assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( WAKEFULNESS_DOZING); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING); } @Test public void testMultiDisplay_addNewDisplay_becomeGloballyAwakeButDefaultRemainsDozing() { final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; Loading Loading
services/core/java/com/android/server/power/PowerManagerService.java +8 −4 Original line number Diff line number Diff line Loading @@ -3379,7 +3379,7 @@ public final class PowerManagerService extends SystemService } changed = sleepPowerGroupLocked(powerGroup, time, PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE, Process.SYSTEM_UID); } else if (shouldNapAtBedTimeLocked()) { } else if (shouldNapAtBedTimeLocked(powerGroup)) { changed = dreamPowerGroupLocked(powerGroup, time, Process.SYSTEM_UID, /* allowWake= */ false); } else { Loading @@ -3395,7 +3395,10 @@ public final class PowerManagerService extends SystemService * activity timeout has expired and it's bedtime. */ @GuardedBy("mLock") private boolean shouldNapAtBedTimeLocked() { private boolean shouldNapAtBedTimeLocked(PowerGroup powerGroup) { if (!powerGroup.supportsSandmanLocked()) { return false; } return mDreamsActivateOnSleepSetting || (mDreamsActivateOnDockSetting && mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) Loading Loading @@ -3617,9 +3620,10 @@ public final class PowerManagerService extends SystemService if (!mDreamsDisabledByAmbientModeSuppressionConfig) { return; } final PowerGroup defaultPowerGroup = mPowerGroups.get(Display.DEFAULT_DISPLAY_GROUP); if (!isSuppressed && mIsPowered && mDreamsSupportedConfig && mDreamsEnabledSetting && shouldNapAtBedTimeLocked() && isItBedTimeYetLocked( mPowerGroups.get(Display.DEFAULT_DISPLAY_GROUP))) { && shouldNapAtBedTimeLocked(defaultPowerGroup) && isItBedTimeYetLocked(defaultPowerGroup)) { napInternal(SystemClock.uptimeMillis(), Process.SYSTEM_UID, /* allowWake= */ true); } else if (isSuppressed) { mDirty |= DIRTY_SETTINGS; Loading
services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -2500,6 +2500,49 @@ public class PowerManagerServiceTest { verify(mDreamManagerInternalMock).startDream(eq(true), anyString()); } @Test public void testMultiDisplay_twoDisplays_onlyDefaultDisplayCanDream() { final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1; final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener = new AtomicReference<>(); doAnswer((Answer<Void>) invocation -> { listener.set(invocation.getArgument(0)); return null; }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any()); final DisplayInfo info = new DisplayInfo(); info.displayGroupId = nonDefaultDisplayGroupId; when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info); 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(), anyString()); setMinimumScreenOffTimeoutConfig(5); createService(); startSystem(); listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId); assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( WAKEFULNESS_AWAKE); assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( WAKEFULNESS_AWAKE); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); advanceTime(15000); // Only the default display group is dreaming. assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo( WAKEFULNESS_DREAMING); assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo( WAKEFULNESS_DOZING); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING); } @Test public void testMultiDisplay_addNewDisplay_becomeGloballyAwakeButDefaultRemainsDozing() { final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1; Loading