Go...

当前位置: 首页>>世界杯1998

第37讲 Perfetto 自动化之Trace Processor中的Track与Event

本讲是Android Camera性能分析专题的第37讲,我们介绍Perfetto 自动化之Trace Processor中的Track与Event。

更多资源:

资源

描述

在线课程

极客笔记在线课程

知识星球

星球名称:深入浅出Android Camera 星球ID: 17296815

Wechat

极客笔记圈

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

执行如下语句

SELECT name from sqlite_master

示例输出:

Perfetto查看所有的表/视图名字891×464 78.7 KB

Trace Processor Tracks

可以把Perfetto UI显示的一行看作是一个Track,包括:

Thread Track

Process Track

Counter track

比如下图是一个process_track

Trace Processor Tracks1692×209 116 KB

Track表的继承关系

Track表的继承关系1827×706 57.4 KB

查询当前Trace支持哪些类型的Track

SELECT type from track group by type

示例输出:

Trace Processor Event

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

Slices

Counters

Slices

比如CPU调度Slice、Android Atrace Slice等

Trace Processor Event1183×113 11.7 KB

Counters

比如CPU频率、Android Atrace Counter等

Trace Processor Event1194×66 4.32 KB

Event与Track的关系

Event分为Slice和Counter两种

Slice与Track:slice.track_id与track.id匹配

Counter与counter_track:counter.track_id与counter_track.id匹配

Event与Track的关系1347×386 103 KB

Event和Track表又通过其他表建立的连接:

Event与Track的关系1709×519 110 KB

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_track1370×282 81.9 KB

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_track1275×308 78.9 KB

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_track1439×323 105 KB

示例2 – Slice的Track type为thread_track

Step1:根据Slice和Track表找到’sendRequestsBatch’的track.type为thread_track

Slice的Track type为thread_track1203×232 65 KB

Step2和Step3:结合thread_track和thread表找到线程名和线程tid

Slice的Track type为thread_track1619×278 84.6 KB

Step2和Step3也可以用USING写成如下的语句:

Slice的Track type为thread_track1406×332 102 KB

示例3 – Counter的Track type为process_counter_track

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

Counter的Track type为process_counter_track1135×258 61.8 KB

Step2和Step3:结合process_counter_track和process表找到进程名和进程pid

Counter的Track type为process_counter_track1455×278 95.2 KB

Step2和Step3也可以用USING写成如下的语句

Counter的Track type为process_counter_track1538×350 120 KB