Loading services/core/java/com/android/server/display/AutomaticBrightnessController.java +39 −9 Original line number Diff line number Diff line Loading @@ -131,6 +131,8 @@ class AutomaticBrightnessController { // Configuration object for determining thresholds to change brightness dynamically private final HysteresisLevels mAmbientBrightnessThresholds; private final HysteresisLevels mScreenBrightnessThresholds; private final HysteresisLevels mAmbientBrightnessThresholdsIdle; private final HysteresisLevels mScreenBrightnessThresholdsIdle; private boolean mLoggingEnabled; Loading Loading @@ -242,7 +244,9 @@ class AutomaticBrightnessController { float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig, long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig, HysteresisLevels ambientBrightnessThresholds, HysteresisLevels screenBrightnessThresholds, Context context, HysteresisLevels screenBrightnessThresholds, HysteresisLevels ambientBrightnessThresholdsIdle, HysteresisLevels screenBrightnessThresholdsIdle, Context context, HighBrightnessModeController hbmController, BrightnessThrottler brightnessThrottler, BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort, int ambientLightHorizonLong) { Loading @@ -251,7 +255,8 @@ class AutomaticBrightnessController { lightSensorWarmUpTime, brightnessMin, brightnessMax, dozeScaleFactor, lightSensorRate, initialLightSensorRate, brighteningLightDebounceConfig, darkeningLightDebounceConfig, resetAmbientLuxAfterWarmUpConfig, ambientBrightnessThresholds, screenBrightnessThresholds, context, ambientBrightnessThresholds, screenBrightnessThresholds, ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, context, hbmController, brightnessThrottler, idleModeBrightnessMapper, ambientLightHorizonShort, ambientLightHorizonLong ); Loading @@ -265,7 +270,9 @@ class AutomaticBrightnessController { float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig, long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig, HysteresisLevels ambientBrightnessThresholds, HysteresisLevels screenBrightnessThresholds, Context context, HysteresisLevels screenBrightnessThresholds, HysteresisLevels ambientBrightnessThresholdsIdle, HysteresisLevels screenBrightnessThresholdsIdle, Context context, HighBrightnessModeController hbmController, BrightnessThrottler brightnessThrottler, BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort, int ambientLightHorizonLong) { Loading @@ -289,7 +296,9 @@ class AutomaticBrightnessController { mAmbientLightHorizonShort = ambientLightHorizonShort; mWeightingIntercept = ambientLightHorizonLong; mAmbientBrightnessThresholds = ambientBrightnessThresholds; mAmbientBrightnessThresholdsIdle = ambientBrightnessThresholdsIdle; mScreenBrightnessThresholds = screenBrightnessThresholds; mScreenBrightnessThresholdsIdle = screenBrightnessThresholdsIdle; mShortTermModelValid = true; mShortTermModelAnchor = -1; mHandler = new AutomaticBrightnessHandler(looper); Loading Loading @@ -585,6 +594,8 @@ class AutomaticBrightnessController { pw.println(); mAmbientBrightnessThresholds.dump(pw); mScreenBrightnessThresholds.dump(pw); mScreenBrightnessThresholdsIdle.dump(pw); mScreenBrightnessThresholdsIdle.dump(pw); } private String configStateToString(int state) { Loading Loading @@ -679,8 +690,17 @@ class AutomaticBrightnessController { lux = 0; } mAmbientLux = lux; mAmbientBrighteningThreshold = mAmbientBrightnessThresholds.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = mAmbientBrightnessThresholds.getDarkeningThreshold(lux); if (isInIdleMode()) { mAmbientBrighteningThreshold = mAmbientBrightnessThresholdsIdle.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = mAmbientBrightnessThresholdsIdle.getDarkeningThreshold(lux); } else { mAmbientBrighteningThreshold = mAmbientBrightnessThresholds.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = mAmbientBrightnessThresholds.getDarkeningThreshold(lux); } mHbmController.onAmbientLuxChange(mAmbientLux); // If the short term model was invalidated and the change is drastic enough, reset it. Loading Loading @@ -902,10 +922,20 @@ class AutomaticBrightnessController { mPreThresholdBrightness = mScreenAutoBrightness; } mScreenAutoBrightness = newScreenAutoBrightness; if (isInIdleMode()) { mScreenBrighteningThreshold = clampScreenBrightness( mScreenBrightnessThresholds.getBrighteningThreshold(newScreenAutoBrightness)); mScreenBrightnessThresholdsIdle.getBrighteningThreshold( newScreenAutoBrightness)); mScreenDarkeningThreshold = clampScreenBrightness( mScreenBrightnessThresholdsIdle.getDarkeningThreshold( newScreenAutoBrightness)); } else { mScreenBrighteningThreshold = clampScreenBrightness( mScreenBrightnessThresholds.getBrighteningThreshold( newScreenAutoBrightness)); mScreenDarkeningThreshold = clampScreenBrightness( mScreenBrightnessThresholds.getDarkeningThreshold(newScreenAutoBrightness)); } if (sendUpdate) { mCallbacks.updateBrightness(); Loading services/core/java/com/android/server/display/DisplayDeviceConfig.java +143 −14 Original line number Diff line number Diff line Loading @@ -188,8 +188,8 @@ import javax.xml.datatype.DatatypeConfigurationException; * <ambientLightHorizonLong>10001</ambientLightHorizonLong> * <ambientLightHorizonShort>2001</ambientLightHorizonShort> * * <displayBrightnessChangeThresholds> * <brighteningThresholds> * <displayBrightnessChangeThresholds> // Thresholds for screen changes * <brighteningThresholds> // Thresholds for active mode brightness changes. * <minimum>0.001</minimum> // Minimum change needed in screen brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> Loading @@ -197,8 +197,8 @@ import javax.xml.datatype.DatatypeConfigurationException; * </darkeningThresholds> * </displayBrightnessChangeThresholds> * * <ambientBrightnessChangeThresholds> * <brighteningThresholds> * <ambientBrightnessChangeThresholds> // Thresholds for lux changes * <brighteningThresholds> // Thresholds for active mode brightness changes. * <minimum>0.003</minimum> // Minimum change needed in ambient brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> Loading @@ -206,6 +206,24 @@ import javax.xml.datatype.DatatypeConfigurationException; * </darkeningThresholds> * </ambientBrightnessChangeThresholds> * * <displayBrightnessChangeThresholdsIdle> // Thresholds for screen changes in idle mode * <brighteningThresholds> // Thresholds for idle mode brightness changes. * <minimum>0.001</minimum> // Minimum change needed in screen brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> * <minimum>0.002</minimum> // Minimum change needed in screen brightness to darken. * </darkeningThresholds> * </displayBrightnessChangeThresholdsIdle> * * <ambientBrightnessChangeThresholdsIdle> // Thresholds for lux changes in idle mode * <brighteningThresholds> // Thresholds for idle mode brightness changes. * <minimum>0.003</minimum> // Minimum change needed in ambient brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> * <minimum>0.004</minimum> // Minimum change needed in ambient brightness to darken. * </darkeningThresholds> * </ambientBrightnessChangeThresholdsIdle> * * </displayConfiguration> * } * </pre> Loading Loading @@ -319,9 +337,13 @@ public class DisplayDeviceConfig { private int mAmbientHorizonLong = AMBIENT_LIGHT_LONG_HORIZON_MILLIS; private int mAmbientHorizonShort = AMBIENT_LIGHT_SHORT_HORIZON_MILLIS; private float mScreenBrighteningMinThreshold = 0.0f; // Retain behaviour as though there is private float mScreenDarkeningMinThreshold = 0.0f; // no minimum threshold for change in private float mAmbientLuxBrighteningMinThreshold = 0.0f; // screen brightness or ambient private float mAmbientLuxDarkeningMinThreshold = 0.0f; // brightness. private float mScreenBrighteningMinThresholdIdle = 0.0f; // no minimum threshold for change in private float mScreenDarkeningMinThreshold = 0.0f; // screen brightness or ambient private float mScreenDarkeningMinThresholdIdle = 0.0f; // brightness. private float mAmbientLuxBrighteningMinThreshold = 0.0f; private float mAmbientLuxBrighteningMinThresholdIdle = 0.0f; private float mAmbientLuxDarkeningMinThreshold = 0.0f; private float mAmbientLuxDarkeningMinThresholdIdle = 0.0f; private Spline mBrightnessToBacklightSpline; private Spline mBacklightToBrightnessSpline; private Spline mBacklightToNitsSpline; Loading Loading @@ -625,22 +647,76 @@ public class DisplayDeviceConfig { return mAmbientHorizonShort; } /** * The minimum value for the screen brightness increase to actually occur. * @return float value in brightness scale of 0 - 1. */ public float getScreenBrighteningMinThreshold() { return mScreenBrighteningMinThreshold; } /** * The minimum value for the screen brightness decrease to actually occur. * @return float value in brightness scale of 0 - 1. */ public float getScreenDarkeningMinThreshold() { return mScreenDarkeningMinThreshold; } /** * The minimum value for the screen brightness increase to actually occur while in idle screen * brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getScreenBrighteningMinThresholdIdle() { return mScreenBrighteningMinThresholdIdle; } /** * The minimum value for the screen brightness decrease to actually occur while in idle screen * brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getScreenDarkeningMinThresholdIdle() { return mScreenDarkeningMinThresholdIdle; } /** * The minimum value for the ambient lux increase for a screen brightness change to actually * occur. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxBrighteningMinThreshold() { return mAmbientLuxBrighteningMinThreshold; } /** * The minimum value for the ambient lux decrease for a screen brightness change to actually * occur. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxDarkeningMinThreshold() { return mAmbientLuxDarkeningMinThreshold; } /** * The minimum value for the ambient lux increase for a screen brightness change to actually * occur while in idle screen brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxBrighteningMinThresholdIdle() { return mAmbientLuxBrighteningMinThresholdIdle; } /** * The minimum value for the ambient lux decrease for a screen brightness change to actually * occur while in idle screen brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxDarkeningMinThresholdIdle() { return mAmbientLuxDarkeningMinThresholdIdle; } SensorData getAmbientLightSensor() { return mAmbientLightSensor; } Loading Loading @@ -745,9 +821,14 @@ public class DisplayDeviceConfig { + ", mAmbientHorizonLong=" + mAmbientHorizonLong + ", mAmbientHorizonShort=" + mAmbientHorizonShort + ", mScreenDarkeningMinThreshold=" + mScreenDarkeningMinThreshold + ", mScreenDarkeningMinThresholdIdle=" + mScreenDarkeningMinThresholdIdle + ", mScreenBrighteningMinThreshold=" + mScreenBrighteningMinThreshold + ", mScreenBrighteningMinThresholdIdle=" + mScreenBrighteningMinThresholdIdle + ", mAmbientLuxDarkeningMinThreshold=" + mAmbientLuxDarkeningMinThreshold + ", mAmbientLuxDarkeningMinThresholdIdle=" + mAmbientLuxDarkeningMinThresholdIdle + ", mAmbientLuxBrighteningMinThreshold=" + mAmbientLuxBrighteningMinThreshold + ", mAmbientLuxBrighteningMinThresholdIdle=" + mAmbientLuxBrighteningMinThresholdIdle + ", mAmbientLightSensor=" + mAmbientLightSensor + ", mProximitySensor=" + mProximitySensor + ", mRefreshRateLimitations= " + Arrays.toString(mRefreshRateLimitations.toArray()) Loading Loading @@ -1376,24 +1457,34 @@ public class DisplayDeviceConfig { private void loadBrightnessChangeThresholds(DisplayConfiguration config) { Thresholds displayBrightnessThresholds = config.getDisplayBrightnessChangeThresholds(); Thresholds ambientBrightnessThresholds = config.getAmbientBrightnessChangeThresholds(); Thresholds displayBrightnessThresholdsIdle = config.getDisplayBrightnessChangeThresholdsIdle(); Thresholds ambientBrightnessThresholdsIdle = config.getAmbientBrightnessChangeThresholdsIdle(); loadDisplayBrightnessThresholds(displayBrightnessThresholds); loadAmbientBrightnessThresholds(ambientBrightnessThresholds); loadIdleDisplayBrightnessThresholds(displayBrightnessThresholdsIdle); loadIdleAmbientBrightnessThresholds(ambientBrightnessThresholdsIdle); } private void loadDisplayBrightnessThresholds(Thresholds displayBrightnessThresholds) { if (displayBrightnessThresholds != null) { BrightnessThresholds brighteningScreen = displayBrightnessThresholds.getBrighteningThresholds(); BrightnessThresholds darkeningScreen = displayBrightnessThresholds.getDarkeningThresholds(); final BigDecimal screenBrighteningThreshold = brighteningScreen.getMinimum(); final BigDecimal screenDarkeningThreshold = darkeningScreen.getMinimum(); if (screenBrighteningThreshold != null) { mScreenBrighteningMinThreshold = screenBrighteningThreshold.floatValue(); if (brighteningScreen != null && brighteningScreen.getMinimum() != null) { mScreenBrighteningMinThreshold = brighteningScreen.getMinimum().floatValue(); } if (darkeningScreen != null && darkeningScreen.getMinimum() != null) { mScreenDarkeningMinThreshold = darkeningScreen.getMinimum().floatValue(); } if (screenDarkeningThreshold != null) { mScreenDarkeningMinThreshold = screenDarkeningThreshold.floatValue(); } } private void loadAmbientBrightnessThresholds(Thresholds ambientBrightnessThresholds) { if (ambientBrightnessThresholds != null) { BrightnessThresholds brighteningAmbientLux = ambientBrightnessThresholds.getBrighteningThresholds(); Loading @@ -1412,6 +1503,44 @@ public class DisplayDeviceConfig { } } private void loadIdleDisplayBrightnessThresholds(Thresholds idleDisplayBrightnessThresholds) { if (idleDisplayBrightnessThresholds != null) { BrightnessThresholds brighteningScreenIdle = idleDisplayBrightnessThresholds.getBrighteningThresholds(); BrightnessThresholds darkeningScreenIdle = idleDisplayBrightnessThresholds.getDarkeningThresholds(); if (brighteningScreenIdle != null && brighteningScreenIdle.getMinimum() != null) { mScreenBrighteningMinThresholdIdle = brighteningScreenIdle.getMinimum().floatValue(); } if (darkeningScreenIdle != null && darkeningScreenIdle.getMinimum() != null) { mScreenDarkeningMinThresholdIdle = darkeningScreenIdle.getMinimum().floatValue(); } } } private void loadIdleAmbientBrightnessThresholds(Thresholds idleAmbientBrightnessThresholds) { if (idleAmbientBrightnessThresholds != null) { BrightnessThresholds brighteningAmbientLuxIdle = idleAmbientBrightnessThresholds.getBrighteningThresholds(); BrightnessThresholds darkeningAmbientLuxIdle = idleAmbientBrightnessThresholds.getDarkeningThresholds(); if (brighteningAmbientLuxIdle != null && brighteningAmbientLuxIdle.getMinimum() != null) { mAmbientLuxBrighteningMinThresholdIdle = brighteningAmbientLuxIdle.getMinimum().floatValue(); } if (darkeningAmbientLuxIdle != null && darkeningAmbientLuxIdle.getMinimum() != null) { mAmbientLuxDarkeningMinThresholdIdle = darkeningAmbientLuxIdle.getMinimum().floatValue(); } } } private boolean thermalStatusIsValid(ThermalStatus value) { if (value == null) { return false; Loading services/core/java/com/android/server/display/DisplayPowerController.java +21 −1 Original line number Diff line number Diff line Loading @@ -985,6 +985,25 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call screenBrighteningThresholds, screenDarkeningThresholds, screenThresholdLevels, screenDarkeningMinThreshold, screenBrighteningMinThreshold); // Idle screen thresholds float screenDarkeningMinThresholdIdle = mDisplayDeviceConfig.getScreenDarkeningMinThresholdIdle(); float screenBrighteningMinThresholdIdle = mDisplayDeviceConfig.getScreenBrighteningMinThresholdIdle(); HysteresisLevels screenBrightnessThresholdsIdle = new HysteresisLevels( screenBrighteningThresholds, screenDarkeningThresholds, screenThresholdLevels, screenDarkeningMinThresholdIdle, screenBrighteningMinThresholdIdle); // Idle ambient thresholds float ambientDarkeningMinThresholdIdle = mDisplayDeviceConfig.getAmbientLuxDarkeningMinThresholdIdle(); float ambientBrighteningMinThresholdIdle = mDisplayDeviceConfig.getAmbientLuxBrighteningMinThresholdIdle(); HysteresisLevels ambientBrightnessThresholdsIdle = new HysteresisLevels( ambientBrighteningThresholds, ambientDarkeningThresholds, ambientThresholdLevels, ambientDarkeningMinThresholdIdle, ambientBrighteningMinThresholdIdle); long brighteningLightDebounce = mDisplayDeviceConfig .getAutoBrightnessBrighteningLightDebounce(); long darkeningLightDebounce = mDisplayDeviceConfig Loading Loading @@ -1020,7 +1039,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, dozeScaleFactor, lightSensorRate, initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce, autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds, screenBrightnessThresholds, mContext, ambientBrightnessThresholds, screenBrightnessThresholds, ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, mContext, mHbmController, mBrightnessThrottler, mIdleModeBrightnessMapper, mDisplayDeviceConfig.getAmbientHorizonShort(), mDisplayDeviceConfig.getAmbientHorizonLong()); Loading services/core/java/com/android/server/display/HysteresisLevels.java +0 −3 Original line number Diff line number Diff line Loading @@ -18,15 +18,12 @@ package com.android.server.display; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.util.Arrays; /** * A helper class for handling access to illuminance hysteresis level values. */ @VisibleForTesting public class HysteresisLevels { private static final String TAG = "HysteresisLevels"; Loading services/core/xsd/display-device-config/display-device-config.xsd +12 −2 Original line number Diff line number Diff line Loading @@ -97,6 +97,16 @@ <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> <!-- Set of thresholds that dictate the change needed for screen brightness adaptations while in idle mode --> <xs:element type="thresholds" name="displayBrightnessChangeThresholdsIdle" minOccurs="0" maxOccurs="1"> <xs:annotation name="final"/> </xs:element> <!-- Set of thresholds that dictate the change needed for ambient brightness adaptations while in idle mode --> <xs:element type="thresholds" name="ambientBrightnessChangeThresholdsIdle" minOccurs="0" maxOccurs="1"> <xs:annotation name="final"/> </xs:element> </xs:sequence> </xs:complexType> </xs:element> Loading Loading @@ -319,13 +329,13 @@ <!-- Thresholds for brightness changes. --> <xs:complexType name="thresholds"> <xs:sequence> <!-- Brightening thresholds. --> <!-- Brightening thresholds for active screen brightness mode. --> <xs:element name="brighteningThresholds" type="brightnessThresholds" minOccurs="0" maxOccurs="1" > <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> <!-- Darkening thresholds. --> <!-- Darkening thresholds for active screen brightness mode. --> <xs:element name="darkeningThresholds" type="brightnessThresholds" minOccurs="0" maxOccurs="1" > <xs:annotation name="nonnull"/> Loading Loading
services/core/java/com/android/server/display/AutomaticBrightnessController.java +39 −9 Original line number Diff line number Diff line Loading @@ -131,6 +131,8 @@ class AutomaticBrightnessController { // Configuration object for determining thresholds to change brightness dynamically private final HysteresisLevels mAmbientBrightnessThresholds; private final HysteresisLevels mScreenBrightnessThresholds; private final HysteresisLevels mAmbientBrightnessThresholdsIdle; private final HysteresisLevels mScreenBrightnessThresholdsIdle; private boolean mLoggingEnabled; Loading Loading @@ -242,7 +244,9 @@ class AutomaticBrightnessController { float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig, long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig, HysteresisLevels ambientBrightnessThresholds, HysteresisLevels screenBrightnessThresholds, Context context, HysteresisLevels screenBrightnessThresholds, HysteresisLevels ambientBrightnessThresholdsIdle, HysteresisLevels screenBrightnessThresholdsIdle, Context context, HighBrightnessModeController hbmController, BrightnessThrottler brightnessThrottler, BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort, int ambientLightHorizonLong) { Loading @@ -251,7 +255,8 @@ class AutomaticBrightnessController { lightSensorWarmUpTime, brightnessMin, brightnessMax, dozeScaleFactor, lightSensorRate, initialLightSensorRate, brighteningLightDebounceConfig, darkeningLightDebounceConfig, resetAmbientLuxAfterWarmUpConfig, ambientBrightnessThresholds, screenBrightnessThresholds, context, ambientBrightnessThresholds, screenBrightnessThresholds, ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, context, hbmController, brightnessThrottler, idleModeBrightnessMapper, ambientLightHorizonShort, ambientLightHorizonLong ); Loading @@ -265,7 +270,9 @@ class AutomaticBrightnessController { float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig, long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig, HysteresisLevels ambientBrightnessThresholds, HysteresisLevels screenBrightnessThresholds, Context context, HysteresisLevels screenBrightnessThresholds, HysteresisLevels ambientBrightnessThresholdsIdle, HysteresisLevels screenBrightnessThresholdsIdle, Context context, HighBrightnessModeController hbmController, BrightnessThrottler brightnessThrottler, BrightnessMappingStrategy idleModeBrightnessMapper, int ambientLightHorizonShort, int ambientLightHorizonLong) { Loading @@ -289,7 +296,9 @@ class AutomaticBrightnessController { mAmbientLightHorizonShort = ambientLightHorizonShort; mWeightingIntercept = ambientLightHorizonLong; mAmbientBrightnessThresholds = ambientBrightnessThresholds; mAmbientBrightnessThresholdsIdle = ambientBrightnessThresholdsIdle; mScreenBrightnessThresholds = screenBrightnessThresholds; mScreenBrightnessThresholdsIdle = screenBrightnessThresholdsIdle; mShortTermModelValid = true; mShortTermModelAnchor = -1; mHandler = new AutomaticBrightnessHandler(looper); Loading Loading @@ -585,6 +594,8 @@ class AutomaticBrightnessController { pw.println(); mAmbientBrightnessThresholds.dump(pw); mScreenBrightnessThresholds.dump(pw); mScreenBrightnessThresholdsIdle.dump(pw); mScreenBrightnessThresholdsIdle.dump(pw); } private String configStateToString(int state) { Loading Loading @@ -679,8 +690,17 @@ class AutomaticBrightnessController { lux = 0; } mAmbientLux = lux; mAmbientBrighteningThreshold = mAmbientBrightnessThresholds.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = mAmbientBrightnessThresholds.getDarkeningThreshold(lux); if (isInIdleMode()) { mAmbientBrighteningThreshold = mAmbientBrightnessThresholdsIdle.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = mAmbientBrightnessThresholdsIdle.getDarkeningThreshold(lux); } else { mAmbientBrighteningThreshold = mAmbientBrightnessThresholds.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = mAmbientBrightnessThresholds.getDarkeningThreshold(lux); } mHbmController.onAmbientLuxChange(mAmbientLux); // If the short term model was invalidated and the change is drastic enough, reset it. Loading Loading @@ -902,10 +922,20 @@ class AutomaticBrightnessController { mPreThresholdBrightness = mScreenAutoBrightness; } mScreenAutoBrightness = newScreenAutoBrightness; if (isInIdleMode()) { mScreenBrighteningThreshold = clampScreenBrightness( mScreenBrightnessThresholds.getBrighteningThreshold(newScreenAutoBrightness)); mScreenBrightnessThresholdsIdle.getBrighteningThreshold( newScreenAutoBrightness)); mScreenDarkeningThreshold = clampScreenBrightness( mScreenBrightnessThresholdsIdle.getDarkeningThreshold( newScreenAutoBrightness)); } else { mScreenBrighteningThreshold = clampScreenBrightness( mScreenBrightnessThresholds.getBrighteningThreshold( newScreenAutoBrightness)); mScreenDarkeningThreshold = clampScreenBrightness( mScreenBrightnessThresholds.getDarkeningThreshold(newScreenAutoBrightness)); } if (sendUpdate) { mCallbacks.updateBrightness(); Loading
services/core/java/com/android/server/display/DisplayDeviceConfig.java +143 −14 Original line number Diff line number Diff line Loading @@ -188,8 +188,8 @@ import javax.xml.datatype.DatatypeConfigurationException; * <ambientLightHorizonLong>10001</ambientLightHorizonLong> * <ambientLightHorizonShort>2001</ambientLightHorizonShort> * * <displayBrightnessChangeThresholds> * <brighteningThresholds> * <displayBrightnessChangeThresholds> // Thresholds for screen changes * <brighteningThresholds> // Thresholds for active mode brightness changes. * <minimum>0.001</minimum> // Minimum change needed in screen brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> Loading @@ -197,8 +197,8 @@ import javax.xml.datatype.DatatypeConfigurationException; * </darkeningThresholds> * </displayBrightnessChangeThresholds> * * <ambientBrightnessChangeThresholds> * <brighteningThresholds> * <ambientBrightnessChangeThresholds> // Thresholds for lux changes * <brighteningThresholds> // Thresholds for active mode brightness changes. * <minimum>0.003</minimum> // Minimum change needed in ambient brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> Loading @@ -206,6 +206,24 @@ import javax.xml.datatype.DatatypeConfigurationException; * </darkeningThresholds> * </ambientBrightnessChangeThresholds> * * <displayBrightnessChangeThresholdsIdle> // Thresholds for screen changes in idle mode * <brighteningThresholds> // Thresholds for idle mode brightness changes. * <minimum>0.001</minimum> // Minimum change needed in screen brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> * <minimum>0.002</minimum> // Minimum change needed in screen brightness to darken. * </darkeningThresholds> * </displayBrightnessChangeThresholdsIdle> * * <ambientBrightnessChangeThresholdsIdle> // Thresholds for lux changes in idle mode * <brighteningThresholds> // Thresholds for idle mode brightness changes. * <minimum>0.003</minimum> // Minimum change needed in ambient brightness to brighten. * </brighteningThresholds> * <darkeningThresholds> * <minimum>0.004</minimum> // Minimum change needed in ambient brightness to darken. * </darkeningThresholds> * </ambientBrightnessChangeThresholdsIdle> * * </displayConfiguration> * } * </pre> Loading Loading @@ -319,9 +337,13 @@ public class DisplayDeviceConfig { private int mAmbientHorizonLong = AMBIENT_LIGHT_LONG_HORIZON_MILLIS; private int mAmbientHorizonShort = AMBIENT_LIGHT_SHORT_HORIZON_MILLIS; private float mScreenBrighteningMinThreshold = 0.0f; // Retain behaviour as though there is private float mScreenDarkeningMinThreshold = 0.0f; // no minimum threshold for change in private float mAmbientLuxBrighteningMinThreshold = 0.0f; // screen brightness or ambient private float mAmbientLuxDarkeningMinThreshold = 0.0f; // brightness. private float mScreenBrighteningMinThresholdIdle = 0.0f; // no minimum threshold for change in private float mScreenDarkeningMinThreshold = 0.0f; // screen brightness or ambient private float mScreenDarkeningMinThresholdIdle = 0.0f; // brightness. private float mAmbientLuxBrighteningMinThreshold = 0.0f; private float mAmbientLuxBrighteningMinThresholdIdle = 0.0f; private float mAmbientLuxDarkeningMinThreshold = 0.0f; private float mAmbientLuxDarkeningMinThresholdIdle = 0.0f; private Spline mBrightnessToBacklightSpline; private Spline mBacklightToBrightnessSpline; private Spline mBacklightToNitsSpline; Loading Loading @@ -625,22 +647,76 @@ public class DisplayDeviceConfig { return mAmbientHorizonShort; } /** * The minimum value for the screen brightness increase to actually occur. * @return float value in brightness scale of 0 - 1. */ public float getScreenBrighteningMinThreshold() { return mScreenBrighteningMinThreshold; } /** * The minimum value for the screen brightness decrease to actually occur. * @return float value in brightness scale of 0 - 1. */ public float getScreenDarkeningMinThreshold() { return mScreenDarkeningMinThreshold; } /** * The minimum value for the screen brightness increase to actually occur while in idle screen * brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getScreenBrighteningMinThresholdIdle() { return mScreenBrighteningMinThresholdIdle; } /** * The minimum value for the screen brightness decrease to actually occur while in idle screen * brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getScreenDarkeningMinThresholdIdle() { return mScreenDarkeningMinThresholdIdle; } /** * The minimum value for the ambient lux increase for a screen brightness change to actually * occur. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxBrighteningMinThreshold() { return mAmbientLuxBrighteningMinThreshold; } /** * The minimum value for the ambient lux decrease for a screen brightness change to actually * occur. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxDarkeningMinThreshold() { return mAmbientLuxDarkeningMinThreshold; } /** * The minimum value for the ambient lux increase for a screen brightness change to actually * occur while in idle screen brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxBrighteningMinThresholdIdle() { return mAmbientLuxBrighteningMinThresholdIdle; } /** * The minimum value for the ambient lux decrease for a screen brightness change to actually * occur while in idle screen brightness mode. * @return float value in brightness scale of 0 - 1. */ public float getAmbientLuxDarkeningMinThresholdIdle() { return mAmbientLuxDarkeningMinThresholdIdle; } SensorData getAmbientLightSensor() { return mAmbientLightSensor; } Loading Loading @@ -745,9 +821,14 @@ public class DisplayDeviceConfig { + ", mAmbientHorizonLong=" + mAmbientHorizonLong + ", mAmbientHorizonShort=" + mAmbientHorizonShort + ", mScreenDarkeningMinThreshold=" + mScreenDarkeningMinThreshold + ", mScreenDarkeningMinThresholdIdle=" + mScreenDarkeningMinThresholdIdle + ", mScreenBrighteningMinThreshold=" + mScreenBrighteningMinThreshold + ", mScreenBrighteningMinThresholdIdle=" + mScreenBrighteningMinThresholdIdle + ", mAmbientLuxDarkeningMinThreshold=" + mAmbientLuxDarkeningMinThreshold + ", mAmbientLuxDarkeningMinThresholdIdle=" + mAmbientLuxDarkeningMinThresholdIdle + ", mAmbientLuxBrighteningMinThreshold=" + mAmbientLuxBrighteningMinThreshold + ", mAmbientLuxBrighteningMinThresholdIdle=" + mAmbientLuxBrighteningMinThresholdIdle + ", mAmbientLightSensor=" + mAmbientLightSensor + ", mProximitySensor=" + mProximitySensor + ", mRefreshRateLimitations= " + Arrays.toString(mRefreshRateLimitations.toArray()) Loading Loading @@ -1376,24 +1457,34 @@ public class DisplayDeviceConfig { private void loadBrightnessChangeThresholds(DisplayConfiguration config) { Thresholds displayBrightnessThresholds = config.getDisplayBrightnessChangeThresholds(); Thresholds ambientBrightnessThresholds = config.getAmbientBrightnessChangeThresholds(); Thresholds displayBrightnessThresholdsIdle = config.getDisplayBrightnessChangeThresholdsIdle(); Thresholds ambientBrightnessThresholdsIdle = config.getAmbientBrightnessChangeThresholdsIdle(); loadDisplayBrightnessThresholds(displayBrightnessThresholds); loadAmbientBrightnessThresholds(ambientBrightnessThresholds); loadIdleDisplayBrightnessThresholds(displayBrightnessThresholdsIdle); loadIdleAmbientBrightnessThresholds(ambientBrightnessThresholdsIdle); } private void loadDisplayBrightnessThresholds(Thresholds displayBrightnessThresholds) { if (displayBrightnessThresholds != null) { BrightnessThresholds brighteningScreen = displayBrightnessThresholds.getBrighteningThresholds(); BrightnessThresholds darkeningScreen = displayBrightnessThresholds.getDarkeningThresholds(); final BigDecimal screenBrighteningThreshold = brighteningScreen.getMinimum(); final BigDecimal screenDarkeningThreshold = darkeningScreen.getMinimum(); if (screenBrighteningThreshold != null) { mScreenBrighteningMinThreshold = screenBrighteningThreshold.floatValue(); if (brighteningScreen != null && brighteningScreen.getMinimum() != null) { mScreenBrighteningMinThreshold = brighteningScreen.getMinimum().floatValue(); } if (darkeningScreen != null && darkeningScreen.getMinimum() != null) { mScreenDarkeningMinThreshold = darkeningScreen.getMinimum().floatValue(); } if (screenDarkeningThreshold != null) { mScreenDarkeningMinThreshold = screenDarkeningThreshold.floatValue(); } } private void loadAmbientBrightnessThresholds(Thresholds ambientBrightnessThresholds) { if (ambientBrightnessThresholds != null) { BrightnessThresholds brighteningAmbientLux = ambientBrightnessThresholds.getBrighteningThresholds(); Loading @@ -1412,6 +1503,44 @@ public class DisplayDeviceConfig { } } private void loadIdleDisplayBrightnessThresholds(Thresholds idleDisplayBrightnessThresholds) { if (idleDisplayBrightnessThresholds != null) { BrightnessThresholds brighteningScreenIdle = idleDisplayBrightnessThresholds.getBrighteningThresholds(); BrightnessThresholds darkeningScreenIdle = idleDisplayBrightnessThresholds.getDarkeningThresholds(); if (brighteningScreenIdle != null && brighteningScreenIdle.getMinimum() != null) { mScreenBrighteningMinThresholdIdle = brighteningScreenIdle.getMinimum().floatValue(); } if (darkeningScreenIdle != null && darkeningScreenIdle.getMinimum() != null) { mScreenDarkeningMinThresholdIdle = darkeningScreenIdle.getMinimum().floatValue(); } } } private void loadIdleAmbientBrightnessThresholds(Thresholds idleAmbientBrightnessThresholds) { if (idleAmbientBrightnessThresholds != null) { BrightnessThresholds brighteningAmbientLuxIdle = idleAmbientBrightnessThresholds.getBrighteningThresholds(); BrightnessThresholds darkeningAmbientLuxIdle = idleAmbientBrightnessThresholds.getDarkeningThresholds(); if (brighteningAmbientLuxIdle != null && brighteningAmbientLuxIdle.getMinimum() != null) { mAmbientLuxBrighteningMinThresholdIdle = brighteningAmbientLuxIdle.getMinimum().floatValue(); } if (darkeningAmbientLuxIdle != null && darkeningAmbientLuxIdle.getMinimum() != null) { mAmbientLuxDarkeningMinThresholdIdle = darkeningAmbientLuxIdle.getMinimum().floatValue(); } } } private boolean thermalStatusIsValid(ThermalStatus value) { if (value == null) { return false; Loading
services/core/java/com/android/server/display/DisplayPowerController.java +21 −1 Original line number Diff line number Diff line Loading @@ -985,6 +985,25 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call screenBrighteningThresholds, screenDarkeningThresholds, screenThresholdLevels, screenDarkeningMinThreshold, screenBrighteningMinThreshold); // Idle screen thresholds float screenDarkeningMinThresholdIdle = mDisplayDeviceConfig.getScreenDarkeningMinThresholdIdle(); float screenBrighteningMinThresholdIdle = mDisplayDeviceConfig.getScreenBrighteningMinThresholdIdle(); HysteresisLevels screenBrightnessThresholdsIdle = new HysteresisLevels( screenBrighteningThresholds, screenDarkeningThresholds, screenThresholdLevels, screenDarkeningMinThresholdIdle, screenBrighteningMinThresholdIdle); // Idle ambient thresholds float ambientDarkeningMinThresholdIdle = mDisplayDeviceConfig.getAmbientLuxDarkeningMinThresholdIdle(); float ambientBrighteningMinThresholdIdle = mDisplayDeviceConfig.getAmbientLuxBrighteningMinThresholdIdle(); HysteresisLevels ambientBrightnessThresholdsIdle = new HysteresisLevels( ambientBrighteningThresholds, ambientDarkeningThresholds, ambientThresholdLevels, ambientDarkeningMinThresholdIdle, ambientBrighteningMinThresholdIdle); long brighteningLightDebounce = mDisplayDeviceConfig .getAutoBrightnessBrighteningLightDebounce(); long darkeningLightDebounce = mDisplayDeviceConfig Loading Loading @@ -1020,7 +1039,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, dozeScaleFactor, lightSensorRate, initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce, autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds, screenBrightnessThresholds, mContext, ambientBrightnessThresholds, screenBrightnessThresholds, ambientBrightnessThresholdsIdle, screenBrightnessThresholdsIdle, mContext, mHbmController, mBrightnessThrottler, mIdleModeBrightnessMapper, mDisplayDeviceConfig.getAmbientHorizonShort(), mDisplayDeviceConfig.getAmbientHorizonLong()); Loading
services/core/java/com/android/server/display/HysteresisLevels.java +0 −3 Original line number Diff line number Diff line Loading @@ -18,15 +18,12 @@ package com.android.server.display; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.util.Arrays; /** * A helper class for handling access to illuminance hysteresis level values. */ @VisibleForTesting public class HysteresisLevels { private static final String TAG = "HysteresisLevels"; Loading
services/core/xsd/display-device-config/display-device-config.xsd +12 −2 Original line number Diff line number Diff line Loading @@ -97,6 +97,16 @@ <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> <!-- Set of thresholds that dictate the change needed for screen brightness adaptations while in idle mode --> <xs:element type="thresholds" name="displayBrightnessChangeThresholdsIdle" minOccurs="0" maxOccurs="1"> <xs:annotation name="final"/> </xs:element> <!-- Set of thresholds that dictate the change needed for ambient brightness adaptations while in idle mode --> <xs:element type="thresholds" name="ambientBrightnessChangeThresholdsIdle" minOccurs="0" maxOccurs="1"> <xs:annotation name="final"/> </xs:element> </xs:sequence> </xs:complexType> </xs:element> Loading Loading @@ -319,13 +329,13 @@ <!-- Thresholds for brightness changes. --> <xs:complexType name="thresholds"> <xs:sequence> <!-- Brightening thresholds. --> <!-- Brightening thresholds for active screen brightness mode. --> <xs:element name="brighteningThresholds" type="brightnessThresholds" minOccurs="0" maxOccurs="1" > <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> <!-- Darkening thresholds. --> <!-- Darkening thresholds for active screen brightness mode. --> <xs:element name="darkeningThresholds" type="brightnessThresholds" minOccurs="0" maxOccurs="1" > <xs:annotation name="nonnull"/> Loading