【android睡眠唤醒 二】MTK平台唤醒框架分解

    在文章MTK 唤醒时间分析中分析了内核中的主要的亮屏重要阶段,此篇文章结合上层的log一起来分析下整个系统的亮屏流程。整个流程可以分为如下几个部分:

  (1)power键(home键)产生并上报(在input子系统中已经介绍);

  (2)上层接收到到键值,PowerManagerService执行相关处理;

  (3)PMS更新全局电源状态,并开始唤醒屏幕和背光,并通知各个模块(如图形绘制Keyguard);

  (4)调用surfaceflinger开始执行屏幕的和背光的操作;

  (5)调用到驱动中的late_resume(在MTK 唤醒时间分析中已经介绍);

一、PMS接收键值过程及更新全局状态:

  当PowerMangerService接收到power键值后,会打印出调用的堆栈信息如下:

01-01 20:08:44.042224   981  1162 D PowerManagerService:    |----com.android.server.power.PowerManagerService.wakeUpNoUpdateLocked(PowerManagerService.java:1750)
01-01 20:08:44.042242   981   995 D NetworkPolicy: no need to update restrict data rules for uid 1000
01-01 20:08:44.042271   981  1162 D PowerManagerService:    |----com.android.server.power.PowerManagerService.wakeUpInternal(PowerManagerService.java:1741)
01-01 20:08:44.042282   981   995 D NetworkPolicy: no need to update restrict power rules for uid 1000
01-01 20:08:44.042374   981  1162 D PowerManagerService:    |----com.android.server.power.PowerManagerService.-wrap43(PowerManagerService.java)
01-01 20:08:44.042415   981  1162 D PowerManagerService:    |----com.android.server.power.PowerManagerService$BinderService.wakeUp(PowerManagerService.java:4261)
01-01 20:08:44.042458   981  1162 D PowerManagerService:    |----android.os.PowerManager.wakeUp(PowerManager.java:769)
01-01 20:08:44.042505   981  1162 D PowerManagerService:    |----com.android.server.policy.PhoneWindowManager.wakeUp(PhoneWindowManager.java:7421)
01-01 20:08:44.042548   981  1162 D PowerManagerService:    |----com.android.server.policy.PhoneWindowManager.interceptKeyBeforeQueueing(PhoneWindowManager.java:6874)
01-01 20:08:44.042579   981  1162 D PowerManagerService:    |----com.android.server.wm.InputMonitor.interceptKeyBeforeQueueing(InputMonitor.java:465)
01-01 20:08:44.042609   981  1162 D PowerManagerService:    |----com.android.server.input.InputManagerService.interceptKeyBeforeQueueing(InputManagerService.java:1897)

  从上面的log中可以清晰的看到键值被InputManagerService.java的interceptKeyBeforeQueueing方法接收到:

private WindowManagerCallbacks mWindowManagerCallbacks;    
private int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
    return mWindowManagerCallbacks.interceptKeyBeforeQueueing(event, policyFlags);
}    

  interceptKeyBeforeQueueing会调用到PhoneManagerService(PhoneWindowManager.java)中相同的方法如下:

public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
    case KeyEvent.KEYCODE_V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值