Merge "Notify display brightness changed due to brightness transforms" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2022-01-06 20:21:51 +00:00
committed by Android (Google) Code Review

View File

@@ -50,6 +50,8 @@ import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.util.MathUtils; import android.util.MathUtils;
import android.util.MutableFloat;
import android.util.MutableInt;
import android.util.Slog; import android.util.Slog;
import android.util.TimeUtils; import android.util.TimeUtils;
import android.view.Display; import android.view.Display;
@@ -1323,6 +1325,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// Animate the screen brightness when the screen is on or dozing. // Animate the screen brightness when the screen is on or dozing.
// Skip the animation when the screen is off or suspended or transition to/from VR. // Skip the animation when the screen is off or suspended or transition to/from VR.
boolean brightnessAdjusted = false;
if (!mPendingScreenOff) { if (!mPendingScreenOff) {
if (mSkipScreenOnBrightnessRamp) { if (mSkipScreenOnBrightnessRamp) {
if (state == Display.STATE_ON) { if (state == Display.STATE_ON) {
@@ -1410,15 +1413,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// slider event so notify as if the system changed the brightness. // slider event so notify as if the system changed the brightness.
userInitiatedChange = false; userInitiatedChange = false;
} }
notifyBrightnessChanged(brightnessState, userInitiatedChange, notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange,
hadUserBrightnessPoint); hadUserBrightnessPoint);
} }
// We save the brightness info *after* the brightness setting has been changed and // We save the brightness info *after* the brightness setting has been changed and
// adjustments made so that the brightness info reflects the latest value. // adjustments made so that the brightness info reflects the latest value.
saveBrightnessInfo(getScreenBrightnessSetting(), animateValue); brightnessAdjusted = saveBrightnessInfo(getScreenBrightnessSetting(), animateValue);
} else { } else {
saveBrightnessInfo(getScreenBrightnessSetting()); brightnessAdjusted = saveBrightnessInfo(getScreenBrightnessSetting());
}
if (brightnessAdjusted) {
postBrightnessChangeRunnable();
} }
// Log any changes to what is currently driving the brightness setting. // Log any changes to what is currently driving the brightness setting.
@@ -1534,31 +1541,50 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
public BrightnessInfo getBrightnessInfo() { public BrightnessInfo getBrightnessInfo() {
synchronized (mCachedBrightnessInfo) { synchronized (mCachedBrightnessInfo) {
return new BrightnessInfo( return new BrightnessInfo(
mCachedBrightnessInfo.brightness, mCachedBrightnessInfo.brightness.value,
mCachedBrightnessInfo.adjustedBrightness, mCachedBrightnessInfo.adjustedBrightness.value,
mCachedBrightnessInfo.brightnessMin, mCachedBrightnessInfo.brightnessMin.value,
mCachedBrightnessInfo.brightnessMax, mCachedBrightnessInfo.brightnessMax.value,
mCachedBrightnessInfo.hbmMode, mCachedBrightnessInfo.hbmMode.value,
mCachedBrightnessInfo.highBrightnessTransitionPoint); mCachedBrightnessInfo.hbmTransitionPoint.value);
} }
} }
private void saveBrightnessInfo(float brightness) { private boolean saveBrightnessInfo(float brightness) {
saveBrightnessInfo(brightness, brightness); return saveBrightnessInfo(brightness, brightness);
} }
private void saveBrightnessInfo(float brightness, float adjustedBrightness) { private boolean saveBrightnessInfo(float brightness, float adjustedBrightness) {
synchronized (mCachedBrightnessInfo) { synchronized (mCachedBrightnessInfo) {
mCachedBrightnessInfo.brightness = brightness; boolean changed = false;
mCachedBrightnessInfo.adjustedBrightness = adjustedBrightness;
mCachedBrightnessInfo.brightnessMin = mHbmController.getCurrentBrightnessMin(); changed |=
mCachedBrightnessInfo.brightnessMax = mHbmController.getCurrentBrightnessMax(); mCachedBrightnessInfo.checkAndSetFloat(mCachedBrightnessInfo.brightness,
mCachedBrightnessInfo.hbmMode = mHbmController.getHighBrightnessMode(); brightness);
mCachedBrightnessInfo.highBrightnessTransitionPoint = changed |=
mHbmController.getTransitionPoint(); mCachedBrightnessInfo.checkAndSetFloat(mCachedBrightnessInfo.adjustedBrightness,
adjustedBrightness);
changed |=
mCachedBrightnessInfo.checkAndSetFloat(mCachedBrightnessInfo.brightnessMin,
mHbmController.getCurrentBrightnessMin());
changed |=
mCachedBrightnessInfo.checkAndSetFloat(mCachedBrightnessInfo.brightnessMax,
mHbmController.getCurrentBrightnessMax());
changed |=
mCachedBrightnessInfo.checkAndSetInt(mCachedBrightnessInfo.hbmMode,
mHbmController.getHighBrightnessMode());
changed |=
mCachedBrightnessInfo.checkAndSetFloat(mCachedBrightnessInfo.hbmTransitionPoint,
mHbmController.getTransitionPoint());
return changed;
} }
} }
void postBrightnessChangeRunnable() {
mHandler.post(mOnBrightnessChangeRunnable);
}
private HighBrightnessModeController createHbmControllerLocked() { private HighBrightnessModeController createHbmControllerLocked() {
final DisplayDevice device = mLogicalDisplay.getPrimaryDisplayDeviceLocked(); final DisplayDevice device = mLogicalDisplay.getPrimaryDisplayDeviceLocked();
final DisplayDeviceConfig ddConfig = device.getDisplayDeviceConfig(); final DisplayDeviceConfig ddConfig = device.getDisplayDeviceConfig();
@@ -1571,7 +1597,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, hbmData, PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, hbmData,
() -> { () -> {
sendUpdatePowerStateLocked(); sendUpdatePowerStateLocked();
mHandler.post(mOnBrightnessChangeRunnable); postBrightnessChangeRunnable();
// TODO(b/192258832): Switch the HBMChangeCallback to a listener pattern. // TODO(b/192258832): Switch the HBMChangeCallback to a listener pattern.
if (mAutomaticBrightnessController != null) { if (mAutomaticBrightnessController != null) {
mAutomaticBrightnessController.update(); mAutomaticBrightnessController.update();
@@ -2073,7 +2099,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private void setCurrentScreenBrightness(float brightnessValue) { private void setCurrentScreenBrightness(float brightnessValue) {
if (brightnessValue != mCurrentScreenBrightnessSetting) { if (brightnessValue != mCurrentScreenBrightnessSetting) {
mCurrentScreenBrightnessSetting = brightnessValue; mCurrentScreenBrightnessSetting = brightnessValue;
mHandler.post(mOnBrightnessChangeRunnable); postBrightnessChangeRunnable();
} }
} }
@@ -2125,7 +2151,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
return true; return true;
} }
private void notifyBrightnessChanged(float brightness, boolean userInitiated, private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated,
boolean hadUserDataPoint) { boolean hadUserDataPoint) {
final float brightnessInNits = convertToNits(brightness); final float brightnessInNits = convertToNits(brightness);
if (mPowerRequest.useAutoBrightness && brightnessInNits >= 0.0f if (mPowerRequest.useAutoBrightness && brightnessInNits >= 0.0f
@@ -2236,16 +2262,17 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
pw.println(" mColorFadeFadesConfig=" + mColorFadeFadesConfig); pw.println(" mColorFadeFadesConfig=" + mColorFadeFadesConfig);
pw.println(" mColorFadeEnabled=" + mColorFadeEnabled); pw.println(" mColorFadeEnabled=" + mColorFadeEnabled);
synchronized (mCachedBrightnessInfo) { synchronized (mCachedBrightnessInfo) {
pw.println(" mCachedBrightnessInfo.brightness=" + mCachedBrightnessInfo.brightness); pw.println(" mCachedBrightnessInfo.brightness=" +
mCachedBrightnessInfo.brightness.value);
pw.println(" mCachedBrightnessInfo.adjustedBrightness=" + pw.println(" mCachedBrightnessInfo.adjustedBrightness=" +
mCachedBrightnessInfo.adjustedBrightness); mCachedBrightnessInfo.adjustedBrightness.value);
pw.println(" mCachedBrightnessInfo.brightnessMin=" + pw.println(" mCachedBrightnessInfo.brightnessMin=" +
mCachedBrightnessInfo.brightnessMin); mCachedBrightnessInfo.brightnessMin.value);
pw.println(" mCachedBrightnessInfo.brightnessMax=" + pw.println(" mCachedBrightnessInfo.brightnessMax=" +
mCachedBrightnessInfo.brightnessMax); mCachedBrightnessInfo.brightnessMax.value);
pw.println(" mCachedBrightnessInfo.hbmMode=" + mCachedBrightnessInfo.hbmMode); pw.println(" mCachedBrightnessInfo.hbmMode=" + mCachedBrightnessInfo.hbmMode.value);
pw.println(" mCachedBrightnessInfo.highBrightnessTransitionPoint=" + pw.println(" mCachedBrightnessInfo.hbmTransitionPoint=" +
mCachedBrightnessInfo.highBrightnessTransitionPoint); mCachedBrightnessInfo.hbmTransitionPoint.value);
} }
pw.println(" mDisplayBlanksAfterDozeConfig=" + mDisplayBlanksAfterDozeConfig); pw.println(" mDisplayBlanksAfterDozeConfig=" + mDisplayBlanksAfterDozeConfig);
pw.println(" mBrightnessBucketsInDozeConfig=" + mBrightnessBucketsInDozeConfig); pw.println(" mBrightnessBucketsInDozeConfig=" + mBrightnessBucketsInDozeConfig);
@@ -2663,11 +2690,31 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
} }
static class CachedBrightnessInfo { static class CachedBrightnessInfo {
public float brightness; public MutableFloat brightness = new MutableFloat(PowerManager.BRIGHTNESS_INVALID_FLOAT);
public float adjustedBrightness; public MutableFloat adjustedBrightness =
public float brightnessMin; new MutableFloat(PowerManager.BRIGHTNESS_INVALID_FLOAT);
public float brightnessMax; public MutableFloat brightnessMin =
public int hbmMode; new MutableFloat(PowerManager.BRIGHTNESS_INVALID_FLOAT);
public float highBrightnessTransitionPoint; public MutableFloat brightnessMax =
new MutableFloat(PowerManager.BRIGHTNESS_INVALID_FLOAT);
public MutableInt hbmMode = new MutableInt(BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF);
public MutableFloat hbmTransitionPoint =
new MutableFloat(HighBrightnessModeController.HBM_TRANSITION_POINT_INVALID);
public boolean checkAndSetFloat(MutableFloat mf, float f) {
if (mf.value != f) {
mf.value = f;
return true;
}
return false;
}
public boolean checkAndSetInt(MutableInt mi, int i) {
if (mi.value != i) {
mi.value = i;
return true;
}
return false;
}
} }
} }