152、平台 Camera 启动速度优化:从 Kernel 加载到 HAL 就绪的每阶段耗时拆解
152、平台 Camera 启动速度优化:从 Kernel 加载到 HAL 就绪的每阶段耗时拆解一、一个让人抓狂的启动卡顿问题去年Q2,我接手了一个中端机型的Camera启动优化项目。客户反馈:冷启动相机,从点击图标到取景画面出现,耗时超过2.5秒。竞品同平台机型只要1.6秒。PM拍桌子说“用户体验差一个量级”。我第一反应是“HAL层初始化太慢”,毕竟这是老生常谈。但抓了systrace一看,傻眼了——从kernel加载camera驱动到HAL就绪,整整占了1.1秒。更诡异的是,其中有个200ms的“黑洞”,systrace上只显示一个“wait_for_sensor_power”的标签,没有任何子节点展开。这个“黑洞”就是典型的驱动层和HAL层之间的同步问题。后来我花了三天,把整个启动链路拆成了五个阶段,逐个打桩计时,才找到根因。今天就把这套拆解方法和优化思路写下来,希望能帮你少走弯路。二、启动链路五阶段拆解我把Camera从kernel加载到HAL就绪的整个过程,按时间顺序切成五个阶段。每个阶段都有独立的计时点,用ftrace或者自定义的trace_marker打桩。阶段1:Kernel驱动加载(0~T1)这个阶段从kernel初始化camera子系统的probe函数开始,到驱动注册完成、设备节点创建完毕结束。关键代码路径在drivers