android 使用 perfetto 抓取atrace
最近项目的原因需要抓自定义的一些atrace,发现使用google 自带的systrace python脚本抓出来的log使用chrome已经打不开了。
想着用用比较时髦的perfetto吧,发现无论如何也抓不到自定义的trace了,细看了一下,尼玛perfetto挖的坑也挺深的。
perffeto UI使用起来逻辑大概是这样的:
1、在界面上选取你想录制对应的项目
2、在recording command里边生成对应的perfetto命令脚本
3、点击start recording,网页就会启动adb server帮你自动化录制perfetto trace,然后pull出来到网页上显示
它的坑大概是这样的:
1、由于它是网页上启动自己的adb server,如果你系统上已经启动了其他的adb server,它就傻掉不work了。
2、看起来选择所有的项目都是可以在recording command里边生成对应的perffetto命令脚本的,但是对于Atrace这个选项并不生效。事实上即使你反复开关Atrace这个选项,脚本里边也是岿然不动的。
对于问题1的解决,我这边是由于android studio启动的时候自己会启动一个adb server,所以用perfetto的时候必须把as关闭它才能直接在perfetto ui上录制,不然只能自己手动录制。
对于问题2,查阅了它官方对于atrace的解释之后,才发现把如下这块手工加到脚本里边才行:
data_sources { config { name: "linux.ftrace" ftrace_config { # Enables specific system events tags. atrace_categories: "am" atrace_categories: "pm" # Enables events for a specific app. atrace_apps: "com.google.android.apps.docs" # Enables all events for all apps. atrace_apps: "*" } } }
总之就是使用界面里边生成的脚本,手工加上atrace相关的代码,组合制作一个config.pbtx文件,然后按照如下命令执行抓取trace:
cat config.pbtx | adb shell perfetto -c - --txt -o /data/misc/perfetto-traces/trace.perfetto-trace
然后把
/data/misc/perfetto-traces/trace.perfetto-trace
pull出来手工送到网页上显示即可
具体灵活配置可以自行查阅官方文档: