本讲是android camera性能分析专题的第37讲,我们介绍perfetto 自动化之trace processor中的track与event。
更多资源:
资源 | 描述 |
---|---|
在线课程 | |
知识星球 | 星球名称:深入浅出android camera 星球id: 17296815 |
极客笔记圈 |
perfetto查看所有的表/视图名字
执行如下语句
select name from sqlite_master
示例输出:
trace processor tracks
可以把perfetto ui显示的一行看作是一个track,包括:
- thread track
- process track
- counter track
- …
比如下图是一个process_track
track表的继承关系
查询当前trace支持哪些类型的track
select type from track group by type
示例输出:
trace processor event
可以把trace理解为带时间戳的event的集合,有两种类型的event:
- slices
- counters
slices
- 比如cpu调度slice、android atrace slice等
counters
- 比如cpu频率、android atrace counter等
event与track的关系
event分为slice和counter两种
- slice与track:slice.track_id与track.id匹配
- counter与counter_track:counter.track_id与counter_track.id匹配
event和track表又通过其他表建立的连接:
event与track的关系实战
查看某个event所在的进程/线程名:
步骤
- step1: 确定该event的track type
- step2: 根据track type去thread_track或process_track里找到utid/upid
- step3: 根据utid/upid到thread/process里面去找到name
示例1 – slice的track type为process_track
step1: 根据slice和track表找到’frame capture’的track.type为process_track
select track.id, track.type
from slice
join track on track.id = slice.track_id
where slice.name = 'frame capture' group by track.type
输出:
step2和step3:结合process_track和process表找到进程名和进程pid
select process.pid, process.name
from process
join process_track on process_track.upid = process.upid
where process_tack.id = 54
输出:
step2和step3也可以用using语句写成(当两个要关联表的字段名是一样的,我们可以使用 using, 可减少 sql 语句的长度,join using简化了join on)
select process.pid, process.name
from slice
join process_track on slice.track_id = process_track.id
join process using(upid)
where slice.name = 'frame capture'
group by process.name
输出:
示例2 – slice的track type为thread_track
step1:根据slice和track表找到’sendrequestsbatch’的track.type为thread_track
step2和step3:结合thread_track和thread表找到线程名和线程tid
step2和step3也可以用using写成如下的语句:
示例3 – counter的track type为process_counter_track
step1:根据counters和track表找到’cam2_frame’的track.type为process_counter_track
step2和step3:结合process_counter_track和process表找到进程名和进程pid
step2和step3也可以用using写成如下的语句