summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fiona Campbell <flc@google.com> 2020-04-03 17:24:45 +0100
committer Fiona Campbell <flc@google.com> 2020-04-06 19:28:55 +0100
commit29dce0f0a93787bc3d40faf60bf8c1aad5c5aa66 (patch)
tree37c662d2ffa9bcf5eb4681f67866f1a1cf11a363
parentbc93009274b4dd570d5127bb3bd3b158d70feb46 (diff)
Make PowerManagerService use float for brightness
Change the override brightness values to use float instead of an int in PowerManagerService. Bug: 150671605 Test: WmTests:RootWindowContainerTests FrameworksServicesTests:PowerManagerServiceTest CtsOsTestCases:android.os.cts.PowerManagerTest FrameworksCoreTests:android.os.PowerManagerTest Change-Id: I97e97e1500dac7f8beb112812d1347fa420afbf7
-rw-r--r--core/java/android/os/PowerManagerInternal.java4
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java33
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java25
3 files changed, 28 insertions, 34 deletions
diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java
index 51f01cac8138..653a5594f495 100644
--- a/core/java/android/os/PowerManagerInternal.java
+++ b/core/java/android/os/PowerManagerInternal.java
@@ -102,9 +102,9 @@ public abstract class PowerManagerInternal {
*
* This method must only be called by the window manager.
*
- * @param brightness The overridden brightness, or -1 to disable the override.
+ * @param brightness The overridden brightness, or Float.NaN to disable the override.
*/
- public abstract void setScreenBrightnessOverrideFromWindowManager(int brightness);
+ public abstract void setScreenBrightnessOverrideFromWindowManager(float brightness);
/**
* Used by the window manager to override the user activity timeout based on the
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index b41bc5c2dc51..cd6c5bfaeb79 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -513,10 +513,7 @@ public final class PowerManagerService extends SystemService
// The screen brightness setting override from the window manager
// to allow the current foreground activity to override the brightness.
- // Use -1 to disable.
- private int mScreenBrightnessOverrideFromWindowManager = -1;
-
- private float mScreenBrightnessOverrideFromWindowManagerFloat =
+ private float mScreenBrightnessOverrideFromWindowManager =
PowerManager.BRIGHTNESS_INVALID_FLOAT;
// The window manager has determined the user to be inactive via other means.
@@ -2846,7 +2843,7 @@ public final class PowerManagerService extends SystemService
screenBrightnessOverride = mScreenBrightnessSettingDefault;
} else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
autoBrightness = false;
- screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManagerFloat;
+ screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManager;
} else {
autoBrightness = (mScreenBrightnessModeSetting ==
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
@@ -2927,8 +2924,8 @@ public final class PowerManagerService extends SystemService
return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress;
}
- private static boolean isValidBrightness(int value) {
- return value >= 0 && value <= 255;
+ private static boolean isValidBrightness(float value) {
+ return value >= PowerManager.BRIGHTNESS_MIN && value <= PowerManager.BRIGHTNESS_MAX;
}
@VisibleForTesting
@@ -3583,13 +3580,11 @@ public final class PowerManagerService extends SystemService
}
}
- // TODO(brightnessfloat): change to float
- private void setScreenBrightnessOverrideFromWindowManagerInternal(int brightness) {
+ private void setScreenBrightnessOverrideFromWindowManagerInternal(float brightness) {
synchronized (mLock) {
- if (mScreenBrightnessOverrideFromWindowManager != brightness) {
+ if (!BrightnessSynchronizer.floatEquals(mScreenBrightnessOverrideFromWindowManager,
+ brightness)) {
mScreenBrightnessOverrideFromWindowManager = brightness;
- mScreenBrightnessOverrideFromWindowManagerFloat =
- BrightnessSynchronizer.brightnessIntToFloat(mContext, brightness);
mDirty |= DIRTY_SETTINGS;
updatePowerStateLocked();
}
@@ -3890,8 +3885,8 @@ public final class PowerManagerService extends SystemService
+ isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
pw.println(" mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
- pw.println(" mScreenBrightnessOverrideFromWindowManagerFloat="
- + mScreenBrightnessOverrideFromWindowManagerFloat);
+ pw.println(" mScreenBrightnessOverrideFromWindowManager="
+ + mScreenBrightnessOverrideFromWindowManager);
pw.println(" mUserActivityTimeoutOverrideFromWindowManager="
+ mUserActivityTimeoutOverrideFromWindowManager);
pw.println(" mUserInactiveOverrideFromWindowManager="
@@ -4231,7 +4226,7 @@ public final class PowerManagerService extends SystemService
proto.write(
PowerServiceSettingsAndConfigurationDumpProto
.SCREEN_BRIGHTNESS_OVERRIDE_FROM_WINDOW_MANAGER,
- mScreenBrightnessOverrideFromWindowManagerFloat);
+ mScreenBrightnessOverrideFromWindowManager);
proto.write(
PowerServiceSettingsAndConfigurationDumpProto
.USER_ACTIVITY_TIMEOUT_OVERRIDE_FROM_WINDOW_MANAGER_MS,
@@ -5430,10 +5425,10 @@ public final class PowerManagerService extends SystemService
@VisibleForTesting
final class LocalService extends PowerManagerInternal {
@Override
- public void setScreenBrightnessOverrideFromWindowManager(int screenBrightness) {
- if (screenBrightness < PowerManager.BRIGHTNESS_DEFAULT
- || screenBrightness > PowerManager.BRIGHTNESS_ON) {
- screenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
+ public void setScreenBrightnessOverrideFromWindowManager(float screenBrightness) {
+ if (screenBrightness < PowerManager.BRIGHTNESS_MIN
+ || screenBrightness > PowerManager.BRIGHTNESS_MAX) {
+ screenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
}
setScreenBrightnessOverrideFromWindowManagerInternal(screenBrightness);
}
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 2764b121cc00..c532f01bd253 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -178,7 +178,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
private Object mLastWindowFreezeSource = null;
private Session mHoldScreen = null;
- private float mScreenBrightness = -1;
+ private float mScreenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
private long mUserActivityTimeout = -1;
private boolean mUpdateRotation = false;
// Following variables are for debugging screen wakelock only.
@@ -826,7 +826,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
}
mHoldScreen = null;
- mScreenBrightness = -1;
+ mScreenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mUserActivityTimeout = -1;
mObscureApplicationContentOnSecondaryDisplays = false;
mSustainedPerformanceModeCurrent = false;
@@ -936,12 +936,14 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
mWmService.setHoldScreenLocked(mHoldScreen);
if (!mWmService.mDisplayFrozen) {
- final int brightness = mScreenBrightness < 0 || mScreenBrightness > 1.0f
- ? -1 : toBrightnessOverride(mScreenBrightness);
-
+ final float brightnessOverride = mScreenBrightnessOverride < PowerManager.BRIGHTNESS_MIN
+ || mScreenBrightnessOverride > PowerManager.BRIGHTNESS_MAX
+ ? PowerManager.BRIGHTNESS_INVALID_FLOAT : mScreenBrightnessOverride;
+ int brightnessFloatAsIntBits = Float.floatToIntBits(brightnessOverride);
// Post these on a handler such that we don't call into power manager service while
// holding the window manager lock to avoid lock contention with power manager lock.
- mHandler.obtainMessage(SET_SCREEN_BRIGHTNESS_OVERRIDE, brightness, 0).sendToTarget();
+ mHandler.obtainMessage(SET_SCREEN_BRIGHTNESS_OVERRIDE, brightnessFloatAsIntBits,
+ 0).sendToTarget();
mHandler.obtainMessage(SET_USER_ACTIVITY_TIMEOUT, mUserActivityTimeout).sendToTarget();
}
@@ -1125,8 +1127,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
+ "has FLAG_KEEP_SCREEN_ON!!! called by%s",
w, Debug.getCallers(10));
}
- if (!syswin && w.mAttrs.screenBrightness >= 0 && mScreenBrightness < 0) {
- mScreenBrightness = w.mAttrs.screenBrightness;
+ if (!syswin && w.mAttrs.screenBrightness >= 0
+ && Float.isNaN(mScreenBrightnessOverride)) {
+ mScreenBrightnessOverride = w.mAttrs.screenBrightness;
}
final int type = attrs.type;
@@ -1190,10 +1193,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return doRequest;
}
- private static int toBrightnessOverride(float value) {
- return (int)(value * PowerManager.BRIGHTNESS_ON);
- }
-
private final class MyHandler extends Handler {
public MyHandler(Looper looper) {
@@ -1205,7 +1204,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
switch (msg.what) {
case SET_SCREEN_BRIGHTNESS_OVERRIDE:
mWmService.mPowerManagerInternal.setScreenBrightnessOverrideFromWindowManager(
- msg.arg1);
+ Float.intBitsToFloat(msg.arg1));
break;
case SET_USER_ACTIVITY_TIMEOUT:
mWmService.mPowerManagerInternal.