需求背景
。客户反馈我司的指纹解锁机器冷屏(息屏)解锁下速度太慢,体验很差,而对比机却非常快
。对比发现,我司机器跟市面品牌机的冷屏解锁速度差了不是一个等级, 急待改善.
既然要优化功能,首先要做到理解功能实现原理,如此才能找到性能瓶颈,打开突破点.
1、解锁流程
Google默认的冷屏指纹解锁基本框架流程如下:

(1)指纹IC检测到手指触摸模组,HW触发irq,被Linux kernel接收到;
(2)fingerprintd守护进程接到kernel上报的irq后调用TZ的系统调用接口发起指纹数据采图、比对auth请求;
(3)指纹数据auth比对成功,从TZ返回kernel再返回fingerprintd,此处耗费约180-260ms;
(4)fingerpritnd接到auth成功消息,binder回调FingerprintService对象onAuthenticated接口;
(5)auth success结果回调到keyguard,准备wakeup system;
(6)keyguard调用PowerManager.wakeUp() 唤醒系统,耗费约350+200 ms
(7)Wakeup completed,keyguard调用keyguardDone解锁完成后,耗费约200-300ms
(8)解锁完成,调用系统接口点亮背光,此刻完成整个解锁全过程。
从以上流程可以看出,整个息屏解锁流程的大部分时间集中在三个过程:指纹运算比对、系统和外设wakeup、解锁绘图,这三块时间之和即为
整个解锁流程完成的理论时间之和约:900 ~1100 ms
2、影响耗时因素
从上面的流程看到几个信息:wakeup、authenticated、keyguard unlock属于最耗时的三个部分,而且是串行执行的,下面分别分析这几个部分是否有改善空间.
2.1 Sys wakeup
指纹比对成功后keyguard进程会通过PowerManagerService的wakeup()接口执行唤醒系统的操作,该函数最耗时部分在于底层驱动设备的resume过程,其中占比重最大的属LCD,TP的resume,所以此处属于重点优化部分内容。另外,系统要显示数据,肯定要等LCD resume完成才可以,这个可以理解,但是为什么TP 的resume会影响到系统亮屏呢?这个原因其实可以从代码中找到,后面源码分析将会介绍,TP resume的动作是放在fb unblank的线程中的,而且会发现系统要亮屏其实是可以不等TP resume的。
2.2 指纹运算比对
fingerprintd收到指纹IRQ后,会通过系统调用接口向Trustzoon端的指纹TA(trust app)发起指纹图像采集、模板对比操作,而这个耗时业内标准是200ms左右,这块各个方案供应商表现差别不大,此部分的优化完全依靠方案提供商。
2.3 解锁绘制
现有的方案是要等执行解锁动作完成后再去点亮背光,如果不等解锁完成就去点亮背光会看到解锁退去的动画闪动,用户体验不佳。这部分的耗时比较多,从log看至 200-300 ms的delay,属于重点优化部分。若能解决解锁时候不出现“动画退去的闪动”也是个不错的方法。
3、竞品分析
既然对比机比我们的速度快这么多,抛开客观条件(CPU,flash读写速度等),还是可以认真的研究一番,看看优秀的产品是怎么去做的,我们可以尝试参考优秀做的实现方式用到我们的产品上,师夷长技以制夷,下面简单描述下两款对比机的分析过程.
3.1 某品牌机1
老实说,要不是因为这个分析我还真没听过这个牌子的手机,不过人家的冷屏解锁做的如此之快,确实很不错,很值得我们研究学习一番。经过log分析,机器代码逆向发现,该机器不走寻常路,简单来说就是:
。收到指纹中断后就另外开线程直接去wakup系统,而不是等指纹auth success再去做,这样做的好处就是wakeup系统跟auth同时进行,由原来串行改为并行,重叠部分的时间就相当于省下了.
。系统休眠的时候先自动上锁,然后再将keyguard锁解掉!这样系统灭屏的时候相当于没有上锁状态,指纹冷屏解锁就相当于只有wakeup 、指纹auth,点亮背光的操作了,没有keyguard unlock的操作,这样keyguard unlock的200-300ms直接为0 了!一想这样明显会有问题啊,息屏了没上锁,我按power键类似的亮屏不是不用解锁就进入系统了么?对没错,所以需要把这些地方堵住,在非指纹冷屏解锁亮屏的条件下亮屏会先去给keyguard上锁再亮屏,这样非指纹冷屏解锁的亮屏就一样会看到keyguard锁。
收到指纹中断:
08-30 10:09:20.251 2054 6017 D btl_algo: -- btl_api_waitSignal 08-30 10:09:20.251 2054 6017 D btl_algo: Finger is pressed 08-30 10:09:20.251 205

本文深入解析指纹解锁慢的问题,提出并实现了一系列优化方案,包括调整唤醒策略、改进背光控制和隐藏keyguard,最终使息屏指纹解锁速度提升了一倍。
最低0.47元/天 解锁文章
628

被折叠的 条评论
为什么被折叠?



