1. Systrace
1.1 Systrace简介
Systrace 是平台提供的旧版命令行工具,可记录短时间内的设备活动,并保存在压缩的文本文件中。该工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程
1.2. Systrace使用
1.2.1. sdk\tools\monitor.bat 图形工具抓取
1.2.2.命令行抓取systrace
python systrace.py [options] [category1] [category2] ... [categoryN]
其中options可取值:
*options* | *解释* |
---|---|
-o | 输出的目标文件 |
-t N, –time=N | 执行时间,默认5s |
-b N, –buf-size=N | buffer大小(单位kB),用于限制trace总大小,默认无上限 |
-k ,–ktrace= | 追踪kernel函数,用逗号分隔 |
-a <APP_NAME>,–app=<APP_NAME> | 追踪应用包名,用逗号分隔 |
不同版本支持的category不一样,在平台上通过命令查询:atrace --list_categories
gfx - Graphics
input - Input
view - View System
webview - WebView
wm - Window Manager
am - Activity Manager
sm - Sync Manager
audio - Audio
video - Video
camera - Camera
hal - Hardware Modules
res - Resource Loading
dalvik - Dalvik VM
rs - RenderScript
bionic - Bionic C Library
power - Power Management
pm - Package Manager
ss - System Server
database - Database
network - Network
adb - ADB
vibrator - Vibrator
aidl - AIDL calls
nnapi - NNAPI
rro - Runtime Resource Overlay
pdx - PDX services
sched - CPU Scheduling
irq - IRQ Events
i2c - I2C Events
freq - CPU Frequency
idle - CPU Idle
disk - Disk I/O
sync - Synchronization
workq - Kernel Workqueues
memreclaim - Kernel Memory Reclaim
regulators - Voltage and Current Regulators
binder_driver - Binder Kernel driver
binder_lock - Binder global lock trace
pagecache - Page cache
memory - Memory
gfx - Graphics (HAL)
ion - ION allocation (HAL)
systrace.py文件位置
- platform-tools\systrace
- 源码目录external\chromium-trace
电脑收集trace,需要提前安装python,并且一定要注意是python 2.x
python systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq
1.2.3. atrace抓取(adb shell或uart下)
atrace -z -b 40000 am wm view res ss gfx view hal bionic pm sched irq freq idle disk mmc sync workq binder_driver binder_lock pagecache memreclaim dalvik input -t 15 -o /data/local/tmp/trace_output
通过systrace.py将trace_output生成trace_output.html
systrace.py --from-file trace_output -o trace_output.html
1.2.4. 注意:
atrace抓取的文件需要通过systrace.py转成html,其它抓取方法直接用谷歌浏览器打开即可,如果有遇到浏览器打不开的情况,在浏览器中输入chrome://tracing/,然后Load对应的trace文件
1.2.5. 抓取结果
横轴为时间轴
竖轴最上面CPU和IRQ相关信息,底下为进程和线程相关信息,右边为函数调用流程
Start 开始时间
Wall Duration 持续时间
右上角的processes可以过滤进程
1.2.6. 快捷操作
*导航操作* | *作用* |
---|---|
w | 放大,[+shift]速度更快 |
s | 缩小,[+shift]速度更快 |
a | 左移,[+shift]速度更快 |
d | 右移,[+shift]速度更快 |
*常用操作* | *作用* |
---|---|
f | ****放大****当前选定区域 |
m | ****标记****当前选定区域 |
v | 高亮****VSync**** |
g | 切换是否显示****60hz****的网格线 |
0 | 恢复trace到****初始态****,这里是数字0而非字母o |
2. Perfetto简介和使用
2.1. Perfetto简介
Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目
Perfetto网址: https://ui.perfetto.dev/
2.2.Perfetto界面
2.3. Perfetto的使用
### 2.3.1. 设置对应的属性
adb shell setprop persist.traced.enable 1
2.3.2. 抓取trace
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
2.3.4. 抓取结果
perfetto的操作和systrace的操作类似,界面更加美观,进程相关信息显示更全,分析相关问题时,可以两者结合的方式来分析
3 好文推荐
https://developer.android.google.cn/topic/performance/tracing
https://perfetto.dev/docs/quickstart/android-tracing#recording-a-trace-through-the-perfetto-ui
https://developer.android.google.cn/topic/performance/tracing/command-line
https://developer.android.google.cn/studio/command-line/perfetto
https://zhuanlan.zhihu.com/p/82522750