Perfetto
一. 通过System Tracing抓取
1. System Tracing Overview
System Tracing即系统跟踪界面,用户可以通过如下两种方式进入系统跟踪界面:
(1)设置 – 其他设置 – 开发者选项 – 系统跟踪(Realme GT Neo 闪速版);
(2)adb shell am start com.android.traceur/com.android.traceur.MainActivity;
2. System Tracing Options
系统跟踪界面包含以下这些选项,它们与网页版本中的一些选项有着一定的对应关系
(1)录制跟踪记录:开启和关闭trace功能;
(2)跟踪可调试的应用:开启和关闭支持debuggable的应用的自定义trace;
(3)类别:打开特定类别的trace,对应Android apps & svcs中的Atrace userspace annotations,默认为以下几个选项
am:ActivityManagerbinder_driver:Binder Kernel driverdalvik:Dalvik VMfreq:CPU Frequencygfx:Graphicshal:Hardware Modulesidle:CPU Idleinput:Inputpm:Package Managerres:Resource Loadingsched:CPU Schedulingss:System Serverview:View Systemwebview:Webviewwm:Window Manager
(4)恢复默认类别:用户选择自定义的类别,可以重新恢复默认的类别;
(5)每个CPU的缓冲区空间:对应In-memory buffer size有以下4个选项,默认为16384KB;
8192 KB16384 KB32768 KB65536 KB
(6)清除已保存的跟踪记录:清除手机中已保存的trace文件,默认情况下1个月后清除;
(7)长期跟踪:保存长期的trace到设备存储空间,对应Recording Mode中的Long trace,可以设置最大长期跟踪记录大小(默认为10GB)和最大长期跟踪记录时长(默认为30分钟);
(8)显示“快捷设置”图块:可以在快捷设置中生成一个快捷图标;
3. System Tracing Capture
设置好选项之后,点击“录制跟踪记录”即可开始抓取trace,接着开始复现相关场景,执行完操作之后可以点击下拉通知栏中的系统跟踪通知停止录制,系统会自动保存trace到/data/local/traces目录,用户也可以选择分享trace;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOJ36GcM-1632643440519)(D:\Screenshot_2021-09-22-15-21-37-26_92b64b2a7aa6eb3771ed6e18d0029815.jpg)]
将/data/local/traces中保存的trace导到本地,打开https://ui.perfetto.dev/#!/viewer,可以通过以下两种方式打开trace
3.1 Open trace file

3.2 Open with legacy UI

