Android 7.1 亮度调节完整流程分析(二)

Android 7.1 亮度调节完整流程分析(二)

上一篇追踪到DisplayPowerController.updatePowerState,即下图中第8步的位置:
在这里插入图片描述本篇就从updatePowerState继续分析。这个函数非常地长,我们主要追踪一下亮度值的传递:

synchronized (mLock) {
   
            mPendingUpdatePowerStateLocked = false;
            if (mPendingRequestLocked == null) {
   
                return; // wait until first actual power request
            }

            if (mPowerRequest == null) {
   
                mPowerRequest = new DisplayPowerRequest(mPendingRequestLocked);//1
                mWaitingForNegativeProximity = mPendingWaitForNegativeProximityLocked;
                mPendingWaitForNegativeProximityLocked = false;
                mPendingRequestChangedLocked = false;
                mustInitialize = true;
            } else if (mPendingRequestChangedLocked) {
   
                autoBrightnessAdjustmentChanged = (mPowerRequest.screenAutoBrightnessAdjustment
                        != mPendingRequestLocked.screenAutoBrightnessAdjustment);
                mPowerRequest.copyFrom(mPendingRequestLocked);//2
                mWaitingForNegativeProximity |= mPendingWaitForNegativeProximityLocked;
                mPendingWaitForNegativeProximityLocked = false;
                mPendingRequestChangedLocked = false;
                mDisplayReadyLocked = false;
            }

            mustNotify = !mDisplayReadyLocked;
        }

不论是mPowerRequest 为空还是mPendingRequestChangedLocked, 都是将mPendingRequestLocked传递给mPowerRequest。
接下来是一系列针对各种情况对brightness的处理,我们要分析的情况是:

        // Apply manual brightness.
        // Use the current brightness setting from the request, which is expected
        // provide a nominal default value for the case where auto-brightness
        // is not ready yet.
        if (brightness < 0) {
   
            brightness = clampScreenBrightness(mPowerRequest.screenBrightness);
        }

下面是设置亮度的地方:

// Animate the screen brightness when the screen is on or dozing.
        // Skip the animation when the screen is off or suspended or transition to/from VR.
        if (!mPendingScreenOff) {
   
            boolean wasOrWillBeInVr = (state == Display.STATE_VR || oldState == Display.STATE_VR);
            if ((state == Display.STATE_ON || state == Display.STATE_DOZE) && !wasOrWillBeInVr) {
   
                animateScreenBrightness(brightness,
                        slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
            } else {
   
                animateScreenBrightness(brightness, 0);
            }
        }

看一下animateScreenBrightness:

private void animateScreenBrightness(int target, int rate) {
   
        if (DEBUG) {
   
            Slog.d(TAG, "Animating brightness: target=" + target +", rate=" + rate);
        }
        if (mScreenBrightnessRampAnimator.animateTo(target, rate)) {
   //1
            try {
   
                mBatteryStats.noteScreenBrightness(target);
            } catch (RemoteException ex) {
   
                // same process
            }
        }
    }

看一下标记1处的mScreenBrightnessRampAnimator是什么,在DisplayPowerController的initialize中:

private void initialize() {
   
        ...以上省略
        mScreenBrightnessRampAnimator = new RampAnimator<DisplayPowerState>(
                mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值