Display brightness和state设置

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 <!-- Fast brightness animation ramp rate in brightness units per second-->
//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 <!-- Slow brightness animation ramp rate in brightness units per second-->
/// 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);

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值