From 792229b553bb6959e4ee98495c6dcb2882641af7 Mon Sep 17 00:00:00 2001 From: Daniel Solomon Date: Tue, 27 Jul 2021 22:31:51 +0000 Subject: [PATCH] Revert "SCREEN_BRIGHTNESS - map 255 to current max" This reverts commit 002e656a515da3f1d19f1d23ab7b776df3cfd77d. Reason for revert: Setting brightness using adb (adb shell settings put system screen_brightness ...) results in different brightness being set by DisplayPowerController each time. Bug: 194791517 Test: atest HighBrightnessModeControllerTest Test: manually test `settings put system screen_brightness 23` yields consistent results Change-Id: I6b49253b46e4d09a1f4129d3df950c9d36eb6ede --- .../display/BrightnessSynchronizer.java | 90 +++++++------------ .../brightness/BrightnessController.java | 5 +- .../display/DisplayPowerController.java | 2 +- .../server/display/LocalDisplayAdapter.java | 5 +- .../android/server/lights/LightsService.java | 2 +- 5 files changed, 39 insertions(+), 65 deletions(-) diff --git a/core/java/com/android/internal/display/BrightnessSynchronizer.java b/core/java/com/android/internal/display/BrightnessSynchronizer.java index 55a2052f9242f..c9a9e51dceed8 100644 --- a/core/java/com/android/internal/display/BrightnessSynchronizer.java +++ b/core/java/com/android/internal/display/BrightnessSynchronizer.java @@ -16,11 +16,9 @@ package com.android.internal.display; -import android.annotation.NonNull; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; -import android.hardware.display.BrightnessInfo; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager.DisplayListener; import android.net.Uri; @@ -63,10 +61,10 @@ public class BrightnessSynchronizer { updateBrightnessFloatFromInt(msg.arg1); break; case MSG_UPDATE_INT: - updateBrightnessIntFromFloat((BrightnessInfo) msg.obj); + updateBrightnessIntFromFloat(Float.intBitsToFloat(msg.arg1)); break; case MSG_UPDATE_BOTH: - updateBoth((BrightnessInfo) msg.obj, Float.intBitsToFloat(msg.arg1)); + updateBoth(Float.intBitsToFloat(msg.arg1)); break; default: super.handleMessage(msg); @@ -97,11 +95,11 @@ public class BrightnessSynchronizer { brightnessSyncObserver = new BrightnessSyncObserver(); brightnessSyncObserver.startObserving(); - final BrightnessInfo brightnessInfo = getBrightnessInfo(); + final float currentFloatBrightness = getScreenBrightnessFloat(); final int currentIntBrightness = getScreenBrightnessInt(mContext); - if (brightnessInfo != null && !Float.isNaN(brightnessInfo.brightness)) { - updateBrightnessIntFromFloat(brightnessInfo); + if (!Float.isNaN(currentFloatBrightness)) { + updateBrightnessIntFromFloat(currentFloatBrightness); } else if (currentIntBrightness != -1) { updateBrightnessFloatFromInt(currentIntBrightness); } else { @@ -114,52 +112,45 @@ public class BrightnessSynchronizer { /** * Converts between the int brightness system and the float brightness system. - * - * @param brightnessInt The int brightness value to convert. */ public static float brightnessIntToFloat(int brightnessInt) { - return brightnessIntToFloat(brightnessInt, null); - } - - private static float brightnessIntToFloat(int brightnessInt, BrightnessInfo info) { if (brightnessInt == PowerManager.BRIGHTNESS_OFF) { return PowerManager.BRIGHTNESS_OFF_FLOAT; } else if (brightnessInt == PowerManager.BRIGHTNESS_INVALID) { return PowerManager.BRIGHTNESS_INVALID_FLOAT; } else { - final float minFloat = info != null - ? info.brightnessMinimum : PowerManager.BRIGHTNESS_MIN; - final float maxFloat = info != null - ? info.brightnessMaximum : PowerManager.BRIGHTNESS_MAX; + final float minFloat = PowerManager.BRIGHTNESS_MIN; + final float maxFloat = PowerManager.BRIGHTNESS_MAX; final float minInt = PowerManager.BRIGHTNESS_OFF + 1; final float maxInt = PowerManager.BRIGHTNESS_ON; return MathUtils.constrainedMap(minFloat, maxFloat, minInt, maxInt, brightnessInt); } } + /** + * Converts between the float brightness system and the int brightness system. + */ + public static int brightnessFloatToInt(float brightnessFloat) { + return Math.round(brightnessFloatToIntRange(brightnessFloat)); + } + /** * Translates specified value from the float brightness system to the int brightness system, * given the min/max of each range. Accounts for special values such as OFF and invalid values. * Value returned as a float primitive (to preserve precision), but is a value within the * int-system range. - * - * @param brightnessFloat The float brightness value to convert. - * @param info Brightness information to use in the conversion. */ - public static int brightnessFloatToInt(float brightnessFloat, BrightnessInfo info) { + public static float brightnessFloatToIntRange(float brightnessFloat) { if (floatEquals(brightnessFloat, PowerManager.BRIGHTNESS_OFF_FLOAT)) { return PowerManager.BRIGHTNESS_OFF; } else if (Float.isNaN(brightnessFloat)) { return PowerManager.BRIGHTNESS_INVALID; } else { - final float minFloat = info != null - ? info.brightnessMinimum : PowerManager.BRIGHTNESS_MIN; - final float maxFloat = info != null - ? info.brightnessMaximum : PowerManager.BRIGHTNESS_MAX; + final float minFloat = PowerManager.BRIGHTNESS_MIN; + final float maxFloat = PowerManager.BRIGHTNESS_MAX; final float minInt = PowerManager.BRIGHTNESS_OFF + 1; final float maxInt = PowerManager.BRIGHTNESS_ON; - return Math.round(MathUtils.constrainedMap(minInt, maxInt, minFloat, maxFloat, - brightnessFloat)); + return MathUtils.constrainedMap(minInt, maxInt, minFloat, maxFloat, brightnessFloat); } } @@ -194,37 +185,35 @@ public class BrightnessSynchronizer { * @param value Brightness value as int to store in the float setting. */ private void updateBrightnessFloatFromInt(int value) { - final BrightnessInfo info = getBrightnessInfo(); - if (brightnessFloatToInt(mPreferredSettingValue, info) == value) { + if (brightnessFloatToInt(mPreferredSettingValue) == value) { return; } - mPreferredSettingValue = brightnessIntToFloat(value, info); + mPreferredSettingValue = brightnessIntToFloat(value); final int newBrightnessAsIntBits = Float.floatToIntBits(mPreferredSettingValue); mHandler.removeMessages(MSG_UPDATE_BOTH); mHandler.obtainMessage(MSG_UPDATE_BOTH, newBrightnessAsIntBits, 0).sendToTarget(); } /** - * Updates the settings from the specified {@link BrightnessInfo}. This is called whenever the - * float brightness changed from DisplayManager. mPreferredSettingValue holds the most recently - * updated brightness value as a float that we would like the display to be set to. + * Updates the settings based on a passed in float value. This is called whenever the float + * setting changes. mPreferredSettingValue holds the most recently updated brightness value + * as a float that we would like the display to be set to. * * We then schedule an update to both the int and float settings, but, remove all the other * messages to update all, to prevent us getting stuck in a loop. * - * @param brightnessInfo Current brightness information + * @param value Brightness setting as float to store in int setting. */ - private void updateBrightnessIntFromFloat(@NonNull BrightnessInfo brightnessInfo) { - final float value = brightnessInfo.brightness; + private void updateBrightnessIntFromFloat(float value) { if (floatEquals(mPreferredSettingValue, value)) { return; } mPreferredSettingValue = value; + final int newBrightnessAsIntBits = Float.floatToIntBits(mPreferredSettingValue); mHandler.removeMessages(MSG_UPDATE_BOTH); - mHandler.obtainMessage(MSG_UPDATE_BOTH, Float.floatToIntBits(value), 0, brightnessInfo) - .sendToTarget(); + mHandler.obtainMessage(MSG_UPDATE_BOTH, newBrightnessAsIntBits, 0).sendToTarget(); } @@ -233,24 +222,16 @@ public class BrightnessSynchronizer { * mDisplayManager.setBrightness automatically checks for changes * Settings.System.putIntForUser needs to be checked, to prevent an extra callback to this class * - * @param brightnessInfo Brightness information, takes precedent over newBrightnessFloat * @param newBrightnessFloat Brightness setting as float to store in both settings */ - private void updateBoth(BrightnessInfo brightnessInfo, float newBrightnessFloat) { - int newBrightnessInt = brightnessFloatToInt(newBrightnessFloat, brightnessInfo); + private void updateBoth(float newBrightnessFloat) { + int newBrightnessInt = brightnessFloatToInt(newBrightnessFloat); mDisplayManager.setBrightness(Display.DEFAULT_DISPLAY, newBrightnessFloat); if (getScreenBrightnessInt(mContext) != newBrightnessInt) { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, newBrightnessInt, UserHandle.USER_CURRENT); } - } - private BrightnessInfo getBrightnessInfo() { - final Display display = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); - if (display != null) { - return display.getBrightnessInfo(); - } - return null; } /** @@ -282,15 +263,10 @@ public class BrightnessSynchronizer { @Override public void onDisplayChanged(int displayId) { - if (displayId != Display.DEFAULT_DISPLAY) { - return; - } - - final BrightnessInfo info = getBrightnessInfo(); - if (info != null) { - mHandler.removeMessages(MSG_UPDATE_INT); - mHandler.obtainMessage(MSG_UPDATE_INT, info).sendToTarget(); - } + float currentFloat = getScreenBrightnessFloat(); + int toSend = Float.floatToIntBits(currentFloat); + mHandler.removeMessages(MSG_UPDATE_INT); + mHandler.obtainMessage(MSG_UPDATE_INT, toSend, 0).sendToTarget(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java index 39d6c4f035854..1ad253e7f867b 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java @@ -354,10 +354,9 @@ public class BrightnessController implements ToggleSlider.Listener { convertGammaToLinearFloat(value, minBacklight, maxBacklight), maxBacklight); if (stopTracking) { - // Log brightness as a value between 0-1000 directly correlated to brightnesses 0-1.0 + // TODO(brightnessfloat): change to use float value instead. MetricsLogger.action(mContext, metric, - Math.round(MathUtils.constrainedMap(0, 1000, PowerManager.BRIGHTNESS_MIN, - PowerManager.BRIGHTNESS_MAX, valFloat))); + BrightnessSynchronizer.brightnessFloatToInt(valFloat)); } setBrightness(valFloat); diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index c1145cd1e76e2..b6d65197d8579 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -2334,7 +2334,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call try { // TODO(brightnessfloat): change BatteryStats to use float mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt( - brightness, null)); + brightness)); } catch (RemoteException e) { // same process } diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index 24d29d320cf69..f953cc8c8a271 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -795,12 +795,11 @@ final class LocalDisplayAdapter extends DisplayAdapter { mBacklightAdapter.setBacklight(sdrBacklight, sdrNits, backlight, nits); Trace.traceCounter(Trace.TRACE_TAG_POWER, "ScreenBrightness", - BrightnessSynchronizer.brightnessFloatToInt( - brightnessState, null)); + BrightnessSynchronizer.brightnessFloatToInt(brightnessState)); Trace.traceCounter(Trace.TRACE_TAG_POWER, "SdrScreenBrightness", BrightnessSynchronizer.brightnessFloatToInt( - sdrBrightnessState, null)); + sdrBrightnessState)); } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java index bebe6ed8dc534..91f14de040fe4 100644 --- a/services/core/java/com/android/server/lights/LightsService.java +++ b/services/core/java/com/android/server/lights/LightsService.java @@ -293,7 +293,7 @@ public class LightsService extends SystemService { + ": brightness=" + brightness); return; } - int brightnessInt = BrightnessSynchronizer.brightnessFloatToInt(brightness, null); + int brightnessInt = BrightnessSynchronizer.brightnessFloatToInt(brightness); int color = brightnessInt & 0x000000ff; color = 0xff000000 | (color << 16) | (color << 8) | color; setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);