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

Commit 25fd6737 authored by Michael Wright's avatar Michael Wright
Browse files

Use exact brightnesses values for comparison.

Using BrightnessSynchronizer introduced an epsilon value in the
comparison. This meant it was possible for brightness changes to never
reach min or max if they were made in sufficiently small steps. Given:

1) The need to reach both min and max brightnesses.

2) The increased resolution of brightness controls on devices.

3) The desire to make the framework as independent as possible of
brightness resolution.

we no longer allow for an epsilon delta.

Fixes: 191935286
Test: manual

Change-Id: Ie4872fa81aa6f23799cd6b4dfdbfd2a61ec6ce7a
parent 77a21b70
Loading
Loading
Loading
Loading
+2 −4
Original line number Original line Diff line number Diff line
@@ -708,10 +708,8 @@ public final class DisplayManagerService extends SystemService {
            final BrightnessPair brightnessPair =
            final BrightnessPair brightnessPair =
                    index < 0 ? null : mDisplayBrightnesses.valueAt(index);
                    index < 0 ? null : mDisplayBrightnesses.valueAt(index);
            if (index < 0 || (mDisplayStates.valueAt(index) == state
            if (index < 0 || (mDisplayStates.valueAt(index) == state
                    && BrightnessSynchronizer.floatEquals(
                    && brightnessPair.brightness == brightnessState
                            brightnessPair.brightness, brightnessState)
                    && brightnessPair.sdrBrightness == sdrBrightnessState)) {
                    && BrightnessSynchronizer.floatEquals(
                            brightnessPair.sdrBrightness, sdrBrightnessState))) {
                return; // Display no longer exists or no change.
                return; // Display no longer exists or no change.
            }
            }


+10 −10
Original line number Original line Diff line number Diff line
@@ -1341,9 +1341,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            final float currentBrightness = mPowerState.getScreenBrightness();
            final float currentBrightness = mPowerState.getScreenBrightness();
            final float currentSdrBrightness = mPowerState.getSdrScreenBrightness();
            final float currentSdrBrightness = mPowerState.getSdrScreenBrightness();
            if (isValidBrightnessValue(animateValue)
            if (isValidBrightnessValue(animateValue)
                    && (!BrightnessSynchronizer.floatEquals(animateValue, currentBrightness)
                    && (animateValue != currentBrightness
                    || !BrightnessSynchronizer.floatEquals(
                    || sdrAnimateValue != currentSdrBrightness)) {
                            sdrAnimateValue, currentSdrBrightness))) {
                if (initialRampSkip || hasBrightnessBuckets
                if (initialRampSkip || hasBrightnessBuckets
                        || wasOrWillBeInVr || !isDisplayContentVisible || brightnessIsTemporary) {
                        || wasOrWillBeInVr || !isDisplayContentVisible || brightnessIsTemporary) {
                    animateScreenBrightness(animateValue, sdrAnimateValue,
                    animateScreenBrightness(animateValue, sdrAnimateValue,
@@ -1672,11 +1671,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                mHbmController.getCurrentBrightnessMin(), mHbmController.getCurrentBrightnessMax());
                mHbmController.getCurrentBrightnessMin(), mHbmController.getCurrentBrightnessMax());
    }
    }


    // Checks whether the brightness is within the valid brightness range, not including the off or
    // Checks whether the brightness is within the valid brightness range, not including off.
    // invalid states.
    private boolean isValidBrightnessValue(float brightness) {
    private boolean isValidBrightnessValue(float brightnessState) {
        return brightness >= PowerManager.BRIGHTNESS_MIN
        return brightnessState >= PowerManager.BRIGHTNESS_MIN
                && brightness <= PowerManager.BRIGHTNESS_MAX;
                && brightnessState <= PowerManager.BRIGHTNESS_MAX;
    }
    }


    private void animateScreenBrightness(float target, float sdrTarget, float rate) {
    private void animateScreenBrightness(float target, float sdrTarget, float rate) {
@@ -2006,6 +2004,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    }
    }


    private void putScreenBrightnessSetting(float brightnessValue, boolean updateCurrent) {
    private void putScreenBrightnessSetting(float brightnessValue, boolean updateCurrent) {
        if (!isValidBrightnessValue(brightnessValue)) {
            return;
        }
        if (updateCurrent) {
        if (updateCurrent) {
            setCurrentScreenBrightness(brightnessValue);
            setCurrentScreenBrightness(brightnessValue);
        }
        }
@@ -2046,8 +2047,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                || mPendingScreenBrightnessSetting < 0.0f)) {
                || mPendingScreenBrightnessSetting < 0.0f)) {
            return false;
            return false;
        }
        }
        if (BrightnessSynchronizer.floatEquals(
        if (mCurrentScreenBrightnessSetting == mPendingScreenBrightnessSetting) {
                mCurrentScreenBrightnessSetting, mPendingScreenBrightnessSetting)) {
            mPendingScreenBrightnessSetting = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            mPendingScreenBrightnessSetting = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            mTemporaryScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            mTemporaryScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            return false;
            return false;
+10 −14
Original line number Original line Diff line number Diff line
@@ -26,8 +26,6 @@ import android.util.Slog;
import android.view.Choreographer;
import android.view.Choreographer;
import android.view.Display;
import android.view.Display;


import com.android.internal.display.BrightnessSynchronizer;

import java.io.PrintWriter;
import java.io.PrintWriter;


/**
/**
@@ -166,10 +164,11 @@ final class DisplayPowerState {
    /**
    /**
     * Sets the display's SDR brightness.
     * Sets the display's SDR brightness.
     *
     *
     * @param brightness The brightness, ranges from 0.0f (minimum / off) to 1.0f (brightest).
     * @param brightness The brightness, ranges from 0.0f (minimum) to 1.0f (brightest), or is -1f
     *                   (off).
     */
     */
    public void setSdrScreenBrightness(float brightness) {
    public void setSdrScreenBrightness(float brightness) {
        if (!BrightnessSynchronizer.floatEquals(mSdrScreenBrightness, brightness)) {
        if (mSdrScreenBrightness != brightness) {
            if (DEBUG) {
            if (DEBUG) {
                Slog.d(TAG, "setSdrScreenBrightness: brightness=" + brightness);
                Slog.d(TAG, "setSdrScreenBrightness: brightness=" + brightness);
            }
            }
@@ -192,10 +191,11 @@ final class DisplayPowerState {
    /**
    /**
     * Sets the display brightness.
     * Sets the display brightness.
     *
     *
     * @param brightness The brightness, ranges from 0.0f (minimum / off) to 1.0f (brightest).
     * @param brightness The brightness, ranges from 0.0f (minimum) to 1.0f (brightest), or is -1f
     *                   (off).
     */
     */
    public void setScreenBrightness(float brightness) {
    public void setScreenBrightness(float brightness) {
        if (!BrightnessSynchronizer.floatEquals(mScreenBrightness, brightness)) {
        if (mScreenBrightness != brightness) {
            if (DEBUG) {
            if (DEBUG) {
                Slog.d(TAG, "setScreenBrightness: brightness=" + brightness);
                Slog.d(TAG, "setScreenBrightness: brightness=" + brightness);
            }
            }
@@ -432,10 +432,8 @@ final class DisplayPowerState {
        public boolean setState(int state, float brightnessState, float sdrBrightnessState) {
        public boolean setState(int state, float brightnessState, float sdrBrightnessState) {
            synchronized (mLock) {
            synchronized (mLock) {
                boolean stateChanged = state != mPendingState;
                boolean stateChanged = state != mPendingState;
                boolean backlightChanged =
                boolean backlightChanged = brightnessState != mPendingBacklight
                        !BrightnessSynchronizer.floatEquals(brightnessState, mPendingBacklight)
                        || sdrBrightnessState != mPendingSdrBacklight;
                        || !BrightnessSynchronizer.floatEquals(
                                sdrBrightnessState, mPendingSdrBacklight);
                if (stateChanged || backlightChanged) {
                if (stateChanged || backlightChanged) {
                    if (DEBUG) {
                    if (DEBUG) {
                        Slog.d(TAG, "Requesting new screen state: state="
                        Slog.d(TAG, "Requesting new screen state: state="
@@ -486,10 +484,8 @@ final class DisplayPowerState {
                    stateChanged = (state != mActualState);
                    stateChanged = (state != mActualState);
                    brightnessState = mPendingBacklight;
                    brightnessState = mPendingBacklight;
                    sdrBrightnessState = mPendingSdrBacklight;
                    sdrBrightnessState = mPendingSdrBacklight;
                    backlightChanged =
                    backlightChanged = brightnessState != mActualBacklight
                            !BrightnessSynchronizer.floatEquals(brightnessState, mActualBacklight)
                            || sdrBrightnessState != mActualSdrBacklight;
                            || !BrightnessSynchronizer.floatEquals(
                                    sdrBrightnessState, mActualSdrBacklight);
                    if (!stateChanged) {
                    if (!stateChanged) {
                        // State changed applied, notify outer class.
                        // State changed applied, notify outer class.
                        postScreenUpdateThreadSafe();
                        postScreenUpdateThreadSafe();
+5 −7
Original line number Original line Diff line number Diff line
@@ -648,12 +648,11 @@ final class LocalDisplayAdapter extends DisplayAdapter {
        public Runnable requestDisplayStateLocked(final int state, final float brightnessState,
        public Runnable requestDisplayStateLocked(final int state, final float brightnessState,
                final float sdrBrightnessState) {
                final float sdrBrightnessState) {
            // Assume that the brightness is off if the display is being turned off.
            // Assume that the brightness is off if the display is being turned off.
            assert state != Display.STATE_OFF || BrightnessSynchronizer.floatEquals(
            assert state != Display.STATE_OFF
                    brightnessState, PowerManager.BRIGHTNESS_OFF_FLOAT);
                    || brightnessState == PowerManager.BRIGHTNESS_OFF_FLOAT;
            final boolean stateChanged = (mState != state);
            final boolean stateChanged = (mState != state);
            final boolean brightnessChanged =
            final boolean brightnessChanged = mBrightnessState != brightnessState
                    !(BrightnessSynchronizer.floatEquals(mBrightnessState, brightnessState)
                    || mSdrBrightnessState != sdrBrightnessState;
                    && BrightnessSynchronizer.floatEquals(mSdrBrightnessState, sdrBrightnessState));
            if (stateChanged || brightnessChanged) {
            if (stateChanged || brightnessChanged) {
                final long physicalDisplayId = mPhysicalDisplayId;
                final long physicalDisplayId = mPhysicalDisplayId;
                final IBinder token = getDisplayTokenLocked();
                final IBinder token = getDisplayTokenLocked();
@@ -807,8 +806,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
                    }
                    }


                    private float brightnessToBacklight(float brightness) {
                    private float brightnessToBacklight(float brightness) {
                        if (BrightnessSynchronizer.floatEquals(
                        if (brightness == PowerManager.BRIGHTNESS_OFF_FLOAT) {
                                brightness, PowerManager.BRIGHTNESS_OFF_FLOAT)) {
                            return PowerManager.BRIGHTNESS_OFF_FLOAT;
                            return PowerManager.BRIGHTNESS_OFF_FLOAT;
                        } else {
                        } else {
                            return getDisplayDeviceConfig().getBacklightFromBrightness(brightness);
                            return getDisplayDeviceConfig().getBacklightFromBrightness(brightness);
+2 −4
Original line number Original line Diff line number Diff line
@@ -20,8 +20,6 @@ import android.animation.ValueAnimator;
import android.util.FloatProperty;
import android.util.FloatProperty;
import android.view.Choreographer;
import android.view.Choreographer;


import com.android.internal.display.BrightnessSynchronizer;

/**
/**
 * A custom animator that progressively updates a property value at
 * A custom animator that progressively updates a property value at
 * a given variable rate until it reaches a particular target value.
 * a given variable rate until it reaches a particular target value.
@@ -157,10 +155,10 @@ class RampAnimator<T> {
            }
            }
            final float oldCurrentValue = mCurrentValue;
            final float oldCurrentValue = mCurrentValue;
            mCurrentValue = mAnimatedValue;
            mCurrentValue = mAnimatedValue;
            if (!BrightnessSynchronizer.floatEquals(oldCurrentValue, mCurrentValue)) {
            if (oldCurrentValue != mCurrentValue) {
                mProperty.setValue(mObject, mCurrentValue);
                mProperty.setValue(mObject, mCurrentValue);
            }
            }
            if (!BrightnessSynchronizer.floatEquals(mTargetValue, mCurrentValue)) {
            if (mTargetValue != mCurrentValue) {
                postAnimationCallback();
                postAnimationCallback();
            } else {
            } else {
                mAnimating = false;
                mAnimating = false;