Merge "Compensate for DWB changes in brightness"

This commit is contained in:
Fiona Campbell
2022-01-26 14:03:19 +00:00
committed by Android (Google) Code Review
3 changed files with 22 additions and 8 deletions

View File

@@ -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).

View File

@@ -897,7 +897,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mDisplayDeviceConfig);
if (isIdleScreenBrightnessEnabled) {
mIdleModeBrightnessMapper = BrightnessMappingStrategy.createForIdleMode(resources,
mDisplayDeviceConfig);
mDisplayDeviceConfig, mDisplayWhiteBalanceController);
}
if (mInteractiveModeBrightnessMapper != null) {

View File

@@ -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