diff options
| author | 2022-05-25 01:11:38 +0000 | |
|---|---|---|
| committer | 2022-05-25 01:11:38 +0000 | |
| commit | 7cda9b01e3e52f03d894edbb7deb876c27fc78f7 (patch) | |
| tree | 1ae9a6ef9bbcf7bf5c7d8860417080733ad61e0a | |
| parent | edca30dce8c8b35713a153e94371cdba202619d9 (diff) | |
| parent | 2ef28af7b4db406f6d86165db1a26d955b7b98f7 (diff) | |
Merge "Apply a maximum time to Screen brightness RampAnimator." into tm-dev
5 files changed, 90 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index aa30c0897d60..a25ac210f9c8 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -152,6 +152,9 @@ import javax.xml.datatype.DatatypeConfigurationException; * <screenBrightnessRampSlowDecrease>0.03</screenBrightnessRampSlowDecrease> * <screenBrightnessRampSlowIncrease>0.04</screenBrightnessRampSlowIncrease> * + * <screenBrightnessRampIncreaseMaxMillis>2000</screenBrightnessRampIncreaseMaxMillis> + * <screenBrightnessRampDecreaseMaxMillis>3000</screenBrightnessRampDecreaseMaxMillis> + * * <lightSensor> * <type>android.sensor.light</type> * <name>1234 Ambient Light Sensor</name> @@ -259,6 +262,8 @@ public class DisplayDeviceConfig { private float mBrightnessRampFastIncrease = Float.NaN; private float mBrightnessRampSlowDecrease = Float.NaN; private float mBrightnessRampSlowIncrease = Float.NaN; + private long mBrightnessRampDecreaseMaxMillis = 0; + private long mBrightnessRampIncreaseMaxMillis = 0; 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 @@ -534,6 +539,14 @@ public class DisplayDeviceConfig { return mBrightnessRampSlowIncrease; } + public long getBrightnessRampDecreaseMaxMillis() { + return mBrightnessRampDecreaseMaxMillis; + } + + public long getBrightnessRampIncreaseMaxMillis() { + return mBrightnessRampIncreaseMaxMillis; + } + public int getAmbientHorizonLong() { return mAmbientHorizonLong; } @@ -628,6 +641,8 @@ public class DisplayDeviceConfig { + ", mBrightnessRampFastIncrease=" + mBrightnessRampFastIncrease + ", mBrightnessRampSlowDecrease=" + mBrightnessRampSlowDecrease + ", mBrightnessRampSlowIncrease=" + mBrightnessRampSlowIncrease + + ", mBrightnessRampDecreaseMaxMillis=" + mBrightnessRampDecreaseMaxMillis + + ", mBrightnessRampIncreaseMaxMillis=" + mBrightnessRampIncreaseMaxMillis + ", mAmbientHorizonLong=" + mAmbientHorizonLong + ", mAmbientHorizonShort=" + mAmbientHorizonShort + ", mScreenDarkeningMinThreshold=" + mScreenDarkeningMinThreshold @@ -725,6 +740,8 @@ public class DisplayDeviceConfig { mBrightnessRampFastIncrease = PowerManager.BRIGHTNESS_MAX; mBrightnessRampSlowDecrease = PowerManager.BRIGHTNESS_MAX; mBrightnessRampSlowIncrease = PowerManager.BRIGHTNESS_MAX; + mBrightnessRampDecreaseMaxMillis = 0; + mBrightnessRampIncreaseMaxMillis = 0; setSimpleMappingStrategyValues(); loadAmbientLightSensorFromConfigXml(); setProxSensorUnspecified(); @@ -1115,6 +1132,15 @@ public class DisplayDeviceConfig { } loadBrightnessRampsFromConfigXml(); } + + final BigInteger increaseMax = config.getScreenBrightnessRampIncreaseMaxMillis(); + if (increaseMax != null) { + mBrightnessRampIncreaseMaxMillis = increaseMax.intValue(); + } + final BigInteger decreaseMax = config.getScreenBrightnessRampDecreaseMaxMillis(); + if (decreaseMax != null) { + mBrightnessRampDecreaseMaxMillis = decreaseMax.intValue(); + } } private void loadBrightnessRampsFromConfigXml() { diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 80ff8349a153..d13a9a3ec27e 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -255,6 +255,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // to reach the final state. private final boolean mBrightnessBucketsInDozeConfig; + // Maximum time a ramp animation can take. + private long mBrightnessRampIncreaseMaxTimeMillis; + private long mBrightnessRampDecreaseMaxTimeMillis; + // The pending power request. // Initially null until the first call to requestPowerState. @GuardedBy("mLock") @@ -507,7 +511,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call final Resources resources = context.getResources(); - // DOZE AND DIM SETTINGS mScreenBrightnessDozeConfig = clampAbsoluteBrightness( pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DOZE)); @@ -641,7 +644,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mIsRbcActive = mCdsi.isReduceBrightColorsActivated(); mAutomaticBrightnessController.recalculateSplines(mIsRbcActive, adjustedNits); - // If rbc is turned on, off or there is a change in strength, we want to reset the short // term model. Since the nits range at which brightness now operates has changed due to // RBC/strength change, any short term model based on the previous range should be @@ -837,6 +839,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call loadNitsRange(mContext.getResources()); setUpAutoBrightness(mContext.getResources(), mHandler); reloadReduceBrightColours(); + if (mScreenBrightnessRampAnimator != null) { + mScreenBrightnessRampAnimator.setAnimationTimeLimits( + mBrightnessRampIncreaseMaxTimeMillis, + mBrightnessRampDecreaseMaxTimeMillis); + } mHbmController.resetHbmData(info.width, info.height, token, info.uniqueId, mDisplayDeviceConfig.getHighBrightnessModeData(), new HighBrightnessModeController.HdrBrightnessDeviceConfig() { @@ -883,6 +890,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mScreenBrightnessRampAnimator = new DualRampAnimator<>(mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS_FLOAT, DisplayPowerState.SCREEN_SDR_BRIGHTNESS_FLOAT); + mScreenBrightnessRampAnimator.setAnimationTimeLimits( + mBrightnessRampIncreaseMaxTimeMillis, + mBrightnessRampDecreaseMaxTimeMillis); mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener); noteScreenState(mPowerState.getScreenState()); @@ -1007,6 +1017,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessRampRateFastIncrease = mDisplayDeviceConfig.getBrightnessRampFastIncrease(); mBrightnessRampRateSlowDecrease = mDisplayDeviceConfig.getBrightnessRampSlowDecrease(); mBrightnessRampRateSlowIncrease = mDisplayDeviceConfig.getBrightnessRampSlowIncrease(); + mBrightnessRampDecreaseMaxTimeMillis = + mDisplayDeviceConfig.getBrightnessRampDecreaseMaxMillis(); + mBrightnessRampIncreaseMaxTimeMillis = + mDisplayDeviceConfig.getBrightnessRampIncreaseMaxMillis(); } private void loadNitsRange(Resources resources) { diff --git a/services/core/java/com/android/server/display/RampAnimator.java b/services/core/java/com/android/server/display/RampAnimator.java index 2567e4306293..690ec3fb5aaf 100644 --- a/services/core/java/com/android/server/display/RampAnimator.java +++ b/services/core/java/com/android/server/display/RampAnimator.java @@ -34,6 +34,8 @@ class RampAnimator<T> { private float mCurrentValue; private float mTargetValue; private float mRate; + private float mAnimationIncreaseMaxTimeSecs; + private float mAnimationDecreaseMaxTimeSecs; private boolean mAnimating; private float mAnimatedValue; // higher precision copy of mCurrentValue @@ -43,13 +45,24 @@ class RampAnimator<T> { private Listener mListener; - public RampAnimator(T object, FloatProperty<T> property) { + RampAnimator(T object, FloatProperty<T> property) { mObject = object; mProperty = property; mChoreographer = Choreographer.getInstance(); } /** + * Sets the maximum time that a brightness animation can take. + */ + public void setAnimationTimeLimits(long animationRampIncreaseMaxTimeMillis, + long animationRampDecreaseMaxTimeMillis) { + mAnimationIncreaseMaxTimeSecs = (animationRampIncreaseMaxTimeMillis > 0) + ? (animationRampIncreaseMaxTimeMillis / 1000.0f) : 0.0f; + mAnimationDecreaseMaxTimeSecs = (animationRampDecreaseMaxTimeMillis > 0) + ? (animationRampDecreaseMaxTimeMillis / 1000.0f) : 0.0f; + } + + /** * Starts animating towards the specified value. * * If this is the first time the property is being set or if the rate is 0, @@ -83,6 +96,15 @@ class RampAnimator<T> { return false; } + // Adjust the rate so that we do not exceed our maximum animation time. + if (target > mCurrentValue && mAnimationIncreaseMaxTimeSecs > 0.0f + && ((target - mCurrentValue) / rate) > mAnimationIncreaseMaxTimeSecs) { + rate = (target - mCurrentValue) / mAnimationIncreaseMaxTimeSecs; + } else if (target < mCurrentValue && mAnimationDecreaseMaxTimeSecs > 0.0f + && ((mCurrentValue - target) / rate) > mAnimationDecreaseMaxTimeSecs) { + rate = (mCurrentValue - target) / mAnimationDecreaseMaxTimeSecs; + } + // Adjust the rate based on the closest target. // If a faster rate is specified, then use the new rate so that we converge // more rapidly based on the new request. @@ -209,6 +231,17 @@ class RampAnimator<T> { } /** + * Sets the maximum time that a brightness animation can take. + */ + public void setAnimationTimeLimits(long animationRampIncreaseMaxTimeMillis, + long animationRampDecreaseMaxTimeMillis) { + mFirst.setAnimationTimeLimits(animationRampIncreaseMaxTimeMillis, + animationRampDecreaseMaxTimeMillis); + mSecond.setAnimationTimeLimits(animationRampIncreaseMaxTimeMillis, + animationRampDecreaseMaxTimeMillis); + } + + /** * Starts animating towards the specified values. * * If this is the first time the property is being set or if the rate is 0, diff --git a/services/core/xsd/display-device-config/display-device-config.xsd b/services/core/xsd/display-device-config/display-device-config.xsd index 0e9a04f1fdde..09044e72f60b 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -57,6 +57,16 @@ <xs:element type="nonNegativeDecimal" name="screenBrightnessRampSlowIncrease"> <xs:annotation name="final"/> </xs:element> + <!-- Maximum time in milliseconds that a brightness increase animation + can take. --> + <xs:element type="xs:nonNegativeInteger" name="screenBrightnessRampIncreaseMaxMillis"> + <xs:annotation name="final"/> + </xs:element> + <!-- Maximum time in milliseconds that a brightness decrease animation + can take. --> + <xs:element type="xs:nonNegativeInteger" name="screenBrightnessRampDecreaseMaxMillis"> + <xs:annotation name="final"/> + </xs:element> <xs:element type="sensorDetails" name="lightSensor"> <xs:annotation name="final"/> </xs:element> diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt index 075edd77af1d..e8b13ca6356e 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -48,8 +48,10 @@ package com.android.server.display.config { method public com.android.server.display.config.DisplayQuirks getQuirks(); method @NonNull public final java.math.BigDecimal getScreenBrightnessDefault(); method @NonNull public final com.android.server.display.config.NitsMap getScreenBrightnessMap(); + method public final java.math.BigInteger getScreenBrightnessRampDecreaseMaxMillis(); method public final java.math.BigDecimal getScreenBrightnessRampFastDecrease(); method public final java.math.BigDecimal getScreenBrightnessRampFastIncrease(); + method public final java.math.BigInteger getScreenBrightnessRampIncreaseMaxMillis(); method public final java.math.BigDecimal getScreenBrightnessRampSlowDecrease(); method public final java.math.BigDecimal getScreenBrightnessRampSlowIncrease(); method @NonNull public final com.android.server.display.config.ThermalThrottling getThermalThrottling(); @@ -64,8 +66,10 @@ package com.android.server.display.config { method public void setQuirks(com.android.server.display.config.DisplayQuirks); method public final void setScreenBrightnessDefault(@NonNull java.math.BigDecimal); method public final void setScreenBrightnessMap(@NonNull com.android.server.display.config.NitsMap); + method public final void setScreenBrightnessRampDecreaseMaxMillis(java.math.BigInteger); method public final void setScreenBrightnessRampFastDecrease(java.math.BigDecimal); method public final void setScreenBrightnessRampFastIncrease(java.math.BigDecimal); + method public final void setScreenBrightnessRampIncreaseMaxMillis(java.math.BigInteger); method public final void setScreenBrightnessRampSlowDecrease(java.math.BigDecimal); method public final void setScreenBrightnessRampSlowIncrease(java.math.BigDecimal); method public final void setThermalThrottling(@NonNull com.android.server.display.config.ThermalThrottling); |