From 4eaafe399ec54380bc2898a9c3f994e180c16e54 Mon Sep 17 00:00:00 2001 From: Fiona Campbell Date: Wed, 5 May 2021 14:24:25 +0100 Subject: [PATCH] Send -1.0 when brightness is off Brightness was being sent as 0(MIN) previously, we want -1.0(OFF) to be sent to the display. Bug: 185853190 Bug: 184908496 Test: manual Change-Id: I14cff1a769e769fff1fa6e90ef0177c3b8518ba4 --- .../server/display/DisplayDeviceConfig.java | 11 ++--- .../server/display/LocalDisplayAdapter.java | 47 ++++++++++--------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index d865dfbf47755..0f9e604651e85 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -74,6 +74,8 @@ public class DisplayDeviceConfig { // so -2 is used instead private static final float INVALID_BRIGHTNESS_IN_CONFIG = -2f; + private static final float NITS_INVALID = -1; + private final Context mContext; // The details of the ambient light sensor associated with this display. @@ -230,7 +232,7 @@ public class DisplayDeviceConfig { public float getNitsFromBacklight(float backlight) { if (mBacklightToNitsSpline == null) { Slog.wtf(TAG, "requesting nits when no mapping exists."); - return -1; + return NITS_INVALID; } backlight = Math.max(backlight, mBacklightMinimum); return mBacklightToNitsSpline.interpolate(backlight); @@ -279,13 +281,6 @@ public class DisplayDeviceConfig { return mProximitySensor; } - /** - * @return true if a nits to backlight mapping is defined in this config, false otherwise. - */ - public boolean hasNitsMapping() { - return mBacklightToNitsSpline != null; - } - /** * @param quirkValue The quirk to test. * @return {@code true} if the specified quirk is present in this configuration, diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index ec9bbf0e6db6e..2f17481f74876 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -67,8 +67,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { private static final int NO_DISPLAY_MODE_ID = 0; - private static final float NITS_INVALID = -1; - private final LongSparseArray mDevices = new LongSparseArray<>(); private final Injector mInjector; @@ -770,48 +768,51 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } - private void setDisplayBrightness(float brightness, float sdrBrightness) { - // Ensure brightnessState is valid before processing and sending to - // surface control - if (Float.isNaN(brightness)) { + private void setDisplayBrightness(float brightnessState, + float sdrBrightnessState) { + // brightnessState includes invalid, off and full range. + if (Float.isNaN(brightnessState) || Float.isNaN(sdrBrightnessState)) { return; } if (DEBUG) { Slog.d(TAG, "setDisplayBrightness(" + "id=" + physicalDisplayId - + ", brightness=" + brightness - + ", sdrBrightness=" + sdrBrightness + ")"); + + ", brightnessState=" + brightnessState + + ", sdrBrightnessState=" + sdrBrightnessState + ")"); } Trace.traceBegin(Trace.TRACE_TAG_POWER, "setDisplayBrightness(" - + "id=" + physicalDisplayId + ", brightness=" + brightness - + ", sdrBrightness=" + sdrBrightness + ")"); + + "id=" + physicalDisplayId + ", brightnessState=" + + brightnessState + ", sdrBrightnessState=" + sdrBrightnessState + + ")"); try { - final float backlight = brightnessToBacklight(brightness); - float nits = NITS_INVALID; - float sdrBacklight = PowerManager.BRIGHTNESS_INVALID_FLOAT; - float sdrNits = NITS_INVALID; - if (getDisplayDeviceConfig().hasNitsMapping() - && sdrBrightness != PowerManager.BRIGHTNESS_INVALID_FLOAT) { - nits = backlightToNits(backlight); - sdrBacklight = brightnessToBacklight(sdrBrightness); - sdrNits = backlightToNits(sdrBacklight); - } + final float backlight = brightnessToBacklight(brightnessState); + final float sdrBacklight = brightnessToBacklight(sdrBrightnessState); + + final float nits = backlightToNits(backlight); + final float sdrNits = backlightToNits(sdrBacklight); + mBacklightAdapter.setBacklight(sdrBacklight, sdrNits, backlight, nits); Trace.traceCounter(Trace.TRACE_TAG_POWER, "ScreenBrightness", - BrightnessSynchronizer.brightnessFloatToInt(brightness)); + BrightnessSynchronizer.brightnessFloatToInt(brightnessState)); Trace.traceCounter(Trace.TRACE_TAG_POWER, "SdrScreenBrightness", - BrightnessSynchronizer.brightnessFloatToInt(sdrBrightness)); + BrightnessSynchronizer.brightnessFloatToInt( + sdrBrightnessState)); } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } } private float brightnessToBacklight(float brightness) { - return getDisplayDeviceConfig().getBacklightFromBrightness(brightness); + if (BrightnessSynchronizer.floatEquals( + brightness, PowerManager.BRIGHTNESS_OFF_FLOAT)) { + return PowerManager.BRIGHTNESS_OFF_FLOAT; + } else { + return getDisplayDeviceConfig().getBacklightFromBrightness(brightness); + } } private float backlightToNits(float backlight) {