diff options
| author | 2020-04-03 17:24:45 +0100 | |
|---|---|---|
| committer | 2020-04-06 19:28:55 +0100 | |
| commit | 29dce0f0a93787bc3d40faf60bf8c1aad5c5aa66 (patch) | |
| tree | 37c662d2ffa9bcf5eb4681f67866f1a1cf11a363 | |
| parent | bc93009274b4dd570d5127bb3bd3b158d70feb46 (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
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. |