From 144aac9dfeb4e3f48af874b438a84261202affe1 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Thu, 21 Dec 2017 18:37:41 +0000 Subject: [PATCH] Track brightness changes in nits rather than backlight values. For the moment, the only one that actually knows the true brightness value is the DisplayPowerController, so have that tell the BrightnessTracker directly when brightness changes. Bug: 69405990 Test: atest com.android.server.display.BrightnessTrackerTest atest com.android.server.display.BrightnessMappingStrategyTest Change-Id: Ibf4e501ce2f7b071360bfac501dbbafb3ba55fa5 --- .../display/BrightnessChangeEvent.java | 12 +- .../hardware/display/DisplayManager.java | 7 - .../display/DisplayManagerGlobal.java | 12 -- .../display/DisplayManagerInternal.java | 8 + .../hardware/display/IDisplayManager.aidl | 4 - core/res/res/values/config.xml | 37 ++-- core/res/res/values/symbols.xml | 4 +- .../display/BrightnessMappingStrategy.java | 88 ++++++-- .../server/display/BrightnessTracker.java | 171 ++++++++-------- .../server/display/DisplayManagerService.java | 33 +-- .../display/DisplayPowerController.java | 189 +++++++++--------- .../server/power/PowerManagerService.java | 4 + .../BrightnessMappingStrategyTest.java | 185 +++++++++++------ .../server/display/BrightnessTrackerTest.java | 182 +++++++---------- 14 files changed, 496 insertions(+), 440 deletions(-) diff --git a/core/java/android/hardware/display/BrightnessChangeEvent.java b/core/java/android/hardware/display/BrightnessChangeEvent.java index 3003607e5f725..0a08353cbe4ca 100644 --- a/core/java/android/hardware/display/BrightnessChangeEvent.java +++ b/core/java/android/hardware/display/BrightnessChangeEvent.java @@ -28,7 +28,7 @@ import android.os.Parcelable; */ public final class BrightnessChangeEvent implements Parcelable { /** Brightness in nits */ - public int brightness; + public float brightness; /** Timestamp of the change {@see System.currentTimeMillis()} */ public long timeStamp; @@ -58,7 +58,7 @@ public final class BrightnessChangeEvent implements Parcelable { public int colorTemperature; /** Brightness level before slider adjustment */ - public int lastBrightness; + public float lastBrightness; public BrightnessChangeEvent() { } @@ -78,7 +78,7 @@ public final class BrightnessChangeEvent implements Parcelable { } private BrightnessChangeEvent(Parcel source) { - brightness = source.readInt(); + brightness = source.readFloat(); timeStamp = source.readLong(); packageName = source.readString(); userId = source.readInt(); @@ -87,7 +87,7 @@ public final class BrightnessChangeEvent implements Parcelable { batteryLevel = source.readFloat(); nightMode = source.readBoolean(); colorTemperature = source.readInt(); - lastBrightness = source.readInt(); + lastBrightness = source.readFloat(); } public static final Creator CREATOR = @@ -107,7 +107,7 @@ public final class BrightnessChangeEvent implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(brightness); + dest.writeFloat(brightness); dest.writeLong(timeStamp); dest.writeString(packageName); dest.writeInt(userId); @@ -116,6 +116,6 @@ public final class BrightnessChangeEvent implements Parcelable { dest.writeFloat(batteryLevel); dest.writeBoolean(nightMode); dest.writeInt(colorTemperature); - dest.writeInt(lastBrightness); + dest.writeFloat(lastBrightness); } } diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index 7de667dcaa2b5..97e9b9c2e2f46 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -627,13 +627,6 @@ public final class DisplayManager { return mGlobal.getBrightnessEvents(mContext.getOpPackageName()); } - /** - * @hide STOPSHIP - remove when adaptive brightness accepts curves. - */ - public void setBrightness(int brightness) { - mGlobal.setBrightness(brightness); - } - /** * Sets the global display brightness configuration. * diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index bf4cc1d826a93..cbb5a7de7db8d 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -475,18 +475,6 @@ public final class DisplayManagerGlobal { } } - /** - * Set brightness but don't add a BrightnessChangeEvent - * STOPSHIP remove when adaptive brightness accepts curves. - */ - public void setBrightness(int brightness) { - try { - mDm.setBrightness(brightness); - } catch (RemoteException ex) { - throw ex.rethrowFromSystemServer(); - } - } - /** * Sets the global brightness configuration for a given user. * diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index cd551bd42e0fc..3f6dd2e757edb 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -222,6 +222,11 @@ public abstract class DisplayManagerInternal { // set by the user as opposed to being programmatically controlled by apps. public boolean brightnessSetByUser; + // Set to true if screenBrightness or screenAutoBrightnessAdjustment are being set + // temporarily. This is typically set while the user has their finger on the brightness + // control, before they've selected the final brightness value. + public boolean brightnessIsTemporary; + // If true, enables automatic brightness control. public boolean useAutoBrightness; @@ -280,6 +285,7 @@ public abstract class DisplayManagerInternal { screenAutoBrightnessAdjustment = other.screenAutoBrightnessAdjustment; screenLowPowerBrightnessFactor = other.screenLowPowerBrightnessFactor; brightnessSetByUser = other.brightnessSetByUser; + brightnessIsTemporary = other.brightnessIsTemporary; useAutoBrightness = other.useAutoBrightness; blockScreenOn = other.blockScreenOn; lowPowerMode = other.lowPowerMode; @@ -303,6 +309,7 @@ public abstract class DisplayManagerInternal { && screenLowPowerBrightnessFactor == other.screenLowPowerBrightnessFactor && brightnessSetByUser == other.brightnessSetByUser + && brightnessIsTemporary == other.brightnessIsTemporary && useAutoBrightness == other.useAutoBrightness && blockScreenOn == other.blockScreenOn && lowPowerMode == other.lowPowerMode @@ -324,6 +331,7 @@ public abstract class DisplayManagerInternal { + ", screenAutoBrightnessAdjustment=" + screenAutoBrightnessAdjustment + ", screenLowPowerBrightnessFactor=" + screenLowPowerBrightnessFactor + ", brightnessSetByUser=" + brightnessSetByUser + + ", brightnessIsTemporary=" + brightnessIsTemporary + ", useAutoBrightness=" + useAutoBrightness + ", blockScreenOn=" + blockScreenOn + ", lowPowerMode=" + lowPowerMode diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 8afae6ec90101..61c42e1ab491a 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -87,10 +87,6 @@ interface IDisplayManager { // Requires BRIGHTNESS_SLIDER_USAGE permission. ParceledListSlice getBrightnessEvents(String callingPackage); - // STOPSHIP remove when adaptive brightness code is updated to accept curves. - // Requires BRIGHTNESS_SLIDER_USAGE permission. - void setBrightness(int brightness); - // Sets the global brightness configuration for a given user. Requires // CONFIGURE_DISPLAY_BRIGHTNESS, and INTERACT_ACROSS_USER if the user being configured is not // the same as the calling user. diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index dc791cf68b6b3..fd05bb442247e 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1302,8 +1302,8 @@ If this is defined then: - config_autoBrightnessLcdBacklightValues should not be defined - - config_screenBrightnessMinimumNits must be defined - - config_screenBrightnessMaximumNits must be defined + - config_screenBrightnessNits must be defined + - config_screenBrightnessBacklight must be defined This array should have size one greater than the size of the config_autoBrightnessLevels array. The brightness values must be non-negative and non-decreasing. This must be @@ -1347,28 +1347,23 @@ 200 - - -1.0 + This array should be equal in size to config_screenBrightnessBacklight. --> + + - + + - If this and config_screenBrightnessMinimumNits are set to something non-negative, then the - display's brightness range is assumed to be linear between - (config_screenBrightnessSettingMinimum, config_screenBrightnessMaximumNits) and - (config_screenBrightnessSettingMaximum, config_screenBrightnessMaximumNits). --> - -1.0