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

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

上一篇说到BrightnessController中设置屏幕亮度是通过调用PowerManagerService的setTemporaryScreenBrightnessSettingOverride,那么本篇就从这继续往下分析。
为了对下面的分析有一个总体的认识,我画了一个时序图,以帮助理解。本部分将会分三篇讲述,时序图标红的地方代表当前篇分析的起点。
在这里插入图片描述
首先从PowerManagerService.setTemporaryScreenAutoBrightnessAdjustmentSettingOverride开始:

@Override // Binder call
        public void setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(float adj) {
   
            mContext.enforceCallingOrSelfPermission(
                    android.Manifest.permission.DEVICE_POWER, null);

            final long ident = Binder.clearCallingIdentity();
            try {
   
                setTemporaryScreenAutoBrightnessAdjustmentSettingOverrideInternal(adj);
            } finally {
   
                Binder.restoreCallingIdentity(ident);
            }
        }

继续往下是setTemporaryScreenAutoBrightnessAdjustmentSettingOverrideInternal:

private void setTemporaryScreenAutoBrightnessAdjustmentSettingOverrideInternal(float adj) {
   
        synchronized (mLock) {
   
            // Note: This condition handles NaN because NaN is not equal to any other
            // value, including itself.
            if (mTemporaryScreenAutoBrightnessAdjustmentSettingOverride != adj) {
   
                mTemporaryScreenAutoBrightnessAdjustmentSettingOverride = adj;
                mDirty |= DIRTY_SETTINGS;
                updatePowerStateLocked();
            }
        }
    }

重点是updatePowerStateLocked:

    private void updatePowerStateLocked() {
   
        if (!mSystemReady || mDirty == 0) {
   
            return;
        }
        if (!Thread.holdsLock(mLock)) {
   
            Slog.wtf(TAG, "Power manager lock was not held when calling updatePowerStateLocked");
        }
        Trace.traceBegin(Trace.TRACE_TAG_POWER, "updatePowerState");
        try {
   
            // Phase 0: Basic state updates.
            updateIsPoweredLocked(mDirty);
            updateStayOnLocked(mDirty);
            updateScreenBrightnessBoostLocked(mDirty);

            // Phase 1: Update wakefulness.
            // Loop because the wake lock and user activity computations are influenced
            // by changes in wakefulness.
            final long now = SystemClock.uptimeMillis();
            int dirtyPhase2 = 0;
            for (;;) {
   
                int dirtyPhase1 = mDirty;
                dirtyPhase2 |= dirtyPhase1;
                mDirty = 0;

                updateWakeLockSummaryLocked(dirtyPhase1);
                updateUserActivitySummaryLocked(now, dirtyPhase1);
                
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值