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

Commit 83567678 authored by Fiona Campbell's avatar Fiona Campbell Committed by Android (Google) Code Review
Browse files

Merge "Compensate for DWB changes in brightness"

parents e8ae6082 a2c206de
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.display.BrightnessSynchronizer;
import com.android.internal.util.Preconditions;
import com.android.server.display.utils.Plog;
import com.android.server.display.whitebalance.DisplayWhiteBalanceController;

import java.io.PrintWriter;
import java.util.Arrays;
@@ -69,7 +70,7 @@ public abstract class BrightnessMappingStrategy {
    @Nullable
    public static BrightnessMappingStrategy create(Resources resources,
            DisplayDeviceConfig displayDeviceConfig) {
        return create(resources, displayDeviceConfig, /* isForIdleMode= */ false);
        return create(resources, displayDeviceConfig, /* isForIdleMode= */ false, null);
    }

    /**
@@ -80,8 +81,10 @@ public abstract class BrightnessMappingStrategy {
     */
    @Nullable
    public static BrightnessMappingStrategy createForIdleMode(Resources resources,
            DisplayDeviceConfig displayDeviceConfig) {
        return create(resources, displayDeviceConfig, /* isForIdleMode= */ true);
            DisplayDeviceConfig displayDeviceConfig, DisplayWhiteBalanceController
            displayWhiteBalanceController) {
        return create(resources, displayDeviceConfig, /* isForIdleMode= */ true,
                displayWhiteBalanceController);
    }

    /**
@@ -96,7 +99,8 @@ public abstract class BrightnessMappingStrategy {
     */
    @Nullable
    private static BrightnessMappingStrategy create(Resources resources,
            DisplayDeviceConfig displayDeviceConfig, boolean isForIdleMode) {
            DisplayDeviceConfig displayDeviceConfig, boolean isForIdleMode,
            DisplayWhiteBalanceController displayWhiteBalanceController) {

        // Display independent, mode dependent values
        float[] brightnessLevelsNits;
@@ -135,7 +139,7 @@ public abstract class BrightnessMappingStrategy {
            builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO);
            builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO);
            return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange,
                    autoBrightnessAdjustmentMaxGamma, isForIdleMode);
                    autoBrightnessAdjustmentMaxGamma, isForIdleMode, displayWhiteBalanceController);
        } else if (isValidMapping(luxLevels, brightnessLevelsBacklight) && !isForIdleMode) {
            return new SimpleMappingStrategy(luxLevels, brightnessLevelsBacklight,
                    autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout);
@@ -770,9 +774,11 @@ public abstract class BrightnessMappingStrategy {
        private float mUserLux;
        private float mUserBrightness;
        private final boolean mIsForIdleMode;
        private final DisplayWhiteBalanceController mDisplayWhiteBalanceController;

        public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits,
                float[] brightness, float maxGamma, boolean isForIdleMode) {
                float[] brightness, float maxGamma, boolean isForIdleMode,
                DisplayWhiteBalanceController displayWhiteBalanceController) {

            Preconditions.checkArgument(nits.length != 0 && brightness.length != 0,
                    "Nits and brightness arrays must not be empty!");
@@ -789,6 +795,7 @@ public abstract class BrightnessMappingStrategy {
            mAutoBrightnessAdjustment = 0;
            mUserLux = -1;
            mUserBrightness = -1;
            mDisplayWhiteBalanceController = displayWhiteBalanceController;

            mNits = nits;
            mBrightness = brightness;
@@ -836,6 +843,12 @@ public abstract class BrightnessMappingStrategy {
        public float getBrightness(float lux, String packageName,
                @ApplicationInfo.Category int category) {
            float nits = mBrightnessSpline.interpolate(lux);

            // Adjust nits to compensate for display white balance colour strength.
            if (mDisplayWhiteBalanceController != null && isForIdleMode()) {
                nits = mDisplayWhiteBalanceController.calculateAdjustedBrightnessNits(nits);
            }

            float brightness = mNitsToBrightnessSpline.interpolate(nits);
            // Correct the brightness according to the current application and its category, but
            // only if no user data point is set (as this will override the user setting).
+1 −1
Original line number Diff line number Diff line
@@ -897,7 +897,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                mDisplayDeviceConfig);
        if (isIdleScreenBrightnessEnabled) {
            mIdleModeBrightnessMapper = BrightnessMappingStrategy.createForIdleMode(resources,
                    mDisplayDeviceConfig);
                    mDisplayDeviceConfig, mDisplayWhiteBalanceController);
        }

        if (mInteractiveModeBrightnessMapper != null) {
+2 −1
Original line number Diff line number Diff line
@@ -393,7 +393,8 @@ public class BrightnessMappingStrategyTest {

        // Create an idle mode bms
        // This will fail if it tries to fetch the wrong configuration.
        BrightnessMappingStrategy bms = BrightnessMappingStrategy.createForIdleMode(res, ddc);
        BrightnessMappingStrategy bms = BrightnessMappingStrategy.createForIdleMode(res, ddc,
                null);
        assertNotNull("BrightnessMappingStrategy should not be null", bms);

        // Ensure that the config is the one we set