1.哔哩哔哩学习视频:
Android Perfetto 基础和案例分享_哔哩哔哩_bilibili
2.Perfetto的简单介绍
Perfetto 是一个用于性能检测进而追踪分析的生产级开源工具
Perfetto提供上帝视角,背后需要整个Android系统的知识储备
Perfetto由Google开发,2017开始第一笔提交
Perfetto已经全面取代Systrace工具
Perfetto拥有完整的文档:https://perfetto.dev/docs/
系统开发者使用Perfetto来分析系统性能、CPU调度、响应速度、系统流畅行、内存、耗电问题
Perfetto也被用于性能测试、偶然性性能问题抓取、文件批处理、竞品分析等领域
例如:Perfetto - System profiling, app tracing and trace analysis - Perfetto Tracing Docs,可以看到perfetto提供的框架介绍
3.如何抓Perfetto
3.1 命令行抓取
实际项目中主要是使用命令行抓取最方便,也是大部分开发者使用最多的方式
adb shell atrace -o /sdcard/systrace.trace -z -b 50000 -t 30 am wm view res ss gfx view hal bionic pm sched irq freq idle disk sync binder_driver binder_lock memreclaim dalvik input 50000:缓冲区的大小,单位是消息数。 30:抓取时间,单位是秒。 导出trace adb pull /sdcard/systrace.trace xxx(文件存放路径) 提供android log,如果有root权限可以同步提供kernel log(dmesg) android log:adb shell logcat > logcat.txt kernel log:adb shell dmesg > dmesg.txt 注:在测试过程中,需要同步抓取trace、android log、kernel log(如果有root),同时备注发生问题的时间点。 抓取命令 adb shell perfetto -t 10s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory power -o /data/misc/perfetto-traces/trace_file_.perfetto-trace 10:抓取时间,单位是秒 2.导出trace adb pull /data/misc/perfetto-traces/trace_file_.perfetto-trace D:\Download
3.2 手机界面抓取
路径:设置-》开发者选项-》启动系统跟踪
3.3 网页端抓取
4.Perfetto基本的View介绍
4.1 Slice
表示嵌套、有时间限制的操作。例如一个切片可以覆盖从函数从开始执行到返回的时间段、从网络加载文件所花费的时间。对应代码中的Trace.beginSection/ATRACE_BEGIN记录的事件
例如下图Choreographer#doFrame、animation、traversal都是一个Slice.
上下层多个slice也可以看出嵌套的关系,这种嵌套关系,有点像函数调用栈的关系
4.2 Counter
具有随着时间变化值的事件,例如一个轨迹事件可以记录进程执行期间的瞬时内存使用情况。对应代码中Trace.traceCounter/ATRACE_INT记录的事件
例如鼠标移动过去显示一个数字7
4.3 Scheduler Slices
调度器切片指示哪个线程在何时被调度到哪个CPU上
可以看到基于CPU进行统计,例如上述的大小核
4.4 运行状态
Perfetto上的task都会有CPU state + Slice,分上下两行显示
4.5 Matric
Perfetto 预先通过解析脚本解析出来的信息,主要是定制的,下述是荣耀手机上的定制信息
4.6 实时计算
实时计算并显示结果到UI,例如我们点下CPU state中的running中的critical path,就会显示如下Thread的调用栈信息
5.Expected timeline和ActualTimeline表示App性能
App janks 卡顿分析
例如可以快速看下是否很多红色表述的掉帧