diff options
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); } |