blob: d8c9c34333138996ef25ce089c61fffddb1701a5 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.power;
import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_DIM;
import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE;
import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF;
import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_VR;
import static android.os.PowerManager.GO_TO_SLEEP_REASON_APPLICATION;
import static android.os.PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN;
import static android.os.PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD;
import static android.os.PowerManager.GO_TO_SLEEP_REASON_TIMEOUT;
import static android.os.PowerManager.WAKE_REASON_GESTURE;
import static android.os.PowerManager.WAKE_REASON_PLUGGED_IN;
import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
import static com.android.server.power.PowerManagerService.USER_ACTIVITY_SCREEN_BRIGHT;
import static com.android.server.power.PowerManagerService.WAKE_LOCK_DOZE;
import static com.android.server.power.PowerManagerService.WAKE_LOCK_SCREEN_BRIGHT;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.view.Display;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.internal.util.LatencyTracker;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
/**
* Tests for {@link com.android.server.power.PowerGroup}.
*
* Build/Install/Run:
* atest FrameworksServicesTests:PowerManagerServiceTest
*/
public class PowerGroupTest {
private static final int GROUP_ID = 0;
private static final int UID = 11;
private static final long TIMESTAMP_CREATE = 1;
private static final long TIMESTAMP1 = 999;
private static final long TIMESTAMP2 = TIMESTAMP1 + 10;
private static final long TIMESTAMP3 = TIMESTAMP2 + 10;
private static final float PRECISION = 0.001f;
private static final float BRIGHTNESS = 0.99f;
private static final float BRIGHTNESS_DOZE = 0.5f;
private PowerGroup mPowerGroup;
@Mock private PowerGroup.PowerGroupListener mWakefulnessCallbackMock;
@Mock private Notifier mNotifier;
@Mock private DisplayManagerInternal mDisplayManagerInternal;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mPowerGroup = new PowerGroup(GROUP_ID, mWakefulnessCallbackMock, mNotifier,
mDisplayManagerInternal, WAKEFULNESS_AWAKE, /* ready= */ true,
/* supportsSandman= */ true, TIMESTAMP_CREATE);
}
@Test
public void testWakePowerGroup() {
mPowerGroup.sleepLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_APPLICATION);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_ASLEEP), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_APPLICATION),
eq(UID), /* opUid= */anyInt(), /* opPackageName= */ isNull(), /* details= */
isNull());
String details = "wake PowerGroup1";
LatencyTracker latencyTracker = LatencyTracker.getInstance(
InstrumentationRegistry.getInstrumentation().getContext());
mPowerGroup.wakeUpLocked(TIMESTAMP2, WAKE_REASON_PLUGGED_IN, details, UID,
/* opPackageName= */ null, /* opUid= */ 0, latencyTracker);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_AWAKE), eq(TIMESTAMP2), eq(WAKE_REASON_PLUGGED_IN), eq(UID),
/* opUid= */ anyInt(), /* opPackageName= */ isNull(), eq(details));
}
@Test
public void testDreamPowerGroup() {
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.dreamLocked(TIMESTAMP1, UID);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
assertThat(mPowerGroup.isSandmanSummonedLocked()).isTrue();
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_DREAMING), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_APPLICATION),
eq(UID), /* opUid= */anyInt(), /* opPackageName= */ isNull(), /* details= */
isNull());
}
@Test
public void testDozePowerGroup() {
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.dozeLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_TIMEOUT);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
assertThat(mPowerGroup.isSandmanSummonedLocked()).isTrue();
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_DOZING), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_TIMEOUT),
eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ isNull(),
/* details= */ isNull());
}
@Test
public void testDozePowerGroupWhenNonInteractiveHasNoEffect() {
mPowerGroup.sleepLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_TIMEOUT);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_ASLEEP), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_TIMEOUT),
eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ isNull(),
/* details= */ isNull());
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
assertThat(mPowerGroup.dozeLocked(TIMESTAMP2, UID, GO_TO_SLEEP_REASON_TIMEOUT)).isFalse();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
verify(mWakefulnessCallbackMock, never()).onWakefulnessChangedLocked(
eq(GROUP_ID), eq(WAKEFULNESS_DOZING), eq(TIMESTAMP2), /* reason= */ anyInt(),
eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ any(), /* details= */ any());
}
@Test
public void testSleepPowerGroup() {
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.sleepLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_DEVICE_FOLD);
assertThat(mPowerGroup.isSandmanSummonedLocked()).isTrue();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_ASLEEP), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_DEVICE_FOLD),
eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ isNull(),
/* details= */ isNull());
}
@Test
public void testDreamPowerGroupWhenNotAwakeHasNoEffect() {
mPowerGroup.dozeLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_TIMEOUT);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_DOZING), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_TIMEOUT),
eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ isNull(),
/* details= */ isNull());
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
assertThat(mPowerGroup.dreamLocked(TIMESTAMP2, UID)).isFalse();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
verify(mWakefulnessCallbackMock, never()).onWakefulnessChangedLocked(
eq(GROUP_ID), /* wakefulness= */ eq(WAKEFULNESS_DREAMING), eq(TIMESTAMP2),
/* reason= */ anyInt(), eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ any(),
/* details= */ any());
}
@Test
public void testLastWakeAndSleepTimeIsUpdated() {
assertThat(mPowerGroup.getLastWakeTimeLocked()).isEqualTo(TIMESTAMP_CREATE);
assertThat(mPowerGroup.getLastSleepTimeLocked()).isEqualTo(TIMESTAMP_CREATE);
// Verify that the transition to WAKEFULNESS_DOZING updates the last sleep time
String details = "PowerGroup1 Timeout";
mPowerGroup.setWakefulnessLocked(WAKEFULNESS_DOZING, TIMESTAMP1, UID,
GO_TO_SLEEP_REASON_TIMEOUT, /* opUid= */ 0, /* opPackageName= */ null, details);
assertThat(mPowerGroup.getLastSleepTimeLocked()).isEqualTo(TIMESTAMP1);
assertThat(mPowerGroup.getLastWakeTimeLocked()).isEqualTo(TIMESTAMP_CREATE);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_DOZING), eq(TIMESTAMP1), eq(GO_TO_SLEEP_REASON_TIMEOUT),
eq(UID), /* opUid= */anyInt(), /* opPackageName= */ isNull(), eq(details));
// Verify that the transition to WAKEFULNESS_ASLEEP after dozing does not update the last
// wake or sleep time
mPowerGroup.setWakefulnessLocked(WAKEFULNESS_ASLEEP, TIMESTAMP2, UID,
GO_TO_SLEEP_REASON_DEVICE_ADMIN, /* opUid= */ 0, /* opPackageName= */ null,
details);
assertThat(mPowerGroup.getLastSleepTimeLocked()).isEqualTo(TIMESTAMP1);
assertThat(mPowerGroup.getLastWakeTimeLocked()).isEqualTo(TIMESTAMP_CREATE);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_ASLEEP), eq(TIMESTAMP2), eq(GO_TO_SLEEP_REASON_DEVICE_ADMIN),
eq(UID), /* opUid= */anyInt(), /* opPackageName= */ isNull(), eq(details));
// Verify that waking up the power group only updates the last wake time
details = "PowerGroup1 Gesture";
mPowerGroup.setWakefulnessLocked(WAKEFULNESS_AWAKE, TIMESTAMP2, UID,
WAKE_REASON_GESTURE, /* opUid= */ 0, /* opPackageName= */ null, details);
assertThat(mPowerGroup.getLastWakeTimeLocked()).isEqualTo(TIMESTAMP2);
assertThat(mPowerGroup.getLastSleepTimeLocked()).isEqualTo(TIMESTAMP1);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_AWAKE), eq(TIMESTAMP2), eq(WAKE_REASON_GESTURE),
eq(UID), /* opUid= */ anyInt(), /* opPackageName= */ isNull(), eq(details));
// Verify that a transition to WAKEFULNESS_ASLEEP from an interactive state updates the last
// sleep time
mPowerGroup.setWakefulnessLocked(WAKEFULNESS_ASLEEP, TIMESTAMP3, UID,
GO_TO_SLEEP_REASON_DEVICE_ADMIN, /* opUid= */ 0, /* opPackageName= */ null,
details);
assertThat(mPowerGroup.getLastSleepTimeLocked()).isEqualTo(TIMESTAMP3);
assertThat(mPowerGroup.getLastWakeTimeLocked()).isEqualTo(TIMESTAMP2);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
verify(mWakefulnessCallbackMock).onWakefulnessChangedLocked(eq(GROUP_ID),
eq(WAKEFULNESS_ASLEEP), eq(TIMESTAMP3), eq(GO_TO_SLEEP_REASON_DEVICE_ADMIN),
eq(UID), /* opUid= */anyInt(), /* opPackageName= */ isNull(), eq(details));
}
@Test
public void testUpdateWhileAwake_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = true;
float brightnessFactor = 0.7f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ false,
/* useProximitySensor= */ false,
/* boostScreenBrightness= */ false,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_DIM);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(false);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(false);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(false);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileDozing_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
mPowerGroup.dozeLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_APPLICATION);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
mPowerGroup.setWakeLockSummaryLocked(WAKE_LOCK_DOZE);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_DOZE);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_ON);
assertThat(displayPowerRequest.dozeScreenBrightness).isWithin(PRECISION).of(
BRIGHTNESS_DOZE);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileDozing_DozeAfterScreenOff() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
mPowerGroup.dozeLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_APPLICATION);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ true,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_OFF);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateQuiescent() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ true,
/* dozeAfterScreenOff= */ true,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_OFF);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileAsleep_VrModeEnabled() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
mPowerGroup.sleepLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_TIMEOUT);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ true,
/* vrModeEnabled= */ true,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_OFF);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileAwake_VrModeEnabled() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ true,
/* vrModeEnabled= */ true,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_VR);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileAsleep_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
mPowerGroup.sleepLocked(TIMESTAMP1, UID, GO_TO_SLEEP_REASON_TIMEOUT);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_OFF);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileDreamingWithScreenBrightWakelock_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
mPowerGroup.dreamLocked(TIMESTAMP1, UID);
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
mPowerGroup.setWakeLockSummaryLocked(WAKE_LOCK_SCREEN_BRIGHT);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_BRIGHT);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileAwakeBootNotComplete_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ false,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_BRIGHT);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileAwakeUserActivityScreenBright_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.setUserActivitySummaryLocked(USER_ACTIVITY_SCREEN_BRIGHT);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ false,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_BRIGHT);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
@Test
public void testUpdateWhileAwakeScreenBrightnessBoostInProgress_UpdatesDisplayPowerRequest() {
final boolean batterySaverEnabled = false;
float brightnessFactor = 0.3f;
PowerSaveState powerSaveState = new PowerSaveState.Builder()
.setBatterySaverEnabled(batterySaverEnabled)
.setBrightnessFactor(brightnessFactor)
.build();
assertThat(mPowerGroup.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
mPowerGroup.updateLocked(/* screenBrightnessOverride= */ BRIGHTNESS,
/* autoBrightness = */ true,
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
/* quiescent= */ false,
/* dozeAfterScreenOff= */ false,
/* vrModeEnabled= */ false,
/* bootCompleted= */ true,
/* screenBrightnessBoostInProgress= */ true,
/* waitForNegativeProximity= */ false);
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
mPowerGroup.mDisplayPowerRequest;
assertThat(displayPowerRequest.policy).isEqualTo(POLICY_BRIGHT);
assertThat(displayPowerRequest.screenBrightnessOverride).isWithin(PRECISION).of(BRIGHTNESS);
assertThat(displayPowerRequest.useAutoBrightness).isEqualTo(true);
assertThat(displayPowerRequest.useProximitySensor).isEqualTo(true);
assertThat(displayPowerRequest.boostScreenBrightness).isEqualTo(true);
assertThat(displayPowerRequest.dozeScreenState).isEqualTo(Display.STATE_UNKNOWN);
assertThat(displayPowerRequest.dozeScreenBrightness).isEqualTo(
PowerManager.BRIGHTNESS_INVALID_FLOAT);
assertThat(displayPowerRequest.lowPowerMode).isEqualTo(batterySaverEnabled);
assertThat(displayPowerRequest.screenLowPowerBrightnessFactor).isWithin(PRECISION).of(
brightnessFactor);
}
}