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