第37讲 perfetto 自动化之trace processor中的track与event -凯发k8手机登录

本讲是android camera性能分析专题的第37讲,我们介绍perfetto 自动化之trace processor中的track与event。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

perfetto查看所有的表/视图名字

执行如下语句

select name from sqlite_master

示例输出:

perfetto查看所有的表/视图名字

trace processor tracks

可以把perfetto ui显示的一行看作是一个track,包括:

  • thread track
  • process track
  • counter track

比如下图是一个process_track

trace processor tracks

track表的继承关系

track表的继承关系

查询当前trace支持哪些类型的track

select type from track group by type

示例输出:

查询当前trace支持哪些类型的track

trace processor event

可以把trace理解为带时间戳的event的集合,有两种类型的event:

  • slices
  • counters

slices

  • 比如cpu调度slice、android atrace slice等

trace processor event

counters

  • 比如cpu频率、android atrace counter等

trace processor event

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与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

输出:

slice的track type为process_track

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

输出:

slice的track type为process_track

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

输出:

slice的track type为process_track

示例2 – slice的track type为thread_track

step1:根据slice和track表找到’sendrequestsbatch’的track.type为thread_track

slice的track type为thread_track

step2和step3:结合thread_track和thread表找到线程名和线程tid

slice的track type为thread_track

step2和step3也可以用using写成如下的语句:

slice的track type为thread_track

示例3 – counter的track type为process_counter_track

step1:根据counters和track表找到’cam2_frame’的track.type为process_counter_track

counter的track type为process_counter_track

step2和step3:结合process_counter_track和process表找到进程名和进程pid

counter的track type为process_counter_track

step2和step3也可以用using写成如下的语句

counter的track type为process_counter_track

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera性能分析

网站地图