Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0401d48b authored by Piotr Wilczyński's avatar Piotr Wilczyński Committed by Android (Google) Code Review
Browse files

Merge "Pass the raw brightness value to the followers"

parents adc72351 432fc2d1
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -196,6 +196,11 @@ class AutomaticBrightnessController {
    // available.
    private float mScreenAutoBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;

    // The screen brightness level before clamping and throttling. This value needs to be stored
    // for concurrent displays mode and passed to the additional displays which will do their own
    // clamping and throttling.
    private float mRawScreenAutoBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;

    // The current display policy. This is useful, for example,  for knowing when we're dozing,
    // where the light sensor may not be available.
    private int mDisplayPolicy = DisplayPowerRequest.POLICY_OFF;
@@ -380,6 +385,10 @@ class AutomaticBrightnessController {
        return mScreenAutoBrightness;
    }

    float getRawAutomaticScreenBrightness() {
        return mRawScreenAutoBrightness;
    }

    public boolean hasValidAmbientLux() {
        return mAmbientLuxValid;
    }
@@ -653,6 +662,7 @@ class AutomaticBrightnessController {
                mPreThresholdLux = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            }
            mScreenAutoBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            mRawScreenAutoBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            mPreThresholdBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            mRecentLightSamples = 0;
            mAmbientLightRingBuffer.clear();
@@ -915,6 +925,7 @@ class AutomaticBrightnessController {

        float value = mCurrentBrightnessMapper.getBrightness(mAmbientLux, mForegroundAppPackageName,
                mForegroundAppCategory);
        mRawScreenAutoBrightness = value;
        float newScreenAutoBrightness = clampScreenBrightness(value);

        // The min/max range can change for brightness due to HBM. See if the current brightness
+15 −5
Original line number Diff line number Diff line
@@ -1160,6 +1160,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            }
            loadScreenOffBrightnessSensor();
            int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux();
            // TODO (b/265793751): Don't instantiate ScreenOffBrightnessSensorController if this is
            // a complementary display
            if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) {
                mScreenOffBrightnessSensorController = new ScreenOffBrightnessSensorController(
                        mSensorManager,
@@ -1452,7 +1454,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        final boolean autoBrightnessEnabled = mUseAutoBrightness
                && (state == Display.STATE_ON || autoBrightnessEnabledInDoze)
                && Float.isNaN(brightnessState)
                && mAutomaticBrightnessController != null;
                && mAutomaticBrightnessController != null
                && mBrightnessReasonTemp.getReason() != BrightnessReason.REASON_FOLLOWER;
        final boolean autoBrightnessDisabledDueToDisplayOff = mUseAutoBrightness
                && !(state == Display.STATE_ON || autoBrightnessEnabledInDoze);
        final int autoBrightnessState = autoBrightnessEnabled
@@ -1521,12 +1524,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }

        boolean updateScreenBrightnessSetting = false;
        float rawBrightnessState = brightnessState;

        // Apply auto-brightness.
        boolean slowChange = false;
        if (Float.isNaN(brightnessState)) {
            float newAutoBrightnessAdjustment = autoBrightnessAdjustment;
            if (autoBrightnessEnabled) {
                rawBrightnessState = mAutomaticBrightnessController
                        .getRawAutomaticScreenBrightness();
                brightnessState = mAutomaticBrightnessController.getAutomaticScreenBrightness(
                        mTempBrightnessEvent);
                newAutoBrightnessAdjustment =
@@ -1568,7 +1574,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        // Use default brightness when dozing unless overridden.
        if ((Float.isNaN(brightnessState))
                && Display.isDozeState(state)) {
            brightnessState = clampScreenBrightness(mScreenBrightnessDozeConfig);
            rawBrightnessState = mScreenBrightnessDozeConfig;
            brightnessState = clampScreenBrightness(rawBrightnessState);
            mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE_DEFAULT);
        }

@@ -1576,7 +1583,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        // brightness
        if (Float.isNaN(brightnessState) && autoBrightnessEnabled
                && mScreenOffBrightnessSensorController != null) {
            brightnessState = mScreenOffBrightnessSensorController.getAutomaticScreenBrightness();
            rawBrightnessState =
                    mScreenOffBrightnessSensorController.getAutomaticScreenBrightness();
            brightnessState = rawBrightnessState;
            if (isValidBrightnessValue(brightnessState)) {
                brightnessState = clampScreenBrightness(brightnessState);
                updateScreenBrightnessSetting = mCurrentScreenBrightnessSetting != brightnessState;
@@ -1587,7 +1596,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

        // Apply manual brightness.
        if (Float.isNaN(brightnessState)) {
            brightnessState = clampScreenBrightness(mCurrentScreenBrightnessSetting);
            rawBrightnessState = mCurrentScreenBrightnessSetting;
            brightnessState = clampScreenBrightness(rawBrightnessState);
            if (brightnessState != mCurrentScreenBrightnessSetting) {
                // The manually chosen screen brightness is outside of the currently allowed
                // range (i.e., high-brightness-mode), make sure we tell the rest of the system
@@ -1621,7 +1631,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

        for (int i = 0; i < displayBrightnessFollowers.size(); i++) {
            DisplayPowerControllerInterface follower = displayBrightnessFollowers.valueAt(i);
            follower.setBrightnessToFollow(brightnessState, convertToNits(brightnessState));
            follower.setBrightnessToFollow(rawBrightnessState, convertToNits(rawBrightnessState));
        }

        if (updateScreenBrightnessSetting) {
+15 −5
Original line number Diff line number Diff line
@@ -999,6 +999,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

            loadScreenOffBrightnessSensor();
            int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux();
            // TODO (b/265793751): Don't instantiate ScreenOffBrightnessSensorController if this is
            // a complementary display
            if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) {
                mScreenOffBrightnessSensorController = new ScreenOffBrightnessSensorController(
                        mSensorManager,
@@ -1175,6 +1177,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        DisplayBrightnessState displayBrightnessState = mDisplayBrightnessController
                .updateBrightness(mPowerRequest, state);
        float brightnessState = displayBrightnessState.getBrightness();
        float rawBrightnessState = displayBrightnessState.getBrightness();
        mBrightnessReasonTemp.set(displayBrightnessState.getBrightnessReason());

        final boolean autoBrightnessEnabledInDoze =
@@ -1185,7 +1188,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
                && (Float.isNaN(brightnessState)
                        || mBrightnessReasonTemp.getReason() == BrightnessReason.REASON_TEMPORARY
                        || mBrightnessReasonTemp.getReason() == BrightnessReason.REASON_BOOST)
                && mAutomaticBrightnessController != null;
                && mAutomaticBrightnessController != null
                && mBrightnessReasonTemp.getReason() != BrightnessReason.REASON_FOLLOWER;
        final boolean autoBrightnessDisabledDueToDisplayOff = mUseAutoBrightness
                && !(state == Display.STATE_ON || autoBrightnessEnabledInDoze);
        final int autoBrightnessState = autoBrightnessEnabled
@@ -1239,6 +1243,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        if (Float.isNaN(brightnessState)) {
            float newAutoBrightnessAdjustment = autoBrightnessAdjustment;
            if (autoBrightnessEnabled) {
                rawBrightnessState = mAutomaticBrightnessController
                        .getRawAutomaticScreenBrightness();
                brightnessState = mAutomaticBrightnessController.getAutomaticScreenBrightness(
                        mTempBrightnessEvent);
                newAutoBrightnessAdjustment =
@@ -1280,7 +1286,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        // Use default brightness when dozing unless overridden.
        if ((Float.isNaN(brightnessState))
                && Display.isDozeState(state)) {
            brightnessState = clampScreenBrightness(mScreenBrightnessDozeConfig);
            rawBrightnessState = mScreenBrightnessDozeConfig;
            brightnessState = clampScreenBrightness(rawBrightnessState);
            mBrightnessReasonTemp.setReason(BrightnessReason.REASON_DOZE_DEFAULT);
        }

@@ -1288,7 +1295,9 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        // brightness
        if (Float.isNaN(brightnessState) && autoBrightnessEnabled
                && mScreenOffBrightnessSensorController != null) {
            brightnessState = mScreenOffBrightnessSensorController.getAutomaticScreenBrightness();
            rawBrightnessState =
                    mScreenOffBrightnessSensorController.getAutomaticScreenBrightness();
            brightnessState = rawBrightnessState;
            if (BrightnessUtils.isValidBrightnessValue(brightnessState)) {
                brightnessState = clampScreenBrightness(brightnessState);
                updateScreenBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness()
@@ -1300,7 +1309,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

        // Apply manual brightness.
        if (Float.isNaN(brightnessState)) {
            brightnessState = clampScreenBrightness(currentBrightnessSetting);
            rawBrightnessState = currentBrightnessSetting;
            brightnessState = clampScreenBrightness(rawBrightnessState);
            if (brightnessState != currentBrightnessSetting) {
                // The manually chosen screen brightness is outside of the currently allowed
                // range (i.e., high-brightness-mode), make sure we tell the rest of the system
@@ -1334,7 +1344,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

        for (int i = 0; i < displayBrightnessFollowers.size(); i++) {
            DisplayPowerControllerInterface follower = displayBrightnessFollowers.valueAt(i);
            follower.setBrightnessToFollow(brightnessState, convertToNits(brightnessState));
            follower.setBrightnessToFollow(rawBrightnessState, convertToNits(rawBrightnessState));
        }

        if (updateScreenBrightnessSetting) {
+4 −0
Original line number Diff line number Diff line
@@ -484,6 +484,7 @@ public class AutomaticBrightnessControllerTest {
        // Sensor reads 100 lux. We should get max brightness.
        listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux));
        assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getAutomaticScreenBrightness(), 0.0f);
        assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getRawAutomaticScreenBrightness(), 0.0f);

        // Apply throttling and notify ABC (simulates DisplayPowerController#updatePowerState())
        final float throttledBrightness = 0.123f;
@@ -494,6 +495,8 @@ public class AutomaticBrightnessControllerTest {
                0 /* adjustment= */, false /* userChanged= */, DisplayPowerRequest.POLICY_BRIGHT,
                /* shouldResetShortTermModel= */ true);
        assertEquals(throttledBrightness, mController.getAutomaticScreenBrightness(), 0.0f);
        // The raw brightness value should not have throttling applied
        assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getRawAutomaticScreenBrightness(), 0.0f);

        // Remove throttling and notify ABC again
        when(mBrightnessThrottler.getBrightnessCap()).thenReturn(BRIGHTNESS_MAX_FLOAT);
@@ -503,6 +506,7 @@ public class AutomaticBrightnessControllerTest {
                0 /* adjustment= */, false /* userChanged= */, DisplayPowerRequest.POLICY_BRIGHT,
                /* shouldResetShortTermModel= */ true);
        assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getAutomaticScreenBrightness(), 0.0f);
        assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getRawAutomaticScreenBrightness(), 0.0f);
    }

    @Test