一、Perfetto 简介
1. Perfetto 支持多种数据来源,systrace、atrace、sys stat、Heap Profiles、logcat. 也支持动态配置和定制。
2. Perfetto UI 一些常见的表述
(1) slice: 片段,对应一次Java代码中的 Trace.beginSection 或C++代码中的 ATRACE_BEGIN 记录的事件。
(2) track:水平时间线,一个线程会显示为一个track.
(3) counter:计数器,离散的数值统计点,对应一次Java代码中的 Trace.traceCounter 或C++代码中的 ATRACE_INT 记录的事件。如trace上VSYNC-app/VSYNC-sf显示的内容。
(4) tread_state: 线程状态,标识出线程是sleep, running 还是 runnale.
二、UI界面介绍
1. Current Trace 栏
(1) "Show timeline" 跳转到trace解析界面
(2) "Download" 下载trace
(3) "Query(SQL)" 输入查询SQL脚本,Ctrl+Enter触发查询。
(4) "Metrics" 里面实现了多个SQL查询脚本,比如选中 Select a metric: android binder 可以查看各个进程binder行为,比如下面这个进程在整个trace文件中只进行了2次binder reply。
process_breakdown { process_name: "/odm/bin/hw/[email protected]" pid: 1474 slice_name: "binder reply" count: 2 }
(6) "Info and stats" 显示Metric Errors、Import errors 和 System info and metadata 信息。
2. Convert trace 栏
(1) UI界面点击左侧边栏的"Convert to .systrace",可以将perfetto trace转换为可以文本打开的systrace文件。
3. Support 栏
(1) "Keyboard shortcuts" 可以显示支持的快捷键。
(2) "Document" 可以打开帮助文档,Perfetto DOCS:https://perfetto.dev/docs/concepts/buffers
(3) "Flags" 可以查看Perfetto列出的一些性能指标,关注的话可以设置为enable。各个flags其实就是一个个的SQL查询,在打开trace的时候自动解析,比如打开trace时,搜索框中显示的各个"Computing android_setup metric"就是在解析这些SQL性能指标。显示后这些metric控制显示的条目都会靠前显示,且有metric标签标记。比如常用看是哪个app启动的"Android App Startups"就是一个metric,在"Flags"中配置为Disable就看
不到它了。
4. Sample queries 栏
UI界面点击左侧边栏的"Sample queries"可以计算一些统计信息
(1) "Show Debug Track" 选项点击后会在trace解析界面显示一个"Debug Slices"条目,可以向里面插入一些我们感性却的片段。例如可以使用如下面SQL脚本将查出的信息显示在"Debug Slices"条目中。
INSERT INTO debug_slices(id, name, ts, dur, depth) SELECT slice.id, '['||thread.name||']'||slice.name, ts, dur, depth FROM slice JOIN thread_track ON slice.track_id = thread_track.id JOIN thread USING(utid) WHERE slice.name = 'dequeueBuffer' order by slice.dur desc limit 100
将Render线程中的dequeueBuffer信息挑出来显示。
(2) "All Processes" 显示trace上的所有进程。
(3) "CPU Time by processes" 每个进程使用的CPU时间。查询结果只有 name 和 time_sec 两个字段。
(4) "Cycles by p-state by CPU" 各个CPU在每个频点上持续的时间。
(5) "Cycles by p-state by CPU" 每个进程的每个线程在每个CPU上获取的时间,但是秒。选top 30的进行显示。
(6) "Debug SQL performance" 里面有很多SQL模板脚本,可以拷贝出来修改使用。
注:在查询结果标签卡上都有查询SQL脚本,可以基于它们实现自己的SQL查询脚本。
5. Navigation 栏
(1) "Record new trace"可以在UI界面进行抓trace。
"Recording settings" 界面中配置Recording mode和要抓取的时长和buffer大小。
"Probes" 下面记录了各个模块的抓取选项,其中"CPU"下的"Syscalls"需要先使能内核中的ftrace节点,否则即使在UI界面使能了也是抓不到相关trace的。
"Recording command" 界面可以看到上面配置生成的配置文件。可以将配置生成文件的差异部分配置到我们工具里面去。
三、Perfetto功能介绍
1. 当trace文件大小超过600M时会oops解决
超大 perfetto trace 可以使用 trace_processor 加载,下载官方 trace_processor 命令:
curl -LO https://get.perfetto.dev/trace_processor //Windows下输入链接也可以下载 chmod +x ./trace_processor ./trace_processor --full-sort -D xxx.perfetto-trace
刷新 "https://ui.perfetto.dev/#!/" 网址后会提示本地监测到一个9001的tcp端口的服务,已经加载了 xxx.perfetto-trace 文件,这里只要选yes打开即可。
2. 可以将logcat日志信息抓进perfetto trace里面去。前提是抓perfetto日志的时候把logcat日志给打开了。一个UI线程的横向展示的被称为time line,也即是时间线。在perfetto trace中被称为track,一个个横向的显示称为一个个track。查看trace时当前时间线滚动到哪个位置时就
会将对应位置的logcat日志给显示出来。
参考:
Perfetto DOCS:https://perfetto.dev/docs/concepts/buffers //解析后的UI界面点击Document就是它
在命令行上捕获系统跟踪记录:https://developer.android.com/topic/performance/tracing/command-line //这个是 $ python systrace.py ...
标签:ftrace,trace,slice,UI,perfetto,SQL,tracer,Perfetto From: https://www.cnblogs.com/hellokitty2/p/16706229.html