天天看点

如何简单快捷的查询性能数据

作者:摸鱼IT

Perfetto内有集成了强大的分析功能模块,它内建了SQLite,通过SQL查询可以分析 trace 的各个部分的性能,将数据统一汇总进行对比分析,非常便捷方便。

如何简单快捷的查询性能数据

本文基于 Perfetto 中的常用SQL语句进行讲解,不深入SQL语言本身。

其中,相关文章可以 - 性能分析工具 之 Perfetto基本使用、如何分析手机中CPU的状况

好了,介绍到此为止,进入正文。

如何简单快捷的查询性能数据

UI 展示

在Perfetto 的可视化展示网页:https://ui.perfetto.dev/ 中导入抓取好的trace文件,加载完毕后在侧边栏中 Query (SQL) ,这个位置就是Perfetto 提供的SQL查询的入口。

点击后,可以看到两个部分:

上面的部分就是SQL语句的编辑区。

在下面的部分中,在未输入语句之前会显示这个trace之前的查询SQL语句历史,当新的SQL语句以后,这个部分就会显示查询结果。

如何简单快捷的查询性能数据

演示一个简单的查询方法。

例如,在trace中查询slice上的每个事件的发生时间和时长。

select dur,ts,name from slice


//ts: 展示timestamp 时间戳
//dur: 表示需要询问的事件的时长
//name: 表示查询的对象名
//slice: 表示 trace 上一段时间的事件集合           
如何简单快捷的查询性能数据

SQL基本用法

在Perfetto中使用最多的是条件查询SQL,运行的顺序是:

①from语句 ②where语句 ③select语句。

select <列名1>,<列名2>,<列名3>,...
from <表名>
where 条件           

列举一些常用的条件查找的语法。

为列名设置别名 - as,将表table1中 name列名 修改为“名称”。如下,

select name as '名称'
from table1           

在select选择语句中进行算数计算,将dur列下的时间单位变成秒(将微秒除以10的6次)。

select (dur/1e6),ts,name from slice           

在where条件语句中支持字符串模糊查找,使用关键字:LIKE

_表示任意一个字符;%表示任意字符串。

注:,如果在某个位置不加%,会默认该位置是精确查找,可能造成查找失败。

模糊查找名字大概为doTraversals线程的耗时,如下,

select (dur/1e6) from slice where name like "%doTraversals%"           

示意用例

使用场景:在trace中查找HAL拍照的耗时,并获取平均时间。

select (dur/1e6) from slice where name like "%still%" order by dur desc           
如何简单快捷的查询性能数据

分析语句:通过 %still% 模糊查找到 still capture这个线程的耗时,并且使用order by dur desc 进行降序排列。

,可以在select语句中使用算数计算,使用关键字 avg 即可。

select avg(dur/1e6) from slice where name like "%still%" order by dur desc           
如何简单快捷的查询性能数据

总结

在 Perfetto中使用SQL查询语句,可以高效统计整个trace中所需的数据,提高性能分析的效率。

并且通过SQL语句与python语句结合,通过加载trace,可以实现自动化分析某个固定场景下的性能情况,通过Perfetto、SQL、python结合可以实现自动化分析性能场景,大大提高技术人员的效率,减少不必要的重复分析工作。

更多技术文章,全网首发公众号“摸鱼IT”,希望大家关注、转发、点赞!

继续阅读