Merge "Make PowerManagerService use float for brightness" into rvc-dev

This commit is contained in:
Fiona Campbell
2020-04-07 09:36:09 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 34 deletions

View File

@@ -102,9 +102,9 @@ public abstract class PowerManagerInternal {
* *
* This method must only be called by the window manager. * 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 * Used by the window manager to override the user activity timeout based on the

View File

@@ -513,10 +513,7 @@ public final class PowerManagerService extends SystemService
// The screen brightness setting override from the window manager // The screen brightness setting override from the window manager
// to allow the current foreground activity to override the brightness. // to allow the current foreground activity to override the brightness.
// Use -1 to disable. private float mScreenBrightnessOverrideFromWindowManager =
private int mScreenBrightnessOverrideFromWindowManager = -1;
private float mScreenBrightnessOverrideFromWindowManagerFloat =
PowerManager.BRIGHTNESS_INVALID_FLOAT; PowerManager.BRIGHTNESS_INVALID_FLOAT;
// The window manager has determined the user to be inactive via other means. // 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; screenBrightnessOverride = mScreenBrightnessSettingDefault;
} else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) { } else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
autoBrightness = false; autoBrightness = false;
screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManagerFloat; screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManager;
} else { } else {
autoBrightness = (mScreenBrightnessModeSetting == autoBrightness = (mScreenBrightnessModeSetting ==
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
@@ -2927,8 +2924,8 @@ public final class PowerManagerService extends SystemService
return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress; return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress;
} }
private static boolean isValidBrightness(int value) { private static boolean isValidBrightness(float value) {
return value >= 0 && value <= 255; return value >= PowerManager.BRIGHTNESS_MIN && value <= PowerManager.BRIGHTNESS_MAX;
} }
@VisibleForTesting @VisibleForTesting
@@ -3583,13 +3580,11 @@ public final class PowerManagerService extends SystemService
} }
} }
// TODO(brightnessfloat): change to float private void setScreenBrightnessOverrideFromWindowManagerInternal(float brightness) {
private void setScreenBrightnessOverrideFromWindowManagerInternal(int brightness) {
synchronized (mLock) { synchronized (mLock) {
if (mScreenBrightnessOverrideFromWindowManager != brightness) { if (!BrightnessSynchronizer.floatEquals(mScreenBrightnessOverrideFromWindowManager,
brightness)) {
mScreenBrightnessOverrideFromWindowManager = brightness; mScreenBrightnessOverrideFromWindowManager = brightness;
mScreenBrightnessOverrideFromWindowManagerFloat =
BrightnessSynchronizer.brightnessIntToFloat(mContext, brightness);
mDirty |= DIRTY_SETTINGS; mDirty |= DIRTY_SETTINGS;
updatePowerStateLocked(); updatePowerStateLocked();
} }
@@ -3890,8 +3885,8 @@ public final class PowerManagerService extends SystemService
+ isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")"); + isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
pw.println(" mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting); pw.println(" mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting); pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
pw.println(" mScreenBrightnessOverrideFromWindowManagerFloat=" pw.println(" mScreenBrightnessOverrideFromWindowManager="
+ mScreenBrightnessOverrideFromWindowManagerFloat); + mScreenBrightnessOverrideFromWindowManager);
pw.println(" mUserActivityTimeoutOverrideFromWindowManager=" pw.println(" mUserActivityTimeoutOverrideFromWindowManager="
+ mUserActivityTimeoutOverrideFromWindowManager); + mUserActivityTimeoutOverrideFromWindowManager);
pw.println(" mUserInactiveOverrideFromWindowManager=" pw.println(" mUserInactiveOverrideFromWindowManager="
@@ -4231,7 +4226,7 @@ public final class PowerManagerService extends SystemService
proto.write( proto.write(
PowerServiceSettingsAndConfigurationDumpProto PowerServiceSettingsAndConfigurationDumpProto
.SCREEN_BRIGHTNESS_OVERRIDE_FROM_WINDOW_MANAGER, .SCREEN_BRIGHTNESS_OVERRIDE_FROM_WINDOW_MANAGER,
mScreenBrightnessOverrideFromWindowManagerFloat); mScreenBrightnessOverrideFromWindowManager);
proto.write( proto.write(
PowerServiceSettingsAndConfigurationDumpProto PowerServiceSettingsAndConfigurationDumpProto
.USER_ACTIVITY_TIMEOUT_OVERRIDE_FROM_WINDOW_MANAGER_MS, .USER_ACTIVITY_TIMEOUT_OVERRIDE_FROM_WINDOW_MANAGER_MS,
@@ -5430,10 +5425,10 @@ public final class PowerManagerService extends SystemService
@VisibleForTesting @VisibleForTesting
final class LocalService extends PowerManagerInternal { final class LocalService extends PowerManagerInternal {
@Override @Override
public void setScreenBrightnessOverrideFromWindowManager(int screenBrightness) { public void setScreenBrightnessOverrideFromWindowManager(float screenBrightness) {
if (screenBrightness < PowerManager.BRIGHTNESS_DEFAULT if (screenBrightness < PowerManager.BRIGHTNESS_MIN
|| screenBrightness > PowerManager.BRIGHTNESS_ON) { || screenBrightness > PowerManager.BRIGHTNESS_MAX) {
screenBrightness = PowerManager.BRIGHTNESS_DEFAULT; screenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
} }
setScreenBrightnessOverrideFromWindowManagerInternal(screenBrightness); setScreenBrightnessOverrideFromWindowManagerInternal(screenBrightness);
} }

View File

@@ -178,7 +178,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
private Object mLastWindowFreezeSource = null; private Object mLastWindowFreezeSource = null;
private Session mHoldScreen = null; private Session mHoldScreen = null;
private float mScreenBrightness = -1; private float mScreenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
private long mUserActivityTimeout = -1; private long mUserActivityTimeout = -1;
private boolean mUpdateRotation = false; private boolean mUpdateRotation = false;
// Following variables are for debugging screen wakelock only. // Following variables are for debugging screen wakelock only.
@@ -826,7 +826,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
} }
mHoldScreen = null; mHoldScreen = null;
mScreenBrightness = -1; mScreenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mUserActivityTimeout = -1; mUserActivityTimeout = -1;
mObscureApplicationContentOnSecondaryDisplays = false; mObscureApplicationContentOnSecondaryDisplays = false;
mSustainedPerformanceModeCurrent = false; mSustainedPerformanceModeCurrent = false;
@@ -936,12 +936,14 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
mWmService.setHoldScreenLocked(mHoldScreen); mWmService.setHoldScreenLocked(mHoldScreen);
if (!mWmService.mDisplayFrozen) { if (!mWmService.mDisplayFrozen) {
final int brightness = mScreenBrightness < 0 || mScreenBrightness > 1.0f final float brightnessOverride = mScreenBrightnessOverride < PowerManager.BRIGHTNESS_MIN
? -1 : toBrightnessOverride(mScreenBrightness); || 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 // 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. // 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(); 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", + "has FLAG_KEEP_SCREEN_ON!!! called by%s",
w, Debug.getCallers(10)); w, Debug.getCallers(10));
} }
if (!syswin && w.mAttrs.screenBrightness >= 0 && mScreenBrightness < 0) { if (!syswin && w.mAttrs.screenBrightness >= 0
mScreenBrightness = w.mAttrs.screenBrightness; && Float.isNaN(mScreenBrightnessOverride)) {
mScreenBrightnessOverride = w.mAttrs.screenBrightness;
} }
final int type = attrs.type; final int type = attrs.type;
@@ -1190,10 +1193,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return doRequest; return doRequest;
} }
private static int toBrightnessOverride(float value) {
return (int)(value * PowerManager.BRIGHTNESS_ON);
}
private final class MyHandler extends Handler { private final class MyHandler extends Handler {
public MyHandler(Looper looper) { public MyHandler(Looper looper) {
@@ -1205,7 +1204,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
switch (msg.what) { switch (msg.what) {
case SET_SCREEN_BRIGHTNESS_OVERRIDE: case SET_SCREEN_BRIGHTNESS_OVERRIDE:
mWmService.mPowerManagerInternal.setScreenBrightnessOverrideFromWindowManager( mWmService.mPowerManagerInternal.setScreenBrightnessOverrideFromWindowManager(
msg.arg1); Float.intBitsToFloat(msg.arg1));
break; break;
case SET_USER_ACTIVITY_TIMEOUT: case SET_USER_ACTIVITY_TIMEOUT:
mWmService.mPowerManagerInternal. mWmService.mPowerManagerInternal.