DisplayPowerController.updatePowerstate--- >
DisplayPowerController.animateScreenBrightness -->
RampAnimator.animateTo -->
///
DisplayPowerState.setScreenBrightness{
mScreenBrightness = brightness;
}
--->DisplayPowerState.setScreenState{
mScreenState = state;
}
...
-->DisplayPowerState.mScreenUpdateRunnable.run{
int brightness = mScreenState != Display.STATE_OFF && mColorFadeLevel > 0f ? mScreenBrightness : 0;
//创建PhotonicModulator线程设值state和brightness
DisplayPowerState.mPhotonicModulator.setState(int state, int backlight);
DisplayPowerState.PhotonicModulator.run{
mBlanker.requestDisplayState(state, backlight);
}
}
...
////DisplayBlacnker为一个接口类,且只有一个requestDisplayState接口方法
--->Interface DisplayBlacnker.requestDisplayState{
...
}
/////DisplayManagerService的内部类LocalService继承自DisplayManagerInternal类,其中实现了initPowerManagement方法,在该方法中又实例化了 new DisplayBlanker()
///最终实现了requestDisplayState方法,在其中设置state和brightness
-->DisplayManagerService.LocalService.initPowerManagement.requestDisplayState{
if (state == Display.STATE_OFF) {
requestGlobalDisplayStateInternal(state, brightness);
}
callbacks.onDisplayStateChange(state);
if (state != Display.STATE_OFF) {
requestGlobalDisplayStateInternal(state, brightness);
}
}
-->
DisplayManagerService.requestGlobalDisplayStateInternal{
mGlobalDisplayState = state;
mGlobalDisplayBrightness = brightness;
}
///DisplayDevice 是一个抽象类,将requestGlobalDisplayStateInternal获取的屏幕状态mGlobalDisplayState和屏幕亮度mGlobalDisplayBrightness 传入requestDisplayStateLocked
///DisplayDevice是一个抽象类
DisplayManagerService.updateDisplayStateLocked(DisplayDevice device){
...
return device.requestDisplayStateLocked(mGlobalDisplayState, mGlobalDisplayBrightness);
...
}
--->//而LocalDisplayAdapter的内部类 LocalDisplayDevice 继承了DisplayDevice,实现requestDisplayStateLocked方法在其中设置状态和亮度
LocalDisplayAdapter.LocalDisplayDevice.requestDisplayStateLocked{
....
if (brightnessChanged || vrModeChange) {
//设置亮度
setDisplayBrightness(brightness);
}
// Enter the final desired state, possibly suspended.
if (state != currentState) {
//设置Power state
setDisplayState(state);
}
....
}
final int screenBrightnessSettingMinimum = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingMinimum));
1.///屏幕的最低亮度值,Systemui和设置的最低亮度都是基于这个值生效的,原生默认为10,具体项目客制化一般为2
mScreenBrightnessDozeConfig = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessDoze));
2.///Doze模式下的默认亮度值,系统原生默认为1,具体项目客制化一般为50-60
mScreenBrightnessDimConfig = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessDim));
3.////屏幕处于dim状态的亮度值,系统原生默认为10,即从ON状态进入OFF的半暗过渡状态的值,
mScreenBrightnessRangeMinimum =
Math.min(screenBrightnessSettingMinimum, mScreenBrightnessDimConfig);
1027 if (mPowerRequest.policy == DisplayPowerRequest.POLICY_DIM) {
1028 if (brightness > mScreenBrightnessRangeMinimum) {
1029 brightness = Math.max(Math.min(brightness - SCREEN_DIM_MINIMUM_REDUCTION,
1030 mScreenBrightnessDimConfig), mScreenBrightnessRangeMinimum);
1032 }
SCREEN_DIM_MINIMUM_REDUCTION定义的值为10
4.////用于计算dim的该有的亮度值,以客制化screenBrightnessSettingMinimum 为2为例 mScreenBrightnessRangeMinimum区间 (2,10)即2,如果屏幕亮度小于等于2,则dim的亮度为即为屏幕亮度
如果屏幕亮度大于mScreenBrightnessRangeMinimum的值2,分如下几种情况:
1.屏幕背光范围为(2,12],则brightness值为背光值为2
2.屏幕背光范围为(12,20],则brightness值为背光值为屏幕亮度值减去10,如背光亮度为15,则dim亮度为5
3.屏幕背光范围为(20,255],则brightness值为背光值一直为10,即最大dim亮度为10
mScreenBrightnessRangeMaximum = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingMaximum));
5.///系统的最大亮度,原生默认为255
mScreenBrightnessDefault = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingDefault));
6.//系统配置的默认亮度值,原生默认102
mScreenBrightnessForVrRangeMinimum = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessForVrSettingMinimum));
7.///VR模式的最小亮度
mScreenBrightnessForVrRangeMaximum = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessForVrSettingMaximum));
8. //VR模式的最大亮度
mScreenBrightnessForVrDefault = clampAbsoluteBrightness(resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessForVrSettingDefault));
mUseSoftwareAutoBrightnessConfig = resources.getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available);
9.///自动背光默认开关,原生默认为false
mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean(
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing);
10.///是否允许DOZE模式下的自动背光,原生为false
mBrightnessRampRateFast = resources.getInteger(
com.android.internal.R.integer.config_brightness_ramp_rate_fast);
11 ////系统默认配置为180
//amount=2.9365253 timeDelta=0.01631403 mRate=180 scale=1.0
// rate=180快速,亮度值是每次+2.9365253增长即+3,间隔0.01631403秒即16毫秒
mBrightnessRampRateSlow = resources.getInteger(
com.android.internal.R.integer.config_brightness_ramp_rate_slow);
12.//系统默认配置为60
/// amount=0.9810946 timeDelta=0.016351577 mRate=60 scale=1.0
// rate=60为慢速,亮度值是每次+0.9810946增长即+1,间隔0.016351577秒即16毫秒
mSkipScreenOnBrightnessRamp = resources.getBoolean(
com.android.internal.R.bool.config_skipScreenOnBrightnessRamp);
////自动背光调节相关的变量
final float dozeScaleFactor = resources.getFraction(
com.android.internal.R.fraction.config_screenAutoBrightnessDozeScaleFactor,
1, 1);
int[] ambientBrighteningThresholds = resources.getIntArray(
com.android.internal.R.array.config_ambientBrighteningThresholds);
int[] ambientDarkeningThresholds = resources.getIntArray(
com.android.internal.R.array.config_ambientDarkeningThresholds);
int[] ambientThresholdLevels = resources.getIntArray(
com.android.internal.R.array.config_ambientThresholdLevels);
HysteresisLevels ambientBrightnessThresholds = new HysteresisLevels(
ambientBrighteningThresholds, ambientDarkeningThresholds,
ambientThresholdLevels);
int[] screenBrighteningThresholds = resources.getIntArray(
com.android.internal.R.array.config_screenBrighteningThresholds);
int[] screenDarkeningThresholds = resources.getIntArray(
com.android.internal.R.array.config_screenDarkeningThresholds);
int[] screenThresholdLevels = resources.getIntArray(
com.android.internal.R.array.config_screenThresholdLevels);
///Q版本默认为4000,亮环境下去抖时间,通过修改这个值可以改变自动背光的调节时间
long brighteningLightDebounce = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessBrighteningLightDebounce);
//Q版本默认为8000,暗环境下去抖时间,通过修改这个值可以改变自动背光的调节时间
long darkeningLightDebounce = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessDarkeningLightDebounce);
///该值默认为true
boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
com.android.internal.R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);
//该值为默认为0
int lightSensorWarmUpTimeConfig = resources.getInteger(
com.android.internal.R.integer.config_lightSensorWarmupTime);
///光感采样速率,该值为250
int lightSensorRate = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessLightSensorRate);
///初始化光感速度该值为-1
int initialLightSensorRate = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessInitialLightSensorRate);
int shortTermModelTimeout = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessShortTermModelTimeout);
String lightSensorType = resources.getString(
com.android.internal.R.string.config_displayLightSensorType);
Sensor lightSensor = findDisplayLightSensor(lightSensorType);