Android亮屏速度分析总结

  

<强>前面聊的

  

最近在调试项目的亮屏速度,我们希望在按下电源键后到亮屏这个时间能达到500 ms以内,在瑞3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。

  

<强>计算按下电源键到亮屏的时间

  

Android唤醒时间统计

  

刚开始的时候,我只在android阶段统计时间,也能看到时间的差异,但是不是最准确的,我统计的时间日志如下

  
  

01-18  09:13:40.992  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 743 ms
  01-18  09:13:45.304  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 757 ms
  01-18  09:13:49.559  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 725 ms
  01-18  09:18:27.461  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 741 ms
  01-18  09:18:32.766  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 743 ms
  01-18  09:18:35.861  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 745 ms
  01-18  09:18:38.345  683年,772年,D  SurfaceControl:, Excessive  delay 拷贝setPowerMode ():, 733 ms

     

内核从电源到亮屏的时间统计

  

后来同事中的精英古总在他的代码上加入了从按下电源键到亮屏的时间,直接通过printk打印,代码如下

        diff - git/司机/gpu/drm/小组/panel-simple。c b/司机/gpu/drm/小组/panel-simple.c   100644年旧模式   100755年新模式   指数17 c3b94 b39662 . . 2   - - -/司机/gpu/drm/小组/panel-simple.c   + + + b/司机/gpu/drm/小组/panel-simple.c   @@ -504、6 + 504,7 @@静态int panel_simple_enable (struct drm_panel *面板)   }   p→启用=true;   + printk (“% s退出\ n”, __func__);   返回0;   }   diff - git/司机/输入/键盘/rk_keys。c b/司机/输入/键盘/rk_keys.c   100644年旧模式   100755年新模式   指数fed5ced . . 537 b599   - - -/司机/输入/键盘/rk_keys.c   + + + b/司机/输入/键盘/rk_keys.c   @@ -134 6 + 134 10 @@静态空keys_timer(无符号长_data)   key_dbg (pdata“% skey (% s):报告事件(% d)状态(% d) \ n”,   按钮→类型==TYPE_ADC & # 63;“adc”:“gpio”,   按钮→desc、按钮→代码按钮→状态);   +如果(比较字符串(“权力”按钮→desc)==0)   + printk (“% skey (% s):报告事件(% d)状态(% d) \ n”,   +按钮→类型==TYPE_ADC & # 63;“adc”:“gpio”,   +按钮→desc、按钮→代码,按钮→状态);   input_event(输入、EV_KEY按钮→代码,按钮→状态);   input_sync(输入);   }      

<强>统计每个驱动的简历函数调用时间

  

上面的时间对我们调试非常有用,然后就需要细分到每个驱动的简历函数执行的时间,用的方法是我之前写过的,大概统计了下TP, LCD,传感器的简历时间,发现TP和LCD占用的时间非常多,然后跟同事一起看了下,同事把TP的简历里面的代码用工作队列实现后速度明显有了提升。

  

然后有很长一段时间不知道干嘛,向打印其他每个驱动的简历时间,一直没找到方法,后面看到一个代码,非常有用。

  

内核/驱动程序/基地/权力/c

        静态孔隙dpm_show_time (ktime_t中开始时间,pm_message_t状态,char *信息)   {   ktime_t中calltime;   u64 usecs64;   int浓缩;   calltime=ktime_get ();   usecs64=ktime_to_ns (ktime_sub (calltime开始时间));   do_div (usecs64 NSEC_PER_USEC);   购买=usecs64;   如果购买==0)   购买=1;   pr_info(“点:% s % s % s % ld后的设备完成。% 03 ld毫秒断开\ n”,   & # 63;信息:“信息& # 63;" ":" ",pm_verb (state.event),   购买/USEC_PER_MSEC浓缩% USEC_PER_MSEC);   }      

这个函数用来打印简历的函数消耗的时间,但是如何去触发打印这个函数呢& # 63;

  
      <李>一定保证设备进入深度睡眠,串口也进入深度睡眠,没有任何打印后。   <李>执行以下命令李   
        回声N比;/sys/模块/printk/参数/console_suspend//使控制台在暂停最后才关闭,这样可以打印出休眠过程完整信息   回声1比;/sys/电力/pm_print_times//使能调试变量      

打印的日志类似下面的

Android亮屏速度分析总结