summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/display/BrightnessRangeController.java1
-rw-r--r--services/core/java/com/android/server/display/NormalBrightnessModeController.java6
-rw-r--r--services/core/java/com/android/server/display/brightness/clamper/HdrClamper.java21
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/NormalBrightnessModeControllerTest.java25
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/brightness/clamper/HdrClamperTest.java6
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);
}