summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/display/BrightnessRangeController.java8
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java2
-rw-r--r--services/core/java/com/android/server/display/HighBrightnessModeController.java15
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeControllerTest.java19
4 files changed, 39 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/display/BrightnessRangeController.java b/services/core/java/com/android/server/display/BrightnessRangeController.java
index 50d650855b05..4fd92751d498 100644
--- a/services/core/java/com/android/server/display/BrightnessRangeController.java
+++ b/services/core/java/com/android/server/display/BrightnessRangeController.java
@@ -17,7 +17,6 @@
package com.android.server.display;
import android.annotation.Nullable;
-import android.hardware.display.BrightnessInfo;
import android.os.Handler;
import android.os.IBinder;
@@ -121,8 +120,11 @@ class BrightnessRangeController {
}
void onBrightnessChanged(float brightness, float unthrottledBrightness,
- @BrightnessInfo.BrightnessMaxReason int throttlingReason) {
- mHbmController.onBrightnessChanged(brightness, unthrottledBrightness, throttlingReason);
+ DisplayBrightnessState state) {
+ mHbmController.onHdrBoostApplied(
+ state.getHdrBrightness() != DisplayBrightnessState.BRIGHTNESS_NOT_SET);
+ mHbmController.onBrightnessChanged(brightness, unthrottledBrightness,
+ state.getBrightnessMaxReason());
}
float getCurrentBrightnessMin() {
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 2f82b2ac464a..92f5cab10c2a 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -1638,7 +1638,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// brightness sources (such as an app override) are not saved to the setting, but should be
// reflected in HBM calculations.
mBrightnessRangeController.onBrightnessChanged(brightnessState, unthrottledBrightnessState,
- clampedState.getBrightnessMaxReason());
+ clampedState);
// Animate the screen brightness when the screen is on or dozing.
// Skip the animation when the screen is off or suspended.
diff --git a/services/core/java/com/android/server/display/HighBrightnessModeController.java b/services/core/java/com/android/server/display/HighBrightnessModeController.java
index 6be0c123d262..0334aa5bca8f 100644
--- a/services/core/java/com/android/server/display/HighBrightnessModeController.java
+++ b/services/core/java/com/android/server/display/HighBrightnessModeController.java
@@ -102,7 +102,8 @@ class HighBrightnessModeController {
BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE;
private int mHbmMode = BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF;
- private boolean mIsHdrLayerPresent = false;
+ @VisibleForTesting
+ boolean mIsHdrLayerPresent = false;
// mMaxDesiredHdrSdrRatio should only be applied when there is a valid backlight->nits mapping
private float mMaxDesiredHdrSdrRatio = DEFAULT_MAX_DESIRED_HDR_SDR_RATIO;
private boolean mForceHbmChangeCallback = false;
@@ -387,6 +388,18 @@ class HighBrightnessModeController {
mHdrBoostDisabled = true;
unregisterHdrListener();
}
+ /**
+ * Hdr boost can be applied by
+ * {@link com.android.server.display.brightness.clamper.HdrBrightnessModifier}, in this case
+ * HBMController should not consume HBM time budget
+ */
+ void onHdrBoostApplied(boolean applied) {
+ // We need to update mIsHdrLayerPresent flag only if HDR boost is controlled by other
+ // component and disabled here
+ if (mHdrBoostDisabled) {
+ mIsHdrLayerPresent = applied;
+ }
+ }
private long calculateRemainingTime(long currentTime) {
if (!deviceSupportsHbm()) {
diff --git a/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeControllerTest.java
index cde87b9b89b2..255d236186b6 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeControllerTest.java
@@ -720,6 +720,25 @@ public class HighBrightnessModeControllerTest {
.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_SV_OFF_LOW_REQUESTED_BRIGHTNESS));
}
+ @Test
+ public void testDoesNotAcceptExternalHdrLayerUpdates_hdrBoostEnabled() {
+ final HighBrightnessModeController hbmc = createDefaultHbm();
+ assertFalse(hbmc.mIsHdrLayerPresent);
+
+ hbmc.onHdrBoostApplied(true);
+ assertFalse(hbmc.mIsHdrLayerPresent);
+ }
+
+ @Test
+ public void testAcceptsExternalHdrLayerUpdates_hdrBoostDisabled() {
+ final HighBrightnessModeController hbmc = createDefaultHbm();
+ hbmc.disableHdrBoost();
+ assertFalse(hbmc.mIsHdrLayerPresent);
+
+ hbmc.onHdrBoostApplied(true);
+ assertTrue(hbmc.mIsHdrLayerPresent);
+ }
+
private void assertState(HighBrightnessModeController hbmc,
float brightnessMin, float brightnessMax, int hbmMode) {
assertEquals(brightnessMin, hbmc.getCurrentBrightnessMin(), EPSILON);