二. 通过网页抓取
https://ui.perfetto.dev/#!/record
1. Recording Mode
Perfetto提供了三种录制模式,给用户提供可视化界面方便从不同维度定制各种选项;
1.1 Stop when full
Stop when full 模式下,Perfetto 工作受buffer size 和Max duration 影响,满足其中任一个条件Perfetto 将会停止;
trace 不会因为被覆盖而导致丢失,但如果trace太多会导致提前终止而无法录制到出问题时的trace;
In-memory buffer size:代表每一个核上可以存储的最大的trace的buffer大小,默认为64MB;
Max duration:代表此次trace抓取的最大时长,默认为10s;
![###### [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xLrv3duk-1632643440523)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922103917192.png)]](https://img-blog.csdnimg.cn/0114afb7e27f4fd7967f5990c365f4ce.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
1.2 Ring buffer
Ring buffer的选项与Stop when full一致,区别在于其只会受到Max duration 的影响,时间到了就停止抓取 Trace,但是 Trace会有被覆盖的风险;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoJfxhxk-1632643440524)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922104043875.png)]](https://img-blog.csdnimg.cn/b8dd64362ff04c4896ee64a8e8d797d4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
1.3 Long trace
Long trace 用于长时间地抓取 Trace,但是由于需要定时将 buffer 中的 Trace 写到文件里面去,所以可能会有 IO 的影响;
Max file size:代表生成 Long Trace 的最大文件大小,默认为100M;
Flush on disk every:代表间隔多长时间将In-memory buffer 中的 trace 写入到文件中。这个数值太大会容易丢 Trace,而太小容易影响IO,默认为2500ms;
System Tracing中Max Duration默认为30m,Max file size默认为10GB;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9YwyBVVY-1632643440525)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922104147792.png)]](https://img-blog.csdnimg.cn/70496690745948fdb6c490a731ebd333.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
2. Recording command
Recording command用于生成录制指令,点击右上角的复制按钮,在 PC 连接手机的情况下,运行这个指令就可以抓取 Trace ;

3. CPU

3.1 Coarse CPU usage counter
通过轻量级的轮询/proc/stat节点,周期性的监控CPU的使用情况;
3.2 Scheduling details
记录每个CPU核上调度任务的详情;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9uHawIw-1632643440526)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922155637565.png)]](https://img-blog.csdnimg.cn/41982ce51f7648368ba30285e59f77c3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
3.3 CPU frequency and idle states
通过ftrace记录CPU频率和idle状态的改变;

3.4 Syscalls
记录进入和退出系统调用的过程,仅能在userdebug和eng版本上生效;
4. GPU
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zHFkid6x-1632643440527)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922112703182.png)]](https://img-blog.csdnimg.cn/953d129c9b7241fa92665cd1bca2f783.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
4.1 GPU frequency
通过ftrace记录GPU的频率;
4.2 GPU memory
记录单个进程或者整个GPU的内存使用情况(仅在Android 12+的版本上可用);
5.Power
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IGnzl5d-1632643440528)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922113718779.png)]](https://img-blog.csdnimg.cn/a129cb08ab724405b0f28fa37ca5746b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
5.1 Battery drain & power rails
记录电池耗电情况;
5.2 Board voltages & frequencies
记录板级传感器电压和频率的改变;
6. Memory

6.1 Native heap profiling
记录Android进程的native堆的分配和回收(仅在Android 10+的版本上可用);
6.2 Java heap dumps
记录Android应用的java对象的分配情况(仅在Android 11+的版本上可用);
6.3 Kernel meminfo
记录/pro/meminfo节点的轮询情况;
6.4 High-frequency memory events
通过ftrace的mm_event,rss_stat和ion events,记录短期高频的内存增长情况(仅在Android Q+的版本上可用);
6.5 Low memory killer
记录LMK事件和OOM评分调整情况;
6.6 Per process stats
定期取样系统中所有进程的信息:包括线程列表,内存计数(包括RSS,swap和/proc/status)和oom_score_adj;
6.7 Virtual memory stats
通过定期轮询/proc/vmstat获取虚拟内存数据,包括统计swap,eviction,compression和pagecache efficiency数据;
7. Android apps & svcs
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-htj2McBO-1632643440529)(C:\Users\qinji\AppData\Roaming\Typora\typora-user-images\image-20210922141424480.png)]](https://img-blog.csdnimg.cn/055878b3299a4208b6f5248295a7a9d6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYnViYmxlYmVu,size_20,color_FFFFFF,t_70,g_se,x_16)
7.1 Atrace userspace annotations
对应System Tracing中的“类别”,打开这个选项之后,可以选择合适的 atrace tag 开启对应的 Trace ;

7.2 Event log
Event log 可以实时记录 Log,然后将 Log 和 Trace 信息一一对应,非常有利于分析问题;

7.3 Frame timeline
Frame timeline记录从surface_flinger获取到的期望的和实际的帧的情况(仅在Android 12+的版本上可用);
8. Chrome
Chrome 主要用于分析 Webview 相关的性能问题;

9. Advanced Settings
Advanced Settings 可以开启 ftrace,主要用于分析内核性能问题;

![[ES6] 01. Intro to ES6 and traceur compiler](https://images0.cnblogs.com/blog/364241/201411/151837353434462.jpg)
















