PowerManagerService笔记

1、updatePowerStateLocked() 

    private void updatePowerStateLocked() {
        if (!mSystemReady || mDirty == 0) {         //power state都会更新到mDirty中;
            return;
        }
        if (!Thread.holdsLock(mLock)) {
            Slog.wtf(TAG, "Power manager lock was not held when calling updatePowerStateLocked");
        }


        // Phase 0: Basic state updates.
        updateIsPoweredLocked(mDirty);        //更新mIsPowered变量;
        updateStayOnLocked(mDirty);           //更新mStayOn变量;


        // 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);          //更新mWakeLockSummary变量;
            updateUserActivitySummaryLocked(now, dirtyPhase1);     //更新mUserActivitySummary变量;
            if (!updateWakefulnessLocked(dirtyPhase1)) {
                break;
            }
        }


        // Phase 2: Update dreams and display power state.
        updateDreamLocked(dirtyPhase2);
        updateDisplayPowerStateLocked(dirtyPhase2);


        // Phase 3: Send notifications, if needed.
        if (mDisplayReady) {
            sendPendingNotificationsLocked();
        }


        // Phase 4: Update suspend blocker.
        // Because we might release the last suspend blocker here, we need to make sure
        // we finished everything else first!
        updateSuspendBlockerLocked();
    }

mDirty在以下三个逻辑中设置DIRTY_WAKE_LOCKS标志位:

a).acquireWakeLockInternal()

b).releaseWakeLockInternal()

c).handleWakeLockDeath()

该标志位置1时表示mWakeLocks列表有更新,WakeLock.mFlags取值有:PARTIAL_WAKE_LOCK、FULL_WAKE_LOCK、SCREEN_BRIGHT_WAKE_LOCK、SCREEN_DIM_WAKE_LOCK、PROXIMITY_SCREEN_OFF_WAKE_LOCK


mDirty在以下几个逻辑中设置DIRTY_WAKEFULNESS标志位:

a).wakeUpNoUpdateLocked()

b).goToSleepNoUpdateLocked()

c).napNoUpdateLocked()

d).handleSandman()

该标志位置1表示mWakefulness值有更新,mWakefulness取值有:WAKEFULNESS_ASLEEP、WAKEFULNESS_AWAKE、WAKEFULNESS_NAPPING、WAKEFULNESS_DREAMING


上述WakeLock.mFlags和mWakefulness的值会综合起来影响mWakeLockSummary变量值,mWakeLockSummary取值有:WAKE_LOCK_CPU、WAKE_LOCK_SCREEN_BRIGHT、WAKE_LOCK_SCREEN_DIM、WAKE_LOCK_BUTTON_BRIGHT、WAKE_LOCK_PROXIMITY_SCREEN_OFF、WAKE_LOCK_STAY_AWAKE


mWakeLockSummary的使用:

isBeingKeptAwakeLocked()

getDesiredScreenPowerStateLocked()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值