最近項目的原因需要抓自定義的一些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出來手工送到網頁上顯示即可
具體靈活配置可以自行查閱官方文檔: