perfetto使用

背景

  perfetto可以分析很多性能问题。比如查看方法耗时,janky frames等信息。方法耗时这个数据,可就猛了,从framework层到内核层的函数都可以跟踪。还有丰富的数据库,可供查询。甚至可以在整机代码中,自定义想要追踪的某段代码,让它出现在trace的切片当中。
  性能优化之UI相关,可以查看绘制、渲染相关函数时长,trace本身也会总结janky frames等数据
  性能优化之内存相关,可以查看内核有关allocwait、allocstall的函数切片看看
  性能优化之cpu相关,可以查看cpu调度情况和频率波形图
  原理不多说,聚焦于使用。

使用

  1. 抓perfetto的trace
1.抓取指令
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
2、操作想要抓取的场景
3、导出trace文件
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace
  1. 在谷歌perfetto解析网站解析抓到的trace
    进入网站,把trace文件拖进去。perfetto官网
  2. 查看trace

  trace可以查看进程信息和cpu调度

  • 查看进程
    查看进程有2种方式:1、看图形化切片 2、sql语句查询
    1、查看图形化切片
      加载好trace后,会显示很多进程 随着时间各个函数的起始点和结束点,可以通过鼠标放大,查看函数的详细情况。每个函数对应的起始点和结束点,在perfetto就叫做一个切片(slice),数据库中也有对应的table。
    2、sql语句 查看数据
      导出来的trace文件xxx.pftrace。包含了很多数据库table。
      table有slice、thread_track、thread、process等等,更多table可以去perfetto网站看。
      其中slice这个表,有ts(切片开始时的时戳)、dur(切片的持续时间)、name(切片名字)等字段
      示例和讲解:
SELECT *//选择表里所有字段
FROM slice   //查询第1个表slice
JOIN thread_track ON slice.track_id = thread_track.id  //JOIN实现 跨表查询 第2个表thread_track
JOIN thread ON thread_track.utid = thread.utid         //JOIN实现 跨表查询 第3个表thread
JOIN process ON thread.upid = process.upid             //JOIN实现 跨表查询 第4个表process   
WHERE pid=10086 AND slice.name LIKE "%doTraversals%"   //WHERE实现 查询结果中限定条件:process表中pid=10086的进程和slice表中切片名包含doTraversals
  • 查看cpu调度
    trace会显示所有cpu核心的调度情况,以及cpu的频率情况。会按照cpu的编号,比如8核cpu,从cpu0~cpu7显示信息。

链接

perfetto更多table网址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值