System Tracing
即系统跟踪界面,用户可以通过如下两种方式进入系统跟踪界面:
(1)设置 – 其他设置 – 开发者选项 – 系统跟踪(Realme GT Neo 闪速版);
(2)adb shell am start com.android.traceur/com.android.traceur.MainActivity
;
系统跟踪界面包含以下这些选项,它们与网页版本中的一些选项有着一定的对应关系
(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)显示“快捷设置”图块:可以在快捷设置中生成一个快捷图标;
设置好选项之后,点击“录制跟踪记录”即可开始抓取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
https://ui.perfetto.dev/#!/record
Perfetto
提供了三种录制模式,给用户提供可视化界面方便从不同维度定制各种选项;
Stop when full
模式下,Perfetto
工作受buffer size
和Max duration
影响,满足其中任一个条件Perfetto
将会停止;
trace
不会因为被覆盖而导致丢失,但如果trace
太多会导致提前终止而无法录制到出问题时的trace
;
In-memory buffer size
:代表每一个核上可以存储的最大的trace
的buffer
大小,默认为64MB
;
Max duration
:代表此次trace
抓取的最大时长,默认为10s
;
Ring buffer
的选项与Stop when full
一致,区别在于其只会受到Max duration
的影响,时间到了就停止抓取 Trace
,但是 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
;
Recording command
用于生成录制指令,点击右上角的复制按钮,在 PC
连接手机的情况下,运行这个指令就可以抓取 Trace
;
通过轻量级的轮询/proc/stat
节点,周期性的监控CPU
的使用情况;
记录进入和退出系统调用的过程,仅能在userdebug
和eng
版本上生效;
通过ftrace
记录GPU
的频率;
记录单个进程或者整个GPU
的内存使用情况(仅在Android 12+的版本上可用);
记录电池耗电情况;
记录板级传感器电压和频率的改变;
记录Android
进程的native
堆的分配和回收(仅在Android 10+的版本上可用);
记录Android
应用的java
对象的分配情况(仅在Android 11+的版本上可用);
记录/pro/meminfo
节点的轮询情况;
通过ftrace
的mm_event
,rss_stat
和ion events
,记录短期高频的内存增长情况(仅在Android Q+的版本上可用);
记录LMK
事件和OOM
评分调整情况;
定期取样系统中所有进程的信息:包括线程列表,内存计数(包括RSS
,swap
和/proc/status
)和oom_score_adj
;
通过定期轮询/proc/vmstat
获取虚拟内存数据,包括统计swap
,eviction
,compression
和pagecache efficiency
数据;
对应System Tracing
中的“类别”,打开这个选项之后,可以选择合适的 atrace tag
开启对应的 Trace ;
Event log
可以实时记录 Log
,然后将 Log
和 Trace
信息一一对应,非常有利于分析问题;
Frame timeline
记录从surface_flinger
获取到的期望的和实际的帧的情况(仅在Android 12+的版本上可用);
Chrome
主要用于分析 Webview
相关的性能问题;