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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章