AndroidKK4.4 Power key电量屏幕时button light先亮LCD后亮的卡顿问题分析

一、问题现象

按下Power key点亮屏幕时,很大概率出现先亮button light,然后再亮屏的现象,明显感觉到卡顿。

线索1、快速按下Power key熄灭和唤醒基本不会出现以上问题现象

线索2、长按Power key会同时亮LCD和button light

线索3、插入2G sdcard基本没有出现过以上问题,换成32G的class 10的sdcard之后就很大概率出现以上问题


Platform:MT6732

Android版本:4.4.4KK

BuildType:user

系统软件版本:SWA27+UM

系统RAM:1GB


参考机行为:

1、参考机1的机制是短按也同时亮button light和LCD,无法参考

2、参考机2与当前项目的机制相同,虽然也伴有卡顿,但是没有达到当前项目的程度,没有出现以上现象


二、Power key休眠和唤醒系统时的处理流程

这里仅说明按下Power key之后,Linux kernel态的休眠和唤醒流程。

1、休眠过程主要步骤:

   1) 冻结用户态进程和内核态任务

   2) 调用注册的设备的suspend的回调函数, 顺序是按照注册顺序

   3) 休眠核心设备和使CPU进入休眠态

冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所有进程的上下文. 当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行。

2、唤醒过程的主要步骤

   1) 休眠中的系统被Power key的按键中断唤醒,同时将按键事件放入输入设备的文件缓冲区中

   2) 唤醒的顺序是和休眠的循序相反的,所以系统设备和总线会首先唤醒,使能系统中断,使能休眠时候停止掉的非启动CPU

   3)继续唤醒每个设备,使能虚拟终端

   4)继续来解冻进程和任务,唤醒终端


三、问题初步分析

初步分析结果:

通过分析log以及对应代码逻辑,发现Power key在分发时的状态出现了问题,最终导致处理流程异常。

下一步行动:

因为log中没有足够的信息来确认代码的执行流程,所以需要添加log再进一步确认问题并输出解决方案。

问题原理:

正常情况下:

1Power key只有长按超过500ms才会通知上层点亮button light,其他按下power key的情况都不会点亮button light

2Power key短按经过预处理之后不会传递给上层,同样也不会点亮button light

当前出问题的异常情况:

1、power key 在正常短按的时候通知上层点亮了button light,同时产生了异常的长按事件


四、问题进一步分析

进一步定义问题现象:

插入sdcard的情况下,很大概率出现按下power key会点亮button light然后再亮LCD,给用户的直接感觉就是卡顿一下

进一步的分析结果:

插入sdcard出现问题的情况下:

power key按下到用户空间接收到,花费了超过500ms的时间,导致inputdispatcher认为产生了长按事件,从而走了点亮button light的流程。

不插入sdcard的正常情况下:

power key按下到用户空间接收到,花费200ms左右的时间,inputdispatcher认为是正常短按,不会走点亮button light的流程。

已知的问题原因:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值