From ce0693c2abea024b8e9f1c273f4b25452f25a1d1 Mon Sep 17 00:00:00 2001 From: petsjonkin <petsjonkin@google.com> Date: Thu, 5 Oct 2023 17:34:17 +0000 Subject: [PATCH] HdrClamper - use animation speed instead animation time in configuration Test: atest DisplayDeviceConfigTest atest HdrClamperTest Bug: b/283447291 Change-Id: I0c6b318cb11fc9bac7307728671820a05207cb7c --- .../brightness/clamper/HdrClamper.java | 12 ++-------- .../display/config/HdrBrightnessData.java | 24 +++++++++---------- .../display-device-config.xsd | 8 +++---- .../display-device-config/schema/current.txt | 8 +++---- .../display/DisplayDeviceConfigTest.java | 8 +++---- .../brightness/clamper/HdrClamperTest.java | 13 ++++------ 6 files changed, 31 insertions(+), 42 deletions(-) diff --git a/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java b/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java index 39f0b13f716aa..200d88a78dd78 100644 --- a/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java +++ b/services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java @@ -24,7 +24,6 @@ import android.os.PowerManager; import android.view.SurfaceControlHdrLayerInfoListener; import com.android.internal.annotations.VisibleForTesting; -import com.android.server.display.BrightnessUtils; import com.android.server.display.config.HdrBrightnessData; import java.io.PrintWriter; @@ -176,21 +175,14 @@ public class HdrClamper { } else if (mDesiredMaxBrightness != expectedMaxBrightness) { mDesiredMaxBrightness = expectedMaxBrightness; long debounceTime; - long transitionDuration; if (mDesiredMaxBrightness > mMaxBrightness) { debounceTime = mHdrBrightnessData.mBrightnessIncreaseDebounceMillis; - transitionDuration = mHdrBrightnessData.mBrightnessIncreaseDurationMillis; + mDesiredTransitionRate = mHdrBrightnessData.mScreenBrightnessRampIncrease; } else { debounceTime = mHdrBrightnessData.mBrightnessDecreaseDebounceMillis; - transitionDuration = mHdrBrightnessData.mBrightnessDecreaseDurationMillis; + mDesiredTransitionRate = mHdrBrightnessData.mScreenBrightnessRampDecrease; } - float maxHlg = BrightnessUtils.convertLinearToGamma(mMaxBrightness); - float desiredMaxHlg = BrightnessUtils.convertLinearToGamma(mDesiredMaxBrightness); - - mDesiredTransitionRate = Math.abs( - (maxHlg - desiredMaxHlg) * 1000f / transitionDuration); - mHandler.removeCallbacks(mDebouncer); mHandler.postDelayed(mDebouncer, debounceTime); } diff --git a/services/core/java/com/android/server/display/config/HdrBrightnessData.java b/services/core/java/com/android/server/display/config/HdrBrightnessData.java index 48d671d356f7a..837fbf7ca17c0 100644 --- a/services/core/java/com/android/server/display/config/HdrBrightnessData.java +++ b/services/core/java/com/android/server/display/config/HdrBrightnessData.java @@ -40,9 +40,9 @@ public class HdrBrightnessData { public final long mBrightnessIncreaseDebounceMillis; /** - * Brightness increase animation duration + * Brightness increase animation speed */ - public final long mBrightnessIncreaseDurationMillis; + public final float mScreenBrightnessRampIncrease; /** * Debounce time for brightness decrease @@ -50,19 +50,19 @@ public class HdrBrightnessData { public final long mBrightnessDecreaseDebounceMillis; /** - * Brightness decrease animation duration + * Brightness decrease animation speed */ - public final long mBrightnessDecreaseDurationMillis; + public final float mScreenBrightnessRampDecrease; @VisibleForTesting public HdrBrightnessData(Map<Float, Float> maxBrightnessLimits, - long brightnessIncreaseDebounceMillis, long brightnessIncreaseDurationMillis, - long brightnessDecreaseDebounceMillis, long brightnessDecreaseDurationMillis) { + long brightnessIncreaseDebounceMillis, float screenBrightnessRampIncrease, + long brightnessDecreaseDebounceMillis, float screenBrightnessRampDecrease) { mMaxBrightnessLimits = maxBrightnessLimits; mBrightnessIncreaseDebounceMillis = brightnessIncreaseDebounceMillis; - mBrightnessIncreaseDurationMillis = brightnessIncreaseDurationMillis; + mScreenBrightnessRampIncrease = screenBrightnessRampIncrease; mBrightnessDecreaseDebounceMillis = brightnessDecreaseDebounceMillis; - mBrightnessDecreaseDurationMillis = brightnessDecreaseDurationMillis; + mScreenBrightnessRampDecrease = screenBrightnessRampDecrease; } @Override @@ -70,9 +70,9 @@ public class HdrBrightnessData { return "HdrBrightnessData {" + "mMaxBrightnessLimits: " + mMaxBrightnessLimits + ", mBrightnessIncreaseDebounceMillis: " + mBrightnessIncreaseDebounceMillis - + ", mBrightnessIncreaseDurationMillis: " + mBrightnessIncreaseDurationMillis + + ", mScreenBrightnessRampIncrease: " + mScreenBrightnessRampIncrease + ", mBrightnessDecreaseDebounceMillis: " + mBrightnessDecreaseDebounceMillis - + ", mBrightnessDecreaseDurationMillis: " + mBrightnessDecreaseDurationMillis + + ", mScreenBrightnessRampDecrease: " + mScreenBrightnessRampDecrease + "} "; } @@ -94,8 +94,8 @@ public class HdrBrightnessData { return new HdrBrightnessData(brightnessLimits, hdrConfig.getBrightnessIncreaseDebounceMillis().longValue(), - hdrConfig.getBrightnessIncreaseDurationMillis().longValue(), + hdrConfig.getScreenBrightnessRampIncrease().floatValue(), hdrConfig.getBrightnessDecreaseDebounceMillis().longValue(), - hdrConfig.getBrightnessDecreaseDurationMillis().longValue()); + hdrConfig.getScreenBrightnessRampDecrease().floatValue()); } } 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 debd891400b6d..215934f4dc09f 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -272,12 +272,12 @@ <xs:element name="brightnessDecreaseDebounceMillis" type="xs:nonNegativeInteger"> <xs:annotation name="final"/> </xs:element> - <!-- Animation time for brightness increase in millis --> - <xs:element name="brightnessIncreaseDurationMillis" type="xs:nonNegativeInteger"> + <!-- Animation speed for brightness increase. In framework brightness units per second. --> + <xs:element name="screenBrightnessRampIncrease" type="nonNegativeDecimal"> <xs:annotation name="final"/> </xs:element> - <!-- Animation time for brightness decrease in millis --> - <xs:element name="brightnessDecreaseDurationMillis" type="xs:nonNegativeInteger"> + <!-- Animation speed for brightness decrease. In framework brightness units per second. --> + <xs:element name="screenBrightnessRampDecrease" type="nonNegativeDecimal"> <xs:annotation name="final"/> </xs:element> </xs:complexType> diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt index 2d27f0c796608..f7e004375071a 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -179,15 +179,15 @@ package com.android.server.display.config { public class HdrBrightnessConfig { ctor public HdrBrightnessConfig(); method public final java.math.BigInteger getBrightnessDecreaseDebounceMillis(); - method public final java.math.BigInteger getBrightnessDecreaseDurationMillis(); method public final java.math.BigInteger getBrightnessIncreaseDebounceMillis(); - method public final java.math.BigInteger getBrightnessIncreaseDurationMillis(); method @NonNull public final com.android.server.display.config.NonNegativeFloatToFloatMap getBrightnessMap(); + method public final java.math.BigDecimal getScreenBrightnessRampDecrease(); + method public final java.math.BigDecimal getScreenBrightnessRampIncrease(); method public final void setBrightnessDecreaseDebounceMillis(java.math.BigInteger); - method public final void setBrightnessDecreaseDurationMillis(java.math.BigInteger); method public final void setBrightnessIncreaseDebounceMillis(java.math.BigInteger); - method public final void setBrightnessIncreaseDurationMillis(java.math.BigInteger); method public final void setBrightnessMap(@NonNull com.android.server.display.config.NonNegativeFloatToFloatMap); + method public final void setScreenBrightnessRampDecrease(java.math.BigDecimal); + method public final void setScreenBrightnessRampIncrease(java.math.BigDecimal); } public class HighBrightnessMode { diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java index c37d21ae1cc05..179a9d5f748ea 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -570,9 +570,9 @@ public final class DisplayDeviceConfigTest { assertNotNull(data); assertEquals(2, data.mMaxBrightnessLimits.size()); assertEquals(13000, data.mBrightnessDecreaseDebounceMillis); - assertEquals(10000, data.mBrightnessDecreaseDurationMillis); + assertEquals(0.1f, data.mScreenBrightnessRampDecrease, SMALL_DELTA); assertEquals(1000, data.mBrightnessIncreaseDebounceMillis); - assertEquals(11000, data.mBrightnessIncreaseDurationMillis); + assertEquals(0.11f, data.mScreenBrightnessRampIncrease, SMALL_DELTA); assertEquals(0.3f, data.mMaxBrightnessLimits.get(500f), SMALL_DELTA); assertEquals(0.6f, data.mMaxBrightnessLimits.get(1200f), SMALL_DELTA); @@ -841,9 +841,9 @@ public final class DisplayDeviceConfigTest { + " </point>\n" + " </brightnessMap>\n" + " <brightnessIncreaseDebounceMillis>1000</brightnessIncreaseDebounceMillis>\n" - + " <brightnessIncreaseDurationMillis>11000</brightnessIncreaseDurationMillis>\n" + + " <screenBrightnessRampIncrease>0.11</screenBrightnessRampIncrease>\n" + " <brightnessDecreaseDebounceMillis>13000</brightnessDecreaseDebounceMillis>\n" - + " <brightnessDecreaseDurationMillis>10000</brightnessDecreaseDurationMillis>\n" + + " <screenBrightnessRampDecrease>0.1</screenBrightnessRampDecrease>\n" + "</hdrBrightnessConfig>"; } diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java index ee187baf524e4..8d8274c61b208 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java @@ -56,9 +56,9 @@ public class HdrClamperTest { private static final HdrBrightnessData TEST_HDR_DATA = new HdrBrightnessData( Map.of(500f, 0.6f), /* brightnessIncreaseDebounceMillis= */ 1000, - /* brightnessIncreaseDurationMillis= */ 2000, + /* screenBrightnessRampIncrease= */ 0.02f, /* brightnessDecreaseDebounceMillis= */ 3000, - /* brightnessDecreaseDurationMillis= */4000 + /* screenBrightnessRampDecrease= */0.04f ); private static final int WIDTH = 600; @@ -152,8 +152,7 @@ public class HdrClamperTest { mClock.fastForward(3000); mTestHandler.timeAdvance(); assertEquals(0.6f, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE); - // 0.6 to HLG = 0.905727, rate = (1-0.905727) / 4 - assertEquals(0.023568f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); + assertEquals(0.04, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); } @Test @@ -181,8 +180,7 @@ public class HdrClamperTest { mClock.fastForward(1000); mTestHandler.timeAdvance(); assertEquals(PowerManager.BRIGHTNESS_MAX, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE); - // 0.6 to HLG = 0.905727, rate = (1-0.905727) / 2 - assertEquals(0.047137f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); + assertEquals(0.02f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); } @Test @@ -209,8 +207,7 @@ public class HdrClamperTest { mClock.fastForward(3000); mTestHandler.timeAdvance(); assertEquals(0.6f, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE); - // 0.6 to HLG = 0.905727, rate = (1-0.905727) / 4 - assertEquals(0.023568f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); + assertEquals(0.04f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); } // MsgInfo.sendTime is calculated first by adding SystemClock.uptimeMillis() -- GitLab