Android性能优化之Perfetto

Posted bubbleben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android性能优化之Perfetto相关的知识,希望对你有一定的参考价值。

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:ActivityManager

binder_driver:Binder Kernel driver

dalvik:Dalvik VM

freq:CPU Frequency

gfx:Graphics

hal:Hardware Modules

idle:CPU Idle

input:Input

pm:Package Manager

res:Resource Loading

sched:CPU Scheduling

ss:System Server

view:View System

webview:Webview

wm:Window Manager

(4)恢复默认类别:用户选择自定义的类别,可以重新恢复默认的类别;

(5)每个CPU的缓冲区空间:对应In-memory buffer size有以下4个选项,默认为16384KB

8192 KB

16384 KB

32768 KB

65536 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 sizeMax duration 影响,满足其中任一个条件Perfetto 将会停止;

trace 不会因为被覆盖而导致丢失,但如果trace太多会导致提前终止而无法录制到出问题时的trace

In-memory buffer size:代表每一个核上可以存储的最大的tracebuffer大小,默认为64MB;

Max duration:代表此次trace抓取的最大时长,默认为10s

1.2 Ring buffer

Ring buffer的选项与Stop when full一致,区别在于其只会受到Max duration 的影响,时间到了就停止抓取 Trace,但是 Trace会有被覆盖的风险;

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 TracingMax Duration默认为30mMax file size默认为10GB

2. Recording command

Recording command用于生成录制指令,点击右上角的复制按钮,在 PC 连接手机的情况下,运行这个指令就可以抓取 Trace

3. CPU

3.1 Coarse CPU usage counter

通过轻量级的轮询/proc/stat节点,周期性的监控CPU的使用情况;

3.2 Scheduling details

记录每个CPU核上调度任务的详情;

3.3 CPU frequency and idle states

通过ftrace记录CPU频率和idle状态的改变;

3.4 Syscalls

记录进入和退出系统调用的过程,仅能在userdebugeng版本上生效;

4. GPU

4.1 GPU frequency

通过ftrace记录GPU的频率;

4.2 GPU memory

记录单个进程或者整个GPU的内存使用情况(仅在Android 12+的版本上可用);

5.Power

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

通过ftracemm_eventrss_station events,记录短期高频的内存增长情况(仅在Android Q+的版本上可用);

6.5 Low memory killer

记录LMK事件和OOM评分调整情况;

6.6 Per process stats

定期取样系统中所有进程的信息:包括线程列表,内存计数(包括RSSswap/proc/status)和oom_score_adj

6.7 Virtual memory stats

通过定期轮询/proc/vmstat获取虚拟内存数据,包括统计swapevictioncompressionpagecache efficiency数据;

7. Android apps & svcs

7.1 Atrace userspace annotations

对应System Tracing中的“类别”,打开这个选项之后,可以选择合适的 atrace tag 开启对应的 Trace ;

7.2 Event log

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

7.3 Frame timeline

Frame timeline记录从surface_flinger获取到的期望的和实际的帧的情况(仅在Android 12+的版本上可用);

8. Chrome

Chrome 主要用于分析 Webview 相关的性能问题;

9. Advanced Settings

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

以上是关于Android性能优化之Perfetto的主要内容,如果未能解决你的问题,请参考以下文章

(七) 下篇 Android 性能优化 Perfetto 详细介绍

(七) 中篇 Android 性能优化 Perfetto 文件分析

性能优化之Java(Android)代码优化

性能优化之Java(Android)代码优化

Perfetto for linux-使用 Perfetto 分析调度问题

Perfetto for linux-使用 Perfetto 分析调度问题