diff options
| author | 2024-03-25 12:11:18 +0000 | |
|---|---|---|
| committer | 2024-03-25 12:19:01 +0000 | |
| commit | be2cc83df14b103db93023c28970732deae0717f (patch) | |
| tree | 815437c73ee2830e441cfcc12cca8ea2e6014a6a | |
| parent | 3825ffc728cd18be4f111d02c74a850adb277e78 (diff) | |
Temproary disabling NBMController and HdrClamper when adaptive brightness is off
Currently NBMController and HdrClamper recevice ambient lux state from AutoBrightnessController.
ABC unsubscribes from lightSensor when adaptive brightness is off. This leads to capping based on stale lux value.
NBMController and HdrClamper will be re-enabled when adaptive brightenss is off after ABC/LightSensor decoupling
Bug: b/322445088
Test: atest HdrClamperTest atest NormalBrightnessControllerTest
Change-Id: I666c6a17956df73d751cd453e858305925a2d21c
5 files changed, 46 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/display/BrightnessRangeController.java b/services/core/java/com/android/server/display/BrightnessRangeController.java index 10030b3c9176..dc0e80c686a8 100644 --- a/services/core/java/com/android/server/display/BrightnessRangeController.java +++ b/services/core/java/com/android/server/display/BrightnessRangeController.java @@ -117,6 +117,7 @@ class BrightnessRangeController { () -> mNormalBrightnessModeController.setAutoBrightnessState(state), () -> mHbmController.setAutoBrightnessEnabled(state) ); + mHdrClamper.setAutoBrightnessState(state); } void onBrightnessChanged(float brightness, float unthrottledBrightness, diff --git a/services/core/java/com/android/server/display/NormalBrightnessModeController.java b/services/core/java/com/android/server/display/NormalBrightnessModeController.java index 135ebd8f4fbf..e94cf00437eb 100644 --- a/services/core/java/com/android/server/display/NormalBrightnessModeController.java +++ b/services/core/java/com/android/server/display/NormalBrightnessModeController.java @@ -79,10 +79,12 @@ class NormalBrightnessModeController { maxBrightnessPoints = mMaxBrightnessLimits.get(BrightnessLimitMapType.ADAPTIVE); } - if (maxBrightnessPoints == null) { + // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled. + // Temporary disabling this Controller if auto brightness is off, to avoid capping + // brightness based on stale ambient lux. The issue is tracked here: b/322445088 + if (mAutoBrightnessEnabled && maxBrightnessPoints == null) { maxBrightnessPoints = mMaxBrightnessLimits.get(BrightnessLimitMapType.DEFAULT); } - if (maxBrightnessPoints != null) { for (Map.Entry<Float, Float> brightnessPoint : maxBrightnessPoints.entrySet()) { float ambientBoundary = brightnessPoint.getKey(); 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 01a8d360a526..f1cb66c0efbb 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,6 +24,7 @@ import android.os.PowerManager; import android.view.SurfaceControlHdrLayerInfoListener; import com.android.internal.annotations.VisibleForTesting; +import com.android.server.display.AutomaticBrightnessController; import com.android.server.display.config.HdrBrightnessData; import java.io.PrintWriter; @@ -56,6 +57,8 @@ public class HdrClamper { private float mTransitionRate = -1f; private float mDesiredTransitionRate = -1f; + private boolean mAutoBrightnessEnabled = false; + public HdrClamper(BrightnessClamperController.ClamperChangeListener clamperChangeListener, Handler handler) { this(clamperChangeListener, handler, new Injector()); @@ -122,6 +125,18 @@ public class HdrClamper { recalculateBrightnessCap(data, mAmbientLux, mHdrVisible); } + /** + * Sets state of auto brightness to temporary disabling this Clamper if auto brightness is off. + * The issue is tracked here: b/322445088 + */ + public void setAutoBrightnessState(int state) { + boolean isEnabled = state == AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED; + if (isEnabled != mAutoBrightnessEnabled) { + mAutoBrightnessEnabled = isEnabled; + recalculateBrightnessCap(mHdrBrightnessData, mAmbientLux, mHdrVisible); + } + } + /** Clean up all resources */ @SuppressLint("AndroidFrameworkRequiresPermission") public void stop() { @@ -145,6 +160,7 @@ public class HdrClamper { : mHdrBrightnessData.toString())); pw.println(" mHdrListener registered=" + (mRegisteredDisplayToken != null)); pw.println(" mAmbientLux=" + mAmbientLux); + pw.println(" mAutoBrightnessEnabled=" + mAutoBrightnessEnabled); } private void reset() { @@ -163,7 +179,10 @@ public class HdrClamper { private void recalculateBrightnessCap(HdrBrightnessData data, float ambientLux, boolean hdrVisible) { - if (data == null || !hdrVisible) { + // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled. + // Temporary disabling this Clamper if auto brightness is off, to avoid capping + // brightness based on stale ambient lux. The issue is tracked here: b/322445088 + if (data == null || !hdrVisible || !mAutoBrightnessEnabled) { reset(); return; } diff --git a/services/tests/displayservicetests/src/com/android/server/display/NormalBrightnessModeControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/NormalBrightnessModeControllerTest.java index c379d6b79ee7..3fd3cef07dd5 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/NormalBrightnessModeControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/NormalBrightnessModeControllerTest.java @@ -43,6 +43,11 @@ public class NormalBrightnessModeControllerTest { private final NormalBrightnessModeController mController = new NormalBrightnessModeController(); + // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled. + // NormalBrightnessModeController is temporary disabled if auto brightness is off, + // to avoid capping brightness based on stale ambient lux. Temporary disabling tests with + // auto brightness off and default config pres + // The issue is tracked here: b/322445088 @Keep private static Object[][] brightnessData() { return new Object[][]{ @@ -59,10 +64,10 @@ public class NormalBrightnessModeControllerTest { ImmutableMap.of(99f, 0.1f, 101f, 0.2f) ), 0.2f}, // Auto brightness - off, config only for default - {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of( - BrightnessLimitMapType.DEFAULT, - ImmutableMap.of(99f, 0.1f, 101f, 0.2f) - ), 0.2f}, + // {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of( + // BrightnessLimitMapType.DEFAULT, + // ImmutableMap.of(99f, 0.1f, 101f, 0.2f) + // ), 0.2f}, // Auto brightness - off, config only for adaptive {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of( BrightnessLimitMapType.ADAPTIVE, @@ -81,12 +86,12 @@ public class NormalBrightnessModeControllerTest { ImmutableMap.of(99f, 0.3f, 101f, 0.4f) ), 0.4f}, // Auto brightness - off, config for both - {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of( - BrightnessLimitMapType.DEFAULT, - ImmutableMap.of(99f, 0.1f, 101f, 0.2f), - BrightnessLimitMapType.ADAPTIVE, - ImmutableMap.of(99f, 0.3f, 101f, 0.4f) - ), 0.2f}, + // {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of( + // BrightnessLimitMapType.DEFAULT, + // ImmutableMap.of(99f, 0.1f, 101f, 0.2f), + // BrightnessLimitMapType.ADAPTIVE, + // ImmutableMap.of(99f, 0.3f, 101f, 0.4f) + // ), 0.2f}, // Auto brightness - on, config for both, ambient high {1000, AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED, ImmutableMap.of( BrightnessLimitMapType.DEFAULT, 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 87fc7a484c5c..39ffe5be5882 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 @@ -33,6 +33,7 @@ import android.os.PowerManager; import androidx.test.filters.SmallTest; +import com.android.server.display.AutomaticBrightnessController; import com.android.server.display.config.HdrBrightnessData; import com.android.server.testutils.OffsettableClock; import com.android.server.testutils.TestHandler; @@ -230,6 +231,11 @@ public class HdrClamperTest { } private void configureClamper() { + // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled. + // HdrClamper is temporary disabled if auto brightness is off. + // Temporary setting AutoBrightnessState to enabled for this test + // The issue is tracked here: b/322445088 + mHdrClamper.setAutoBrightnessState(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED); mHdrClamper.resetHdrConfig(TEST_HDR_DATA, WIDTH, HEIGHT, MIN_HDR_PERCENT, mMockBinder); mHdrChangeListener.onHdrVisible(true); } |