锁屏界面十秒超时
/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