summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yeabkal Wubshit <yeabkal@google.com> 2023-11-13 22:31:11 -0800
committer Yeabkal Wubshit <yeabkal@google.com> 2024-03-25 21:26:26 +0000
commit451fc44d1590aff4f88f27e3fa356be06a9ff98b (patch)
tree2c8c28bdf84a8fe0ff4af3e284415db887720e68
parent30ec015ea58d83e7ad22aab5b631f843fae99b5d (diff)
Pipeline for display state reason logging
This change creates pipeline to support passing screen state reason to entities that affect the display screen state. In a follow up change, this reason will be logged in the backend at DisplayPowerController. Bug: 283014701 Test: manual logs, unit tests Change-Id: I1455790aa48687d238dc9153a6ea11e77f759821
-rw-r--r--core/java/android/hardware/display/DisplayManagerInternal.java10
-rw-r--r--core/java/android/os/PowerManagerInternal.java3
-rw-r--r--core/java/android/service/dreams/DreamService.java22
-rw-r--r--core/java/android/service/dreams/IDreamManager.aidl2
-rw-r--r--core/java/android/view/Display.java97
-rw-r--r--services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java3
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java52
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerControllerInterface.java9
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerState.java7
-rw-r--r--services/core/java/com/android/server/display/state/DisplayStateController.java19
-rw-r--r--services/core/java/com/android/server/dreams/DreamManagerService.java14
-rw-r--r--services/core/java/com/android/server/power/PowerGroup.java16
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java11
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java44
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java63
-rw-r--r--services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java9
-rw-r--r--services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java5
17 files changed, 297 insertions, 89 deletions
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java
index 58aafbc648f7..ec67212b46b7 100644
--- a/core/java/android/hardware/display/DisplayManagerInternal.java
+++ b/core/java/android/hardware/display/DisplayManagerInternal.java
@@ -498,6 +498,7 @@ public abstract class DisplayManagerInternal {
// Overrides the policy for adjusting screen brightness and state while dozing.
public int dozeScreenState;
public float dozeScreenBrightness;
+ public int dozeScreenStateReason;
public DisplayPowerRequest() {
policy = POLICY_BRIGHT;
@@ -508,6 +509,7 @@ public abstract class DisplayManagerInternal {
blockScreenOn = false;
dozeScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
dozeScreenState = Display.STATE_UNKNOWN;
+ dozeScreenStateReason = Display.STATE_REASON_UNKNOWN;
}
public DisplayPowerRequest(DisplayPowerRequest other) {
@@ -529,6 +531,7 @@ public abstract class DisplayManagerInternal {
boostScreenBrightness = other.boostScreenBrightness;
dozeScreenBrightness = other.dozeScreenBrightness;
dozeScreenState = other.dozeScreenState;
+ dozeScreenStateReason = other.dozeScreenStateReason;
}
@Override
@@ -551,7 +554,8 @@ public abstract class DisplayManagerInternal {
&& lowPowerMode == other.lowPowerMode
&& boostScreenBrightness == other.boostScreenBrightness
&& floatEquals(dozeScreenBrightness, other.dozeScreenBrightness)
- && dozeScreenState == other.dozeScreenState;
+ && dozeScreenState == other.dozeScreenState
+ && dozeScreenStateReason == other.dozeScreenStateReason;
}
private boolean floatEquals(float f1, float f2) {
@@ -575,7 +579,9 @@ public abstract class DisplayManagerInternal {
+ ", lowPowerMode=" + lowPowerMode
+ ", boostScreenBrightness=" + boostScreenBrightness
+ ", dozeScreenBrightness=" + dozeScreenBrightness
- + ", dozeScreenState=" + Display.stateToString(dozeScreenState);
+ + ", dozeScreenState=" + Display.stateToString(dozeScreenState)
+ + ", dozeScreenStateReason="
+ + Display.stateReasonToString(dozeScreenStateReason);
}
public static String policyToString(int policy) {
diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java
index fec67b97030d..df353e56a540 100644
--- a/core/java/android/os/PowerManagerInternal.java
+++ b/core/java/android/os/PowerManagerInternal.java
@@ -136,11 +136,12 @@ public abstract class PowerManagerInternal {
*
* @param screenState The overridden screen state, or {@link Display#STATE_UNKNOWN}
* to disable the override.
+ * @param reason The reason for overriding the screen state.
* @param screenBrightness The overridden screen brightness, or
* {@link PowerManager#BRIGHTNESS_DEFAULT} to disable the override.
*/
public abstract void setDozeOverrideFromDreamManager(
- int screenState, int screenBrightness);
+ int screenState, @Display.StateReason int reason, int screenBrightness);
/**
* Used by sidekick manager to tell the power manager if it shouldn't change the display state
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index 4060b242292a..3df70164c964 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -264,6 +264,7 @@ public class DreamService extends Service implements Window.Callback {
private boolean mDozing;
private boolean mWindowless;
private int mDozeScreenState = Display.STATE_UNKNOWN;
+ private @Display.StateReason int mDozeScreenStateReason = Display.STATE_REASON_UNKNOWN;
private int mDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
private boolean mDebug = false;
@@ -748,7 +749,9 @@ public class DreamService extends Service implements Window.Callback {
if (mDozing) {
try {
- mDreamManager.startDozing(mDreamToken, mDozeScreenState, mDozeScreenBrightness);
+ mDreamManager.startDozing(
+ mDreamToken, mDozeScreenState, mDozeScreenStateReason,
+ mDozeScreenBrightness);
} catch (RemoteException ex) {
// system server died
}
@@ -808,6 +811,19 @@ public class DreamService extends Service implements Window.Callback {
}
/**
+ * Same as {@link #setDozeScreenState(int, int)}, but with no screen state reason specified.
+ *
+ * <p>Use {@link #setDozeScreenState(int, int)} whenever possible to allow properly accounting
+ * for the screen state reason.
+ *
+ * @hide
+ */
+ @UnsupportedAppUsage
+ public void setDozeScreenState(int state) {
+ setDozeScreenState(state, Display.STATE_REASON_UNKNOWN);
+ }
+
+ /**
* Sets the screen state to use while dozing.
* <p>
* The value of this property determines the power state of the primary display
@@ -841,13 +857,15 @@ public class DreamService extends Service implements Window.Callback {
* {@link Display#STATE_DOZE}, {@link Display#STATE_DOZE_SUSPEND},
* {@link Display#STATE_ON_SUSPEND}, {@link Display#STATE_OFF}, or {@link Display#STATE_UNKNOWN}
* for the default behavior.
+ * @param reason the reason for setting the specified screen state.
*
* @hide For use by system UI components only.
*/
@UnsupportedAppUsage
- public void setDozeScreenState(int state) {
+ public void setDozeScreenState(int state, @Display.StateReason int reason) {
if (mDozeScreenState != state) {
mDozeScreenState = state;
+ mDozeScreenStateReason = reason;
updateDoze();
}
}
diff --git a/core/java/android/service/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl
index c489c5808728..e45384f5512a 100644
--- a/core/java/android/service/dreams/IDreamManager.aidl
+++ b/core/java/android/service/dreams/IDreamManager.aidl
@@ -40,7 +40,7 @@ interface IDreamManager {
boolean isDreamingOrInPreview();
boolean canStartDreaming(boolean isScreenOn);
void finishSelf(in IBinder token, boolean immediate);
- void startDozing(in IBinder token, int screenState, int screenBrightness);
+ void startDozing(in IBinder token, int screenState, int reason, int screenBrightness);
void stopDozing(in IBinder token);
void forceAmbientDisplayEnabled(boolean enabled);
ComponentName[] getDreamComponentsForUser(int userId);
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 1f2b4faacc10..4475418e1e57 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -503,6 +503,79 @@ public final class Display {
*/
public static final int STATE_ON_SUSPEND = ViewProtoEnums.DISPLAY_STATE_ON_SUSPEND; // 6
+ /**
+ * The cause of the display state change is unknown.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_UNKNOWN = ViewProtoEnums.DISPLAY_STATE_REASON_UNKNOWN;
+
+ /**
+ * The default power and display policy caused the display state.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_DEFAULT_POLICY =
+ ViewProtoEnums.DISPLAY_STATE_REASON_DEFAULT_POLICY;
+
+ /**
+ * The display state was changed due to acquiring a draw wake lock.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_DRAW_WAKE_LOCK =
+ ViewProtoEnums.DISPLAY_STATE_REASON_DRAW_WAKE_LOCK;
+
+ /**
+ * The display state was changed due to display offloading.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_OFFLOAD = ViewProtoEnums.DISPLAY_STATE_REASON_OFFLOAD;
+
+ /**
+ * The display state was changed due to a tilt event.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_TILT = ViewProtoEnums.DISPLAY_STATE_REASON_TILT;
+
+ /**
+ * The display state was changed due to the dream manager.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_DREAM_MANAGER =
+ ViewProtoEnums.DISPLAY_STATE_REASON_DREAM_MANAGER;
+
+ /**
+ * The display state was changed due to a {@link KeyEvent}.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_KEY = ViewProtoEnums.DISPLAY_STATE_REASON_KEY;
+
+ /**
+ * The display state was changed due to a {@link MotionEvent}.
+ *
+ * @hide
+ */
+ public static final int STATE_REASON_MOTION = ViewProtoEnums.DISPLAY_STATE_REASON_MOTION;
+
+ /** @hide */
+ @IntDef(prefix = {"STATE_REASON_"}, value = {
+ STATE_REASON_UNKNOWN,
+ STATE_REASON_DEFAULT_POLICY,
+ STATE_REASON_DRAW_WAKE_LOCK,
+ STATE_REASON_OFFLOAD,
+ STATE_REASON_TILT,
+ STATE_REASON_DREAM_MANAGER,
+ STATE_REASON_KEY,
+ STATE_REASON_MOTION,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface StateReason {}
+
/* The color mode constants defined below must be kept in sync with the ones in
* system/core/include/system/graphics-base.h */
@@ -1996,6 +2069,30 @@ public final class Display {
}
}
+ /** @hide */
+ public static String stateReasonToString(@StateReason int reason) {
+ switch (reason) {
+ case STATE_REASON_UNKNOWN:
+ return "UNKNOWN";
+ case STATE_REASON_DEFAULT_POLICY:
+ return "DEFAULT_POLICY";
+ case STATE_REASON_DRAW_WAKE_LOCK:
+ return "DRAW_WAKE_LOCK";
+ case STATE_REASON_OFFLOAD:
+ return "OFFLOAD";
+ case STATE_REASON_TILT:
+ return "TILT";
+ case STATE_REASON_DREAM_MANAGER:
+ return "DREAM_MANAGER";
+ case STATE_REASON_KEY:
+ return "KEY";
+ case STATE_REASON_MOTION:
+ return "MOTION";
+ default:
+ return Integer.toString(reason);
+ }
+ }
+
/**
* Returns true if display updates may be suspended while in the specified
* display power state. In SUSPEND states, updates are absolutely forbidden.
diff --git a/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java b/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java
index b1defe94436a..65c9f3556fad 100644
--- a/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java
+++ b/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java
@@ -21,6 +21,7 @@ import static com.android.server.display.AutomaticBrightnessController.AUTO_BRIG
import android.annotation.Nullable;
import android.hardware.display.DisplayManagerInternal;
import android.os.Trace;
+import android.view.Display;
/**
* An implementation of the offload session that keeps track of whether the session is active.
@@ -42,7 +43,7 @@ public class DisplayOffloadSessionImpl implements DisplayManagerInternal.Display
@Override
public void setDozeStateOverride(int displayState) {
- mDisplayPowerController.overrideDozeScreenState(displayState);
+ mDisplayPowerController.overrideDozeScreenState(displayState, Display.STATE_REASON_OFFLOAD);
}
@Override
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index d99f7121a14c..043ff0e9e394 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -61,6 +61,7 @@ import android.util.IndentingPrintWriter;
import android.util.MathUtils;
import android.util.MutableFloat;
import android.util.MutableInt;
+import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
@@ -788,14 +789,14 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
@Override
- public void overrideDozeScreenState(int displayState) {
+ public void overrideDozeScreenState(int displayState, @Display.StateReason int reason) {
mHandler.postAtTime(() -> {
if (mDisplayOffloadSession == null
|| !(DisplayOffloadSession.isSupportedOffloadState(displayState)
|| displayState == Display.STATE_UNKNOWN)) {
return;
}
- mDisplayStateController.overrideDozeScreenState(displayState);
+ mDisplayStateController.overrideDozeScreenState(displayState, reason);
sendUpdatePowerState();
}, mClock.uptimeMillis());
}
@@ -975,7 +976,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
&& mAutomaticBrightnessController.isInIdleMode());
mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener);
- noteScreenState(mPowerState.getScreenState());
+ noteScreenState(mPowerState.getScreenState(), Display.STATE_REASON_DEFAULT_POLICY);
noteScreenBrightness(mPowerState.getScreenBrightness());
// Initialize all of the brightness tracking state
@@ -1276,8 +1277,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
displayBrightnessFollowers = mDisplayBrightnessFollowers.clone();
}
- int state = mDisplayStateController
- .updateDisplayState(mPowerRequest, mIsEnabled, mIsInTransition);
+ final Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController
+ .updateDisplayState(mPowerRequest, mIsEnabled, mIsInTransition);
+ int state = stateAndReason.first;
// Initialize things the first time the power state is changed.
if (mustInitialize) {
@@ -1287,7 +1290,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// Animate the screen state change unless already animating.
// The transition may be deferred, so after this point we will use the
// actual state instead of the desired one.
- animateScreenStateChange(state, mDisplayStateController.shouldPerformScreenOffTransition());
+ animateScreenStateChange(
+ state, /* reason= */ stateAndReason.second,
+ mDisplayStateController.shouldPerformScreenOffTransition());
state = mPowerState.getScreenState();
// Switch to doze auto-brightness mode if needed
@@ -2024,11 +2029,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
Trace.TRACE_TAG_POWER, SCREEN_ON_BLOCKED_BY_DISPLAYOFFLOAD_TRACE_NAME, 0);
}
- private boolean setScreenState(int state) {
- return setScreenState(state, false /*reportOnly*/);
+ private boolean setScreenState(int state, @Display.StateReason int reason) {
+ return setScreenState(state, reason, false /*reportOnly*/);
}
- private boolean setScreenState(int state, boolean reportOnly) {
+ private boolean setScreenState(int state, @Display.StateReason int reason, boolean reportOnly) {
final boolean isOff = (state == Display.STATE_OFF);
final boolean isOn = (state == Display.STATE_ON);
final boolean changed = mPowerState.getScreenState() != state;
@@ -2075,9 +2080,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
+ " value=" + propertyValue + " " + e.getMessage());
}
- mPowerState.setScreenState(state);
+ mPowerState.setScreenState(state, reason);
// Tell battery stats about the transition.
- noteScreenState(state);
+ noteScreenState(state, reason);
}
}
@@ -2174,7 +2179,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
}
- private void animateScreenStateChange(int target, boolean performScreenOffTransition) {
+ private void animateScreenStateChange(
+ int target, @Display.StateReason int reason, boolean performScreenOffTransition) {
// If there is already an animation in progress, don't interfere with it.
if (mColorFadeEnabled
&& (mColorFadeOnAnimator.isStarted() || mColorFadeOffAnimator.isStarted())) {
@@ -2200,14 +2206,14 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// display has turned off so it can prepare the appropriate power on animation, but we
// don't want to actually transition to the fully off state since that takes
// significantly longer to transition from.
- setScreenState(Display.STATE_OFF, target != Display.STATE_OFF /*reportOnly*/);
+ setScreenState(Display.STATE_OFF, reason, target != Display.STATE_OFF /*reportOnly*/);
}
// If we were in the process of turning off the screen but didn't quite
// finish. Then finish up now to prevent a jarring transition back
// to screen on if we skipped blocking screen on as usual.
if (mPendingScreenOff && target != Display.STATE_OFF) {
- setScreenState(Display.STATE_OFF);
+ setScreenState(Display.STATE_OFF, reason);
mPendingScreenOff = false;
mPowerState.dismissColorFadeResources();
}
@@ -2216,7 +2222,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// Want screen on. The contents of the screen may not yet
// be visible if the color fade has not been dismissed because
// its last frame of animation is solid black.
- if (!setScreenState(Display.STATE_ON)) {
+ if (!setScreenState(Display.STATE_ON, reason)) {
return; // screen on blocked
}
if (USE_COLOR_FADE_ON_ANIMATION && mColorFadeEnabled && mPowerRequest.isBrightOrDim()) {
@@ -2246,7 +2252,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
// Set screen state.
- if (!setScreenState(Display.STATE_DOZE)) {
+ if (!setScreenState(Display.STATE_DOZE, reason)) {
return; // screen on blocked
}
@@ -2265,10 +2271,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// If not already suspending, temporarily set the state to doze until the
// screen on is unblocked, then suspend.
if (mPowerState.getScreenState() != Display.STATE_DOZE_SUSPEND) {
- if (!setScreenState(Display.STATE_DOZE)) {
+ if (!setScreenState(Display.STATE_DOZE, reason)) {
return; // screen on blocked
}
- setScreenState(Display.STATE_DOZE_SUSPEND); // already on so can't block
+ setScreenState(Display.STATE_DOZE_SUSPEND, reason); // already on so can't block
}
// Dismiss the black surface without fanfare.
@@ -2286,10 +2292,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// If not already suspending, temporarily set the state to on until the
// screen on is unblocked, then suspend.
if (mPowerState.getScreenState() != Display.STATE_ON_SUSPEND) {
- if (!setScreenState(Display.STATE_ON)) {
+ if (!setScreenState(Display.STATE_ON, reason)) {
return;
}
- setScreenState(Display.STATE_ON_SUSPEND);
+ setScreenState(Display.STATE_ON_SUSPEND, reason);
}
// Dismiss the black surface without fanfare.
@@ -2305,7 +2311,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (mPowerState.getColorFadeLevel() == 0.0f) {
// Turn the screen off.
// A black surface is already hiding the contents of the screen.
- setScreenState(Display.STATE_OFF);
+ setScreenState(Display.STATE_OFF, reason);
mPendingScreenOff = false;
mPowerState.dismissColorFadeResources();
} else if (performScreenOffTransition
@@ -2667,10 +2673,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
- private void noteScreenState(int screenState) {
+ private void noteScreenState(int screenState, @Display.StateReason int reason) {
// Log screen state change with display id
FrameworkStatsLog.write(FrameworkStatsLog.SCREEN_STATE_CHANGED_V2,
- screenState, mDisplayStatsId);
+ screenState, mDisplayStatsId, reason);
if (mBatteryStats != null) {
try {
// TODO(multi-display): make this multi-display
diff --git a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
index 408d610dea91..d28578ad571f 100644
--- a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
+++ b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java
@@ -23,6 +23,7 @@ import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.BrightnessInfo;
import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
+import android.view.Display;
import java.io.PrintWriter;
@@ -137,7 +138,13 @@ public interface DisplayPowerControllerInterface {
boolean requestPowerState(DisplayManagerInternal.DisplayPowerRequest request,
boolean waitForNegativeProximity);
- void overrideDozeScreenState(int displayState);
+ /**
+ * Overrides the current doze screen state.
+ *
+ * @param displayState the new doze display state.
+ * @param reason the reason behind the new doze display state.
+ */
+ void overrideDozeScreenState(int displayState, @Display.StateReason int reason);
void setDisplayOffloadSession(DisplayManagerInternal.DisplayOffloadSession session);
diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java
index 90bad12869f4..e5efebcf1b41 100644
--- a/services/core/java/com/android/server/display/DisplayPowerState.java
+++ b/services/core/java/com/android/server/display/DisplayPowerState.java
@@ -159,12 +159,13 @@ final class DisplayPowerState {
/**
* Sets whether the screen is on, off, or dozing.
*/
- public void setScreenState(int state) {
+ public void setScreenState(int state, @Display.StateReason int reason) {
if (mScreenState != state) {
if (DEBUG) {
- Slog.w(TAG, "setScreenState: state=" + Display.stateToString(state));
+ Slog.w(TAG,
+ "setScreenState: state=" + Display.stateToString(state)
+ + "; reason=" + Display.stateReasonToString(reason));
}
-
mScreenState = state;
mScreenReady = false;
scheduleScreenUpdate();
diff --git a/services/core/java/com/android/server/display/state/DisplayStateController.java b/services/core/java/com/android/server/display/state/DisplayStateController.java
index 5f289349751f..21bb208981c8 100644
--- a/services/core/java/com/android/server/display/state/DisplayStateController.java
+++ b/services/core/java/com/android/server/display/state/DisplayStateController.java
@@ -18,6 +18,7 @@ package com.android.server.display.state;
import android.hardware.display.DisplayManagerInternal;
import android.util.IndentingPrintWriter;
+import android.util.Pair;
import android.view.Display;
import com.android.server.display.DisplayPowerProximityStateController;
@@ -33,6 +34,7 @@ public class DisplayStateController {
private DisplayPowerProximityStateController mDisplayPowerProximityStateController;
private boolean mPerformScreenOffTransition = false;
private int mDozeStateOverride = Display.STATE_UNKNOWN;
+ private int mDozeStateOverrideReason = Display.STATE_REASON_UNKNOWN;
public DisplayStateController(DisplayPowerProximityStateController
displayPowerProximityStateController) {
@@ -47,14 +49,19 @@ public class DisplayStateController {
* @param isDisplayEnabled A boolean flag representing if the display is enabled
* @param isDisplayInTransition A boolean flag representing if the display is undergoing the
* transition phase
+ * @return a {@link Pair} of integers, the first being the updated display state, and the second
+ * being the reason behind the new display state.
*/
- public int updateDisplayState(DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
- boolean isDisplayEnabled, boolean isDisplayInTransition) {
+ public Pair<Integer, Integer> updateDisplayState(
+ DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
+ boolean isDisplayEnabled,
+ boolean isDisplayInTransition) {
mPerformScreenOffTransition = false;
// Compute the basic display state using the policy.
// We might override this below based on other factors.
// Initialise brightness as invalid.
int state;
+ int reason = Display.STATE_REASON_DEFAULT_POLICY;
switch (displayPowerRequest.policy) {
case DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF:
state = Display.STATE_OFF;
@@ -63,8 +70,10 @@ public class DisplayStateController {
case DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE:
if (mDozeStateOverride != Display.STATE_UNKNOWN) {
state = mDozeStateOverride;
+ reason = mDozeStateOverrideReason;
} else if (displayPowerRequest.dozeScreenState != Display.STATE_UNKNOWN) {
state = displayPowerRequest.dozeScreenState;
+ reason = displayPowerRequest.dozeScreenStateReason;
} else {
state = Display.STATE_DOZE;
}
@@ -84,11 +93,13 @@ public class DisplayStateController {
state = Display.STATE_OFF;
}
- return state;
+ return new Pair(state, reason);
}
- public void overrideDozeScreenState(int displayState) {
+ /** Overrides the doze screen state with a given reason. */
+ public void overrideDozeScreenState(int displayState, @Display.StateReason int reason) {
mDozeStateOverride = displayState;
+ mDozeStateOverrideReason = reason;
}
/**
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index d9970204cf66..42c9e082cf70 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -512,7 +512,7 @@ public final class DreamManagerService extends SystemService {
}
private void startDozingInternal(IBinder token, int screenState,
- int screenBrightness) {
+ @Display.StateReason int reason, int screenBrightness) {
if (DEBUG) {
Slog.d(TAG, "Dream requested to start dozing: " + token
+ ", screenState=" + screenState
@@ -524,7 +524,7 @@ public final class DreamManagerService extends SystemService {
mCurrentDream.dozeScreenState = screenState;
mCurrentDream.dozeScreenBrightness = screenBrightness;
mPowerManagerInternal.setDozeOverrideFromDreamManager(
- screenState, screenBrightness);
+ screenState, reason, screenBrightness);
if (!mCurrentDream.isDozing) {
mCurrentDream.isDozing = true;
mDozeWakeLock.acquire();
@@ -543,7 +543,9 @@ public final class DreamManagerService extends SystemService {
mCurrentDream.isDozing = false;
mDozeWakeLock.release();
mPowerManagerInternal.setDozeOverrideFromDreamManager(
- Display.STATE_UNKNOWN, PowerManager.BRIGHTNESS_DEFAULT);
+ Display.STATE_UNKNOWN,
+ Display.STATE_REASON_DREAM_MANAGER,
+ PowerManager.BRIGHTNESS_DEFAULT);
}
}
}
@@ -1046,7 +1048,9 @@ public final class DreamManagerService extends SystemService {
}
@Override // Binder call
- public void startDozing(IBinder token, int screenState, int screenBrightness) {
+ public void startDozing(
+ IBinder token, int screenState, @Display.StateReason int reason,
+ int screenBrightness) {
// Requires no permission, called by Dream from an arbitrary process.
if (token == null) {
throw new IllegalArgumentException("token must not be null");
@@ -1054,7 +1058,7 @@ public final class DreamManagerService extends SystemService {
final long ident = Binder.clearCallingIdentity();
try {
- startDozingInternal(token, screenState, screenBrightness);
+ startDozingInternal(token, screenState, reason, screenBrightness);
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/core/java/com/android/server/power/PowerGroup.java b/services/core/java/com/android/server/power/PowerGroup.java
index 6a0fe90a1e65..9a9c4f273b82 100644
--- a/services/core/java/com/android/server/power/PowerGroup.java
+++ b/services/core/java/com/android/server/power/PowerGroup.java
@@ -431,8 +431,10 @@ public class PowerGroup {
}
boolean updateLocked(float screenBrightnessOverride, boolean useProximitySensor,
- boolean boostScreenBrightness, int dozeScreenState, float dozeScreenBrightness,
- boolean overrideDrawWakeLock, PowerSaveState powerSaverState, boolean quiescent,
+ boolean boostScreenBrightness, int dozeScreenState,
+ @Display.StateReason int dozeScreenStateReason,
+ float dozeScreenBrightness, boolean overrideDrawWakeLock,
+ PowerSaveState powerSaverState, boolean quiescent,
boolean dozeAfterScreenOff, boolean bootCompleted,
boolean screenBrightnessBoostInProgress, boolean waitForNegativeProximity,
boolean brightWhenDozing) {
@@ -444,18 +446,28 @@ public class PowerGroup {
if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE) {
mDisplayPowerRequest.dozeScreenState = dozeScreenState;
+ mDisplayPowerRequest.dozeScreenStateReason = dozeScreenStateReason;
if ((getWakeLockSummaryLocked() & WAKE_LOCK_DRAW) != 0 && !overrideDrawWakeLock) {
if (mDisplayPowerRequest.dozeScreenState == Display.STATE_DOZE_SUSPEND) {
mDisplayPowerRequest.dozeScreenState = Display.STATE_DOZE;
+ mDisplayPowerRequest.dozeScreenStateReason =
+ Display.STATE_REASON_DRAW_WAKE_LOCK;
}
if (mDisplayPowerRequest.dozeScreenState == Display.STATE_ON_SUSPEND) {
mDisplayPowerRequest.dozeScreenState = Display.STATE_ON;
+ mDisplayPowerRequest.dozeScreenStateReason =
+ Display.STATE_REASON_DRAW_WAKE_LOCK;
}
+ } else {
+ mDisplayPowerRequest.dozeScreenStateReason =
+ Display.STATE_REASON_DEFAULT_POLICY;
}
mDisplayPowerRequest.dozeScreenBrightness = dozeScreenBrightness;
} else {
mDisplayPowerRequest.dozeScreenState = Display.STATE_UNKNOWN;
mDisplayPowerRequest.dozeScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ mDisplayPowerRequest.dozeScreenStateReason =
+ Display.STATE_REASON_DEFAULT_POLICY;
}
mDisplayPowerRequest.lowPowerMode = powerSaverState.batterySaverEnabled;
mDisplayPowerRequest.screenLowPowerBrightnessFactor = powerSaverState.brightnessFactor;
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index ea9ab30e6293..3dec02ecc9a0 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -640,6 +640,8 @@ public final class PowerManagerService extends SystemService
// The screen state to use while dozing.
private int mDozeScreenStateOverrideFromDreamManager = Display.STATE_UNKNOWN;
+ private int mDozeScreenStateOverrideReasonFromDreamManager = Display.STATE_REASON_UNKNOWN;
+
// The screen brightness to use while dozing.
private int mDozeScreenBrightnessOverrideFromDreamManager = PowerManager.BRIGHTNESS_DEFAULT;
@@ -3574,6 +3576,7 @@ public final class PowerManagerService extends SystemService
boolean ready = powerGroup.updateLocked(screenBrightnessOverride,
shouldUseProximitySensorLocked(), shouldBoostScreenBrightness(),
mDozeScreenStateOverrideFromDreamManager,
+ mDozeScreenStateOverrideReasonFromDreamManager,
mDozeScreenBrightnessOverrideFromDreamManagerFloat,
mDrawWakeLockOverrideFromSidekick,
mBatterySaverSupported
@@ -4383,11 +4386,12 @@ public final class PowerManagerService extends SystemService
}
private void setDozeOverrideFromDreamManagerInternal(
- int screenState, int screenBrightness) {
+ int screenState, @Display.StateReason int reason, int screenBrightness) {
synchronized (mLock) {
if (mDozeScreenStateOverrideFromDreamManager != screenState
|| mDozeScreenBrightnessOverrideFromDreamManager != screenBrightness) {
mDozeScreenStateOverrideFromDreamManager = screenState;
+ mDozeScreenStateOverrideReasonFromDreamManager = reason;
mDozeScreenBrightnessOverrideFromDreamManager = screenBrightness;
mDozeScreenBrightnessOverrideFromDreamManagerFloat =
BrightnessSynchronizer.brightnessIntToFloat(mDozeScreenBrightnessOverrideFromDreamManager);
@@ -6985,7 +6989,8 @@ public final class PowerManagerService extends SystemService
}
@Override
- public void setDozeOverrideFromDreamManager(int screenState, int screenBrightness) {
+ public void setDozeOverrideFromDreamManager(
+ int screenState, int reason, int screenBrightness) {
switch (screenState) {
case Display.STATE_UNKNOWN:
case Display.STATE_OFF:
@@ -7002,7 +7007,7 @@ public final class PowerManagerService extends SystemService
|| screenBrightness > PowerManager.BRIGHTNESS_ON) {
screenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
}
- setDozeOverrideFromDreamManagerInternal(screenState, screenBrightness);
+ setDozeOverrideFromDreamManagerInternal(screenState, reason, screenBrightness);
}
@Override
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
index a28259ded005..db2a1f46a891 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -265,7 +265,8 @@ public final class DisplayPowerControllerTest {
advanceTime(1);
// The display should have been turned off
- verify(mHolder.displayPowerState).setScreenState(Display.STATE_OFF);
+ verify(mHolder.displayPowerState)
+ .setScreenState(Display.STATE_OFF, Display.STATE_REASON_DEFAULT_POLICY);
clearInvocations(mHolder.displayPowerState);
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_OFF);
@@ -276,13 +277,15 @@ public final class DisplayPowerControllerTest {
advanceTime(1);
// The prox sensor is debounced so the display should not have been turned back on yet
- verify(mHolder.displayPowerState, never()).setScreenState(Display.STATE_ON);
+ verify(mHolder.displayPowerState, never())
+ .setScreenState(Display.STATE_ON, Display.STATE_REASON_DEFAULT_POLICY);
// Advance time by more than PROXIMITY_SENSOR_NEGATIVE_DEBOUNCE_DELAY
advanceTime(1000);
// The display should have been turned back on
- verify(mHolder.displayPowerState).setScreenState(Display.STATE_ON);
+ verify(mHolder.displayPowerState)
+ .setScreenState(Display.STATE_ON, Display.STATE_REASON_DEFAULT_POLICY);
}
@Test
@@ -305,7 +308,8 @@ public final class DisplayPowerControllerTest {
advanceTime(1);
// The display should have been turned off
- verify(mHolder.displayPowerState).setScreenState(Display.STATE_OFF);
+ verify(mHolder.displayPowerState)
+ .setScreenState(Display.STATE_OFF, Display.STATE_REASON_DEFAULT_POLICY);
when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_OFF);
// The display device changes and we no longer have a prox sensor
@@ -318,7 +322,8 @@ public final class DisplayPowerControllerTest {
// The display should have been turned back on and the listener should have been
// unregistered
- verify(mHolder.displayPowerState).setScreenState(Display.STATE_ON);
+ verify(mHolder.displayPowerState)
+ .setScreenState(Display.STATE_ON, Display.STATE_REASON_DEFAULT_POLICY);
verify(mSensorManagerMock).unregisterListener(listener);
}
@@ -814,17 +819,17 @@ public final class DisplayPowerControllerTest {
DisplayPowerRequest dpr = new DisplayPowerRequest();
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
- verify(mHolder.displayPowerState).setScreenState(anyInt());
+ verify(mHolder.displayPowerState).setScreenState(anyInt(), anyInt());
mHolder = createDisplayPowerController(42, UNIQUE_ID);
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
- verify(mHolder.displayPowerState, never()).setScreenState(anyInt());
+ verify(mHolder.displayPowerState, never()).setScreenState(anyInt(), anyInt());
mHolder.dpc.onBootCompleted();
advanceTime(1); // Run updatePowerState
- verify(mHolder.displayPowerState).setScreenState(anyInt());
+ verify(mHolder.displayPowerState).setScreenState(anyInt(), anyInt());
}
@Test
@@ -1469,7 +1474,7 @@ public final class DisplayPowerControllerTest {
doAnswer(invocation -> {
when(mHolder.displayPowerState.getScreenState()).thenReturn(invocation.getArgument(0));
return null;
- }).when(mHolder.displayPowerState).setScreenState(anyInt());
+ }).when(mHolder.displayPowerState).setScreenState(anyInt(), anyInt());
mHolder.dpc.setDisplayOffloadSession(mDisplayOffloadSession);
// start with DOZE.
@@ -1479,10 +1484,12 @@ public final class DisplayPowerControllerTest {
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
- mHolder.dpc.overrideDozeScreenState(supportedTargetState);
+ mHolder.dpc.overrideDozeScreenState(
+ supportedTargetState, Display.STATE_REASON_DEFAULT_POLICY);
advanceTime(1); // Run updatePowerState
- verify(mHolder.displayPowerState).setScreenState(supportedTargetState);
+ verify(mHolder.displayPowerState)
+ .setScreenState(supportedTargetState, Display.STATE_REASON_DEFAULT_POLICY);
}
@Test
@@ -1495,7 +1502,7 @@ public final class DisplayPowerControllerTest {
doAnswer(invocation -> {
when(mHolder.displayPowerState.getScreenState()).thenReturn(invocation.getArgument(0));
return null;
- }).when(mHolder.displayPowerState).setScreenState(anyInt());
+ }).when(mHolder.displayPowerState).setScreenState(anyInt(), anyInt());
mHolder.dpc.setDisplayOffloadSession(mDisplayOffloadSession);
// start with DOZE.
@@ -1505,10 +1512,12 @@ public final class DisplayPowerControllerTest {
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
- mHolder.dpc.overrideDozeScreenState(unSupportedTargetState);
+ mHolder.dpc.overrideDozeScreenState(
+ unSupportedTargetState, Display.STATE_REASON_DEFAULT_POLICY);
advanceTime(1); // Run updatePowerState
- verify(mHolder.displayPowerState, never()).setScreenState(anyInt());
+ verify(mHolder.displayPowerState, never())
+ .setScreenState(anyInt(), eq(Display.STATE_REASON_DEFAULT_POLICY));
}
@Test
@@ -1520,7 +1529,7 @@ public final class DisplayPowerControllerTest {
doAnswer(invocation -> {
when(mHolder.displayPowerState.getScreenState()).thenReturn(invocation.getArgument(0));
return null;
- }).when(mHolder.displayPowerState).setScreenState(anyInt());
+ }).when(mHolder.displayPowerState).setScreenState(anyInt(), anyInt());
mHolder.dpc.setDisplayOffloadSession(mDisplayOffloadSession);
// start with OFF.
@@ -1530,10 +1539,11 @@ public final class DisplayPowerControllerTest {
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
- mHolder.dpc.overrideDozeScreenState(supportedTargetState);
+ mHolder.dpc.overrideDozeScreenState(
+ supportedTargetState, Display.STATE_REASON_DEFAULT_POLICY);
advanceTime(1); // Run updatePowerState
- verify(mHolder.displayPowerState, never()).setScreenState(anyInt());
+ verify(mHolder.displayPowerState, never()).setScreenState(anyInt(), anyInt());
}
@Test
diff --git a/services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java
index f5c6bb2e618b..de53266dc14e 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/state/DisplayStateControllerTest.java
@@ -18,11 +18,13 @@ package com.android.server.display.state;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.hardware.display.DisplayManagerInternal;
+import android.util.Pair;
import android.view.Display;
import androidx.test.filters.SmallTest;
@@ -61,9 +63,11 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF;
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest, DISPLAY_ENABLED,
- !DISPLAY_IN_TRANSITION);
- assertEquals(Display.STATE_OFF, state);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, DISPLAY_ENABLED, !DISPLAY_IN_TRANSITION);
+ assertTrue(Display.STATE_OFF == stateAndReason.first);
+ assertTrue(Display.STATE_REASON_DEFAULT_POLICY == stateAndReason.second);
verify(mDisplayPowerProximityStateController).updateProximityState(displayPowerRequest,
Display.STATE_OFF);
assertEquals(true, mDisplayStateController.shouldPerformScreenOffTransition());
@@ -101,9 +105,11 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest,
- !DISPLAY_ENABLED, !DISPLAY_IN_TRANSITION);
- assertEquals(Display.STATE_OFF, state);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, !DISPLAY_ENABLED, !DISPLAY_IN_TRANSITION);
+ assertTrue(Display.STATE_OFF == stateAndReason.first);
+ assertTrue(Display.STATE_REASON_DEFAULT_POLICY == stateAndReason.second);
verify(mDisplayPowerProximityStateController).updateProximityState(displayPowerRequest,
Display.STATE_ON);
assertEquals(false, mDisplayStateController.shouldPerformScreenOffTransition());
@@ -117,9 +123,11 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest, DISPLAY_ENABLED,
- DISPLAY_IN_TRANSITION);
- assertEquals(Display.STATE_OFF, state);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, DISPLAY_ENABLED, DISPLAY_IN_TRANSITION);
+ assertTrue(Display.STATE_OFF == stateAndReason.first);
+ assertTrue(Display.STATE_REASON_DEFAULT_POLICY == stateAndReason.second);
verify(mDisplayPowerProximityStateController).updateProximityState(displayPowerRequest,
Display.STATE_ON);
assertEquals(false, mDisplayStateController.shouldPerformScreenOffTransition());
@@ -133,9 +141,11 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT;
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest, DISPLAY_ENABLED,
- !DISPLAY_IN_TRANSITION);
- assertEquals(Display.STATE_OFF, state);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, DISPLAY_ENABLED, !DISPLAY_IN_TRANSITION);
+ assertTrue(Display.STATE_OFF == stateAndReason.first);
+ assertTrue(Display.STATE_REASON_DEFAULT_POLICY == stateAndReason.second);
verify(mDisplayPowerProximityStateController).updateProximityState(displayPowerRequest,
Display.STATE_ON);
assertEquals(false, mDisplayStateController.shouldPerformScreenOffTransition());
@@ -146,12 +156,15 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
new DisplayManagerInternal.DisplayPowerRequest();
displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE;
- mDisplayStateController.overrideDozeScreenState(Display.STATE_DOZE_SUSPEND);
+ mDisplayStateController.overrideDozeScreenState(
+ Display.STATE_DOZE_SUSPEND, Display.STATE_REASON_OFFLOAD);
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest, DISPLAY_ENABLED,
- !DISPLAY_IN_TRANSITION);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, DISPLAY_ENABLED, !DISPLAY_IN_TRANSITION);
- assertEquals(state, Display.STATE_DOZE_SUSPEND);
+ assertTrue(Display.STATE_DOZE_SUSPEND == stateAndReason.first);
+ assertTrue(Display.STATE_REASON_OFFLOAD == stateAndReason.second);
}
@Test
@@ -159,12 +172,15 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
new DisplayManagerInternal.DisplayPowerRequest();
displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF;
- mDisplayStateController.overrideDozeScreenState(Display.STATE_DOZE_SUSPEND);
+ mDisplayStateController.overrideDozeScreenState(
+ Display.STATE_DOZE_SUSPEND, Display.STATE_REASON_DEFAULT_POLICY);
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest, DISPLAY_ENABLED,
- !DISPLAY_IN_TRANSITION);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, DISPLAY_ENABLED, !DISPLAY_IN_TRANSITION);
- assertEquals(state, Display.STATE_OFF);
+ assertTrue(Display.STATE_OFF == stateAndReason.first);
+ assertTrue(Display.STATE_REASON_DEFAULT_POLICY == stateAndReason.second);
}
private void validDisplayState(int policy, int displayState, boolean isEnabled,
@@ -172,9 +188,10 @@ public final class DisplayStateControllerTest {
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock(
DisplayManagerInternal.DisplayPowerRequest.class);
displayPowerRequest.policy = policy;
- int state = mDisplayStateController.updateDisplayState(displayPowerRequest, isEnabled,
- isInTransition);
- assertEquals(displayState, state);
+ Pair<Integer, Integer> stateAndReason =
+ mDisplayStateController.updateDisplayState(
+ displayPowerRequest, isEnabled, isInTransition);
+ assertTrue(displayState == stateAndReason.first);
verify(mDisplayPowerProximityStateController).updateProximityState(displayPowerRequest,
displayState);
assertEquals(false, mDisplayStateController.shouldPerformScreenOffTransition());
diff --git a/services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java b/services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java
index a776eec4546f..94b8d68395a5 100644
--- a/services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java
+++ b/services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java
@@ -260,6 +260,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ false,
/* boostScreenBrightness= */ false,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -299,6 +300,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -337,6 +339,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -374,6 +377,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -411,6 +415,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -449,6 +454,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -485,6 +491,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -522,6 +529,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
@@ -558,6 +566,7 @@ public class PowerGroupTest {
/* useProximitySensor= */ true,
/* boostScreenBrightness= */ true,
/* dozeScreenStateOverride= */ Display.STATE_ON,
+ /* dozeScreenStateReason= */ Display.STATE_REASON_DEFAULT_POLICY,
/* dozeScreenBrightness= */ BRIGHTNESS_DOZE,
/* overrideDrawWakeLock= */ false,
powerSaveState,
diff --git a/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
index f86ff14218ba..52f28e95e6b5 100644
--- a/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -1293,7 +1293,10 @@ public class PowerManagerServiceTest {
// Override the display state by DreamManager and verify is reacquires the blocker.
mService.getLocalServiceInstance()
- .setDozeOverrideFromDreamManager(Display.STATE_ON, PowerManager.BRIGHTNESS_DEFAULT);
+ .setDozeOverrideFromDreamManager(
+ Display.STATE_ON,
+ Display.STATE_REASON_DEFAULT_POLICY,
+ PowerManager.BRIGHTNESS_DEFAULT);
assertTrue(isAcquired[0]);
}