MTK开机时间慢分析

[DESCRIPTION]
 
 开机时间分析。
 
[SOLUTION] 

(1)若能抓取mobilelog,则可以在APLog_xxxx文件夹中找到bootprof文件。或者直接cat /proc/bootprof

----------------------------------------
0 BOOT PROF (unit:msec)
----------------------------------------
1077 : preloader         // 这里会记录preloader和lk的执行时间,单位为毫秒。
3667 : lk
----------------------------------------
47.188307 : ON
95.973922 : of_init 16992539 ns
124.732076 : ramoops_init 27976001 ns
155.463384 : init_mtk_governor 28810077 ns
208.009307 : arm64_device_init 40170846 ns
245.649461 : pm_sysrq_init 28632231 ns
305.320923 : event_trace_init 25269538 ns
328.487538 : pmic_mt_init 18462461 ns
398.533231 : populate_rootfs 67385539 ns
481.464077 : mtkfb_init 16279692 ns
631.410616 : modem_cd_init 128015693 ns
817.579693 : md_ccif_init 186129616 ns
894.852462 : gf_init 40584231 ns
940.017616 : mt_i2c_init 45137231 ns
1013.895463 : eem_init 23476462 ns
1059.026771 : acc_init 32313847 ns
1116.455540 : gyro_init 57412308 ns
2363.018851 : fpc1022_init 1232834464 ns
2382.414158 : battery_init 18354616 ns
2417.481312 : clk_debug_init 33775692 ns
2450.348466 : mt_soc_snd_init 32818538 ns
2451.768543 : Kernel_init_done
2875.773313 : INIT: on init start
2881.017236 : INIT:Mount_START
3546.686469 : INIT:Mount_END
3550.746930 : start mobicore (on fs)
3553.768623 : start mobicore end (on fs)
3675.040623 : post-fs-data: on modem start
5971.898167 : BOOT_Animation:START             // 这里表明已经进入上层。
6684.275630 : Zygote:Preload Start
7112.275554 : Zygote:Preload Start
8761.911327 : Zygote:Preload 3831 classes in 1319ms
8847.152943 : Zygote:Preload 3831 classes in 1424ms
9055.208867 : Zygote:Preload 342 obtain resources in 206ms
9059.303559 : Zygote:Preload 41 resources in 2ms
9076.121251 : Zygote:Preload 342 obtain resources in 313ms
9081.294482 : Zygote:Preload 41 resources in 3ms
9323.764175 : Zygote:Preload End
9481.360175 : Zygote:Preload End
9550.741483 : Android:SysServerInit_START
10059.694100 : Android:PackageManagerService_Start
10326.429639 : Android:PMS_scan_START
10516.254332 : Android:PMS_scan_data_done:/system/framework
11297.080180 : Android:PMS_scan_data_done:/system/priv-app
12650.057491 : Android:PMS_scan_data_done:/system/app
12736.916952 : Android:PMS_scan_data_done:/system/vendor/operator/app
12768.057183 : Android:PMS_scan_data_done:/system/plugin
12771.374414 : Android:PMS_scan_data_done:/data/app
12780.415645 : Android:PMS_scan_END
12952.868184 : Android:PMS_READY
22793.776438 : Android:SysServerInit_END
24645.384365 : BOOT_Animation:END                     // 这里表示已经开进home界面。
24646.324673 : OFF
----------------------------------------
================ END of FILE ===============

(2) 若不能抓取mobielog,可以直接用uart log抓取,时间的分析可以参考FAQ14851 进入kernel前开机时间分析方法。

1 首先打开相关宏开关,查找耗时长的主要函数。
(1)preloader阶段
在bootable/bootloader/preloader/platform/mt6735/makefile.mak中

# make unmark for PL booting time profiling
#C_OPTION += -DPL_PROFILING 将此处的# 拿掉
(2)LK阶段
在bootable/bootloader/lk/target/$ProjectName/rules.mk中将LK_PROFILING := yes
注意,要确保bootable/bootloader/lk/project/$ProjectName.mk中DEBUG := 2

2 若仍需继续细化子函数的执行时间,请参考下面不同阶段的code仿写
(1)Preloader阶段
参考/bootable/bootloader/preloader/platform/mt6735/src/core/main.c
// 在某个模块执行后调用此接口,得到的值减去之前模块的值,就是此模块执行时间。
BOOTING_TIME_PROFILING_LOG("xxx"); 
(2)LK阶段
参考/bootable/bootloader/lk/platform/mt6735/platform.c的platform_early_init函数
#ifdef LK_PROFILING
time_pmic_init = get_timer(0);
#endif
pmic_init();
#ifdef LK_PROFILING
dprintf(INFO, "[PROFILE] ------- pmic_init takes %d ms -------- \n", (int)get_timer(time_pmic_init));
#endif


你可能感兴趣的:(android,framework)