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 Diff line number Diff line
@@ -708,10 +708,8 @@ public final class DisplayManagerService extends SystemService {
            final BrightnessPair brightnessPair =
                    index < 0 ? null : mDisplayBrightnesses.valueAt(index);
            if (index < 0 || (mDisplayStates.valueAt(index) == state
                    && BrightnessSynchronizer.floatEquals(
                            brightnessPair.brightness, brightnessState)
                    && BrightnessSynchronizer.floatEquals(
                            brightnessPair.sdrBrightness, sdrBrightnessState))) {
                    && brightnessPair.brightness == brightnessState
                    && brightnessPair.sdrBrightness == sdrBrightnessState)) {
                return; // Display no longer exists or no change.
            }

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

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

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

import com.android.internal.display.BrightnessSynchronizer;

import java.io.PrintWriter;

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

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

import com.android.internal.display.BrightnessSynchronizer;

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