-------------------------------------------------------------------------

这篇文章的小目标:了解抓取开机过程systrace的步骤

-------------------------------------------------------------------------

手机开机的过程,涉及的代码很多,如果能用systrace来分析,事半功倍。

首先分解开机各阶段的耗时,方便后续对照。

只需要在events log过滤boot_progress关键字,就可以得出开机各阶段的耗时。

device:/ $ logcat -b events | grep boot_progress
07-17 08:33:00.241 400 400 I boot_progress_start: 4826
11-29 09:53:34.968 400 400 I boot_progress_preload_start: 7577
11-29 09:53:36.154 400 400 I boot_progress_preload_end: 8763
11-29 09:53:36.519 2072 2072 I boot_progress_system_run: 9127
11-29 09:53:37.088 2072 2072 I boot_progress_pms_start: 9697
11-29 09:53:37.238 2072 2072 I boot_progress_pms_system_scan_start: 9847
11-29 09:53:37.402 2072 2072 I boot_progress_pms_data_scan_start: 10011
11-29 09:53:37.430 2072 2072 I boot_progress_pms_scan_end: 10039
11-29 09:53:37.925 2072 2072 I boot_progress_pms_ready: 10533
11-29 09:53:39.394 2072 2072 I boot_progress_ams_ready: 12003
11-29 09:53:41.324 2072 2637 I boot_progress_enable_screen: 13933

在操作抓取systrace之前,不妨先参考 [Android systrace系列] systrace的信息从哪里来,来熟悉systrace log类别的掩码,和ftrace事件的路径。

下面来说明抓取开机systrace的步骤,这里需要编译手机的userdebug版本

1. 全局搜所有rc文件,将所有关闭trace的命令注释,例如这一句 #write /sys/kernel/debug/tracing/instances/wifi/tracing_on 0

修改完rc文件后,编译手机ROM。

技巧:可以编完一次手机ROM之后,只在out文件夹搜rc文件,缩小搜索范围,然后修改重编。

2. 修改build.prop,并push到手机

  2.1 首先提取手机上的build.prop

adb pull /system/build.prop

  2.2 添加属性debug.atrace.tags.enableflags,数值为掩码,使能需要的systrace category。

     掩码可参考源码//android/system/core/libcutils/include/cutils/trace.h中,ATRACE_TAG开头的宏定义。

      debug.atrace.tags.enableflags可以是0x开头的十六进制,也可以用0开头的8进制,或者非0卡开头的十进制。

debug.atrace.tags.enableflags=0xC402A

  2.3 将buid.prop重新push到手机

adb root
adb remount
adb push build.prop /system/

提示:也可以在device.mk添加属性debug.atrace.tags.enableflags,然后编译手机ROM

3. 修改atrace.rc,并push到手机

  3.1 首先提取手机上的atrace.rc

adb pull /system/etc/init/atrace.rc

     在更改buffer权限的下一行,扩大buffer大小 ,以便容纳足够长时间的log

chmod 0666 /sys/kernel/debug/tracing/buffer_size_kb
write /sys/kernel/debug/tracing/buffer_size_kb 51200

  3.2 选择需要抓取的kernel ftrace event。

    可以先关闭所有开关,就是手机目录 /sys/kernel/debug/tracing/events/ 下所有的trace,下面只列举四行作为例子

write /sys/kernel/debug/tracing/events/power/enable 0
write /sys/kernel/debug/tracing/events/sched/enable 0
write /sys/kernel/debug/tracing/events/vmscan/enable 0
write /sys/kernel/debug/tracing/events/block/enable 0

    再打开需要的开关,可以参考atrace.cpp的数组 k_categories

write /sys/kernel/debug/tracing/events/power/cpu_frequency/enable 1
write /sys/kernel/debug/tracing/events/power/idle/enable 1
write /sys/kernel/debug/tracing/events/sched/sched_switch/enable 1
write /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable 1
write /sys/kernel/debug/tracing/events/block/block_rq_issue/enable 1
write /sys/kernel/debug/tracing/events/block/block_rq_complete/enable 1

  3.3 正如第1点所说,atrace.rc中,要注释关闭 trace 的命令,因为开机过程的trace是默认关闭的。

#write /sys/kernel/debug/tracing/tracing_on 0
#write /sys/kernel/tracing/tracing_on 0

  3.4 为了避免开机完成后继续输出 trace 冲掉开机 log,开机完成后停止trace,在atrace.rc的最后面加入下面两行:

    这里注意不要在3.3所说的两行上面加,因为on property会被认为是另一个 action 块的开头

on property:sys.boot_completed=1
write /sys/kernel/debug/tracing/tracing_on 0

  3.5 将 atrace.rc push 到 /system/etc/init/atrace.rc

adb root
adb remount
adb push atrace.rc /system/etc/init/atrace.rc

4. 重启开机,执行adb shell "cat /sys/kernel/debug/tracing/trace" > trace.out

这时可以尝试在 chrome://tracing 点击Load加载 trace.out。

提示:文件太大,或者个别log的不完整,会导致加载失败。

如果加载出错,请继续下面的步骤。

