锁屏十秒超时,锁屏界面退出动画流程,FLAG_KEEP_SCREEN_ON亮屏

锁屏界面十秒超时
/frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
handleNotObscuredLocked { mUserActivityTimeout = w.mAttrs.userActivityTimeout;}
->

SystemUI
KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS = 10000;
StatusBarWindowController.applyUserActivityTimeout
{
 mLpChanged.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
}
//
RootWindowContainer.performSurfacePlacement
-->RootWindowContainer.performSurfacePlacementNoTrace
->H.SET_USER_ACTIVITY_TIMEOUT
->PowerManagerService.setUserActivityTimeoutOverrideFromWindowManager
-->PowerManagerService.setUserActivityTimeoutOverrideFromWindowManagerInternal{mUserActivityTimeoutOverrideFromWindowManager = timeoutMillis;}
-->PowerManagerService.getScreenOffTimeoutLocked
{
    if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {
        timeout = Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);
    }
   //getScreenOffTimeoutLocked timeout=10000 mUserActivityTimeoutOverrideFromWindowManager=10000 sleepTimeout=-1
   return Math.max(timeout, mMinimumScreenOffTimeoutConfig);
}

Keyguard Exit相关流程

adb shell dumpsys activity log x on
adb shell dumpsys window -d enable a
adb shell dumpsys window -d enable DEBUG_SCREEN_ON
adb shell dumpsys window -d enable DEBUG_KEYGUARD 
adb logcat |grep -Ei "WindowManager|Waking up|keyguardGoingAway|StartKeyguardExitAnimation|screen on|Setting power mode|write_int"

03-24 17:40:05.973  1309  7714 D KeyguardViewMediator: onStartedWakingUp, seq = 1190
03-24 17:40:06.019  1309  1309 D KeyguardViewMediator: keyguardGoingAway
03-24 17:40:06.217   937  2664 I WindowManager: Relayout Window{bfff242 u0 com.xxxx.Launcher/com.android.launcher3.Launcher}: oldVis=4 newVis=0 focusMayChange = true
03-24 17:40:06.302   937  1049 D WindowManager: Starting keyguard exit animation
03-24 17:40:06.302   937  1049 D WindowManager: PWM.startKeyguardExitAnimation
03-24 17:40:06.320  1309  1309 D KeyguardViewMediator: handleStartKeyguardExitAnimation startTime=167302355 fadeoutDuration=0

03-24 17:40:06.352   937  1046 I WindowManager: Waiting for drawn Window{8fd0658 u0 StatusBar}: removed=false visible=true mHasSurface=true drawState=1
03-24 17:40:06.585   937  5600 I WindowManager: Waiting for drawn Window{8fd0658 u0 StatusBar}: removed=false visible=true mHasSurface=true drawState=4

03-24 17:40:06.587   937  5600 D WindowManager: All windows drawn!
03-24 17:40:06.617   937  1046 D WindowManager: finishScreenTurningOn: mAwake=true, mScreenOnEarly=true, mScreenOnFully=false, mKeyguardDrawComplete=true, mWindowManagerDrawComplete=true
03-24 17:40:06.617   937  1046 I WindowManager: Finished screen turning on...
03-24 17:40:06.617   937  1178 I DisplayPowerController: Unblocked screen on after 679 ms


相关trace信息
KeyguardController.keyguardGoingAway{ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "keyguardGoingAway");}
 

//
AppTransitionController.handleAppTransitionReady -->
AppTransition.goodToGo-->
AppTransition.notifyAppTransitionStartingLocked --->
WindowManagerInternal.onAppTransitionStartingLocked
PhoneWindowManager.handleStartTransitionForKeyguardLw -->PhoneWindowManager.startKeyguardExitAnimation ---> KeyguardDelegate.startKeyguardExitAnimation
应用层申请的亮屏
final Window window = mInCallActivity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


/frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
//界面更新layout
applySurfaceChangesTransaction-->
performLayout-->
performLayoutNoTrace{
         // Now perform layout of attached windows, which usually depend on the position of the
         // window they are attached to. XXX does not deal with windows that are attached to windows
         // that are themselves attached.
         forAllWindows(mPerformLayoutAttached, true /* traverseTopToBottom */);
.....         
}

private final Consumer<WindowState> mPerformLayoutAttached = w -> {
                    root.handleNotObscuredLocked(w,
                             mTmpApplySurfaceChangesTransactionState.obscured,
                             mTmpApplySurfaceChangesTransactionState.syswin);
}
/frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
boolean handleNotObscuredLocked(WindowState w, boolean obscured, boolean syswin){
 888          if (w.mHasSurface && canBeSeen) {
889              if ((attrFlags & FLAG_KEEP_SCREEN_ON) != 0) {
890                  mHoldScreen = w.mSession;
891                  mHoldScreenWindow = w;
892              } 
 
 }

-->performSurfacePlacementNoTrace{
    mWmService.setHoldScreenLocked(mHoldScreen);
}

/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
///申请亮屏锁
 mHoldingScreenWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG_WM);
 void setHoldScreenLocked(final Session newHoldScreen) {
        final boolean hold = newHoldScreen != null;
        if (hold && mHoldingScreenOn != newHoldScreen) {
            mHoldingScreenWakeLock.setWorkSource(new WorkSource(newHoldScreen.mUid));
        }
        mHoldingScreenOn = newHoldScreen;

        final boolean state = mHoldingScreenWakeLock.isHeld();
        if (hold != state) {
            if (hold) { 
            ....
             mHoldingScreenWakeLock.acquire();
            }else{
              .....
              mHoldingScreenWakeLock.release();
            
            }
        }
 
 }
///
PowerManager.release--->PowerManagerService.releaseWakeLock-->releaseWakeLockInternal-->removeWakeLockLocked-->applyWakeLockFlagsOnReleaseLocked

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值