息屏指纹解锁性能优化 TP LCD

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

需求背景

。客户反馈我司的指纹解锁机器冷屏(息屏)解锁下速度太慢,体验很差,而对比机却非常快

。对比发现,我司机器跟市面品牌机的冷屏解锁速度差了不是一个等级, 急待改善.

既然要优化功能,首先要做到理解功能实现原理,如此才能找到性能瓶颈,打开突破点.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值