5. (可选步骤)太大的 trace.out 文件,可以以纯文本方式,切割出需要分析的启动阶段,单独保存成part.out,再尝试加载。

6. 因不完整 log 而加载失败的 trace 文件(无论切割过或未切割),可以用 trace2html.py 转化,而不是 systrace.py,因为后者也会发生错误

首先下载catapult,https://github.com/catapult-project/catapult

trace2html.py路径://catapult/tracing/bin/ trace2html.py

转化命令是 trace2html.py trace.out

转载请注明出处:https://www.cnblogs.com/zzcperf/p/14054555.html

[Android systrace系列] 抓取开机过程systrace的更多相关文章

  1. Android测试日志文件抓取与分析

    1.log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb shel ...

  2. android 使用 perfetto 抓取atrace

    最近项目的原因需要抓自定义的一些atrace,发现使用google 自带的systrace python脚本抓出来的log使用chrome已经打不开了. 想着用用比较时髦的perfetto吧,发现无论 ...

  3. android adb命令 抓取系统各种 log

    getLog.bat: adb root adb remount adb wait-for-device adb logcat -v time > C:\log.txt 在Android中不同的 ...

  4. python抓取网页过程

    准备过程 1.抓取网页的过程 准备好http请求(http request)->提交对应的请求->获得返回的响应(http response)->获得网页源码 2.GET还是POST ...

  5. Android Screen Monitor抓取真机屏幕

    今天看到一款有点意思的开源软件“android-screen-monitor”, 简要记录如下: 1 简介 一款同步手机真机屏幕到PC上的软件(屏幕实时抓取,有点小卡) 2 开源地址 http://c ...

  6. Android APP测试的日志文件抓取

         1    log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有: ...

  7. 【android】[转]Android软件测试的日志文件抓取简介

    1    log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb s ...

  8. 抓取Android应用的log

    今天测试软件时,遇到一个bug,因为开发说那边不复现,所以为了更好追踪这个问题,需要抓取复现步骤地log. 在网上查了相关资料,同时结合自己遇到的问题,总结如下. 1. 抓取Android 应用log ...

  9. Nutch学习笔记二——抓取过程简析

    在上篇学习笔记中http://www.cnblogs.com/huligong1234/p/3464371.html 主要记录Nutch安装及简单运行的过程. 笔记中 通过配置抓取地址http://b ...

随机推荐

  1. 快来,我悄悄的给你说几个HashCode的破事。

    这是why技术的第 72 篇原创文章 Hash冲突是怎么回事 在这个文章正式开始之前,先几句话把这个问题说清楚了:我们常说的 Hash 冲突到底是怎么回事? 直接上个图片: 你说你看到这个图片的时候想 ...

  2. 4G工业路由器的信号强度应该怎么保证呢?

    在M2M无线方面,最薄弱的环节是差的间歇性的信号强度.低信号电平导致系统性能差,响应时间慢和可靠性问题.对于系统安装人员和其他4G工业路由器供应商,如何确保最佳的蜂窝信号强度? 检查2G/3G/4G信 ...

  3. RS485转以太网的概述和应用领域

    如今随着物联网技术的不断发展,各种接口更新换代的速度非常的快,RS485转以太网的主要作用就是提供串口转TCP/IP网络接口的功能,它可以将RS232/485/422串口转换成TCP/IP网络接口,实 ...

  4. VM Linux (Centos)联网

    今天新建一个linux突然发现不能上网,然后百度好多都不行,最后还是解决掉了,这是我的配置方法 鼠标左击虚拟机(或者选中之后直接设置),找到设置选项,打开网络适配器,设为NAT模式 然后进入虚拟机,进 ...

  5. python进程间共享数值、字典、列表变量

    ##python进程间共享数值.字典.列表变量 关注公众号"轻松学编程"了解更多. import multiprocessing def worker(num, mgr_dict, ...

  6. Android网络性能监控方案

    阿里云 云原生应用研发平台EMAS 刘宝文(木睿) 背景 移动互联网时代,移动端极大部分业务都需要通过App和Server之间的数据交互来实现,所以大部分App提供的业务功能都需要使用网络请求.如果因 ...

  7. odbc。INI配置

    [ODBC Data Sources] ST = OSCAR ODBC DRIVER [ST] Driver = /opt/ShenTong/odbc/lib/liboscarodbcw.so Ser ...

  8. 力扣 122 买卖股票的最佳时机II

    力扣 122 买卖股票的最佳时机II 思路: 动态规划,表面上是\(O(2^n)\)的搜索空间,实际上该天的选择只与前一天的状态(是否持有股票)有关.从收益的角度来看,确实每一天的不同选择都会产生不同 ...

  9. “谈谈MySQL的基数统计”

    ** 目录 推荐阅读原文链接 一.基数是啥? 二.InnoDB更新基数的时机? 三.基数是估算出来 四.持久化基数 四.如何主动更新基数? Hi,大家好!我是白日梦. 今天我要跟你分享的话题是:&qu ...

  10. 完全卸载node.js

    1.通过控制面板卸载node.js 2.删除安装所在文件夹下的nodejs文件夹[我的是 C:\Program Files\nodejs] 3.删除C:\Users\xxx(自己电脑的名字)下的.np ...