Perfetto看Trace关键词
一、应用启动相关关键词
1. 进程创建
| 关键词 |
说明 |
位置 |
startProcess |
进程启动 |
SystemServer/ActivityManagerService |
ActivityManager: startProcess |
ActivityManager启动进程 |
SystemServer |
Zygote: forkAndSpecialize |
Zygote进程fork |
Zygote进程 |
Process: start |
进程启动 |
SystemServer |
task_newtask |
新任务创建 |
Kernel |
task_rename |
任务重命名 |
Kernel |
2. Application初始化
| 关键词 |
说明 |
位置 |
handleBindApplication |
绑定Application |
应用主线程 |
ActivityThread: handleBindApplication |
ActivityThread处理绑定 |
应用主线程 |
Application.onCreate |
Application初始化 |
应用主线程 |
attachBaseContext |
附加基础上下文 |
应用主线程 |
installContentProviders |
安装ContentProvider |
应用主线程 |
3. Activity创建
| 关键词 |
说明 |
位置 |
performLaunchActivity |
执行启动Activity |
应用主线程 |
ActivityThread: performLaunchActivity |
ActivityThread启动Activity |
应用主线程 |
Activity.onCreate |
Activity创建 |
应用主线程 |
Activity.onStart |
Activity启动 |
应用主线程 |
Activity.onResume |
Activity恢复 |
应用主线程 |
onWindowFocusChanged |
窗口焦点变化 |
应用主线程 |
4. 首帧渲染
| 关键词 |
说明 |
位置 |
Choreographer#doFrame |
帧调度 |
应用主线程 |
onMessageReceived |
消息接收 |
SurfaceFlinger |
SurfaceFlinger: onMessageReceived |
SurfaceFlinger接收消息 |
SurfaceFlinger |
firstFrame |
首帧 |
SurfaceFlinger |
Displayed |
显示完成 |
应用主线程 |
二、渲染相关关键词
1. 帧调度
| 关键词 |
说明 |
位置 |
Choreographer#doFrame |
帧调度 |
应用主线程 |
doFrame |
执行帧 |
应用主线程 |
doCallbacks |
执行回调 |
应用主线程 |
doAnimationFrame |
执行动画帧 |
应用主线程 |
doTraversal |
执行遍历 |
应用主线程 |
2. 视图系统
| 关键词 |
说明 |
位置 |
performTraversals |
执行遍历 |
应用主线程 |
performMeasure |
执行测量 |
应用主线程 |
performLayout |
执行布局 |
应用主线程 |
performDraw |
执行绘制 |
应用主线程 |
onMeasure |
测量 |
应用主线程 |
onLayout |
布局 |
应用主线程 |
onDraw |
绘制 |
应用主线程 |
invalidate |
失效 |
应用主线程 |
requestLayout |
请求布局 |
应用主线程 |
3. RenderThread
| 关键词 |
说明 |
位置 |
drawFrame |
绘制帧 |
RenderThread |
dequeueBuffer |
获取Buffer |
RenderThread |
queueBuffer |
提交Buffer |
RenderThread |
syncAndDrawFrame |
同步并绘制帧 |
RenderThread |
flush |
刷新 |
RenderThread |
flushCommands |
刷新命令 |
RenderThread |
4. SurfaceFlinger
| 关键词 |
说明 |
位置 |
onMessageReceived |
接收消息 |
SurfaceFlinger |
onFrameAvailable |
帧可用 |
SurfaceFlinger |
doComposition |
执行合成 |
SurfaceFlinger |
doComposeSurfaces |
合成表面 |
SurfaceFlinger |
postComposition |
后合成 |
SurfaceFlinger |
VSync |
垂直同步 |
SurfaceFlinger |
onVSync |
VSync事件 |
SurfaceFlinger |
5. GPU相关
| 关键词 |
说明 |
位置 |
gpu_mem_total |
GPU内存总量 |
Kernel |
mali_gpu_total |
Mali GPU总量 |
Kernel |
gpu_freq |
GPU频率 |
Kernel |
gpu_utilization |
GPU使用率 |
Kernel |
三、系统服务相关关键词
1. ActivityManager
| 关键词 |
说明 |
位置 |
ActivityManager: startActivity |
启动Activity |
SystemServer |
ActivityManager: startService |
启动Service |
SystemServer |
ActivityManager: bindService |
绑定Service |
SystemServer |
ActivityManager: startProcess |
启动进程 |
SystemServer |
ActivityManager: finishActivity |
结束Activity |
SystemServer |
ActivityManager: pauseActivity |
暂停Activity |
SystemServer |
ActivityManager: resumeActivity |
恢复Activity |
SystemServer |
2. WindowManager
| 关键词 |
说明 |
位置 |
WindowManager: addWindow |
添加窗口 |
SystemServer |
WindowManager: removeWindow |
移除窗口 |
SystemServer |
WindowManager: relayoutWindow |
重新布局窗口 |
SystemServer |
WindowManager: setAppVisibility |
设置应用可见性 |
SystemServer |
WindowManager: setInputMethodWindow |
设置输入法窗口 |
SystemServer |
3. Input系统
| 关键词 |
说明 |
位置 |
InputReader |
输入读取器 |
Input进程 |
InputDispatcher |
输入分发器 |
Input进程 |
dispatchKey |
分发按键 |
Input进程 |
dispatchMotion |
分发触摸 |
Input进程 |
touch |
触摸事件 |
Input进程 |
key |
按键事件 |
Input进程 |
4. Binder通信
| 关键词 |
说明 |
位置 |
binder_transaction |
Binder事务 |
Kernel |
binder_transaction_received |
接收Binder事务 |
Kernel |
binder_lock |
Binder锁 |
Kernel |
binder_unlock |
Binder解锁 |
Kernel |
binder_wait_for_work |
等待Binder工作 |
Kernel |
四、进程和线程相关关键词
1. 进程名称
| 关键词 |
说明 |
system_server |
系统服务进程 |
surfaceflinger |
SurfaceFlinger进程 |
zygote |
Zygote进程 |
zygote64 |
64位Zygote进程 |
input |
输入服务进程 |
logd |
日志守护进程 |
lmkd |
低内存杀手进程 |
2. 线程名称
| 关键词 |
说明 |
位置 |
main |
主线程 |
应用进程 |
RenderThread |
渲染线程 |
应用进程 |
android.anim.if |
动画线程 |
SystemServer |
android.ui |
UI线程 |
SystemServer |
android.display |
显示线程 |
SystemServer |
HeapTaskDaemon |
堆任务守护线程 |
应用进程 |
FinalizerDaemon |
终结器守护线程 |
应用进程 |
ReferenceQueueDaemon |
引用队列守护线程 |
应用进程 |
五、性能指标相关关键词
1. CPU相关
| 关键词 |
说明 |
位置 |
cpu_frequency |
CPU频率 |
Kernel |
cpu_idle |
CPU空闲 |
Kernel |
cpu_freq |
CPU频率 |
Kernel |
sched_switch |
任务切换 |
Kernel |
sched_waking |
任务唤醒 |
Kernel |
sched_migrate_task |
任务迁移 |
Kernel |
sched_process_exit |
进程退出 |
Kernel |
sched_process_free |
进程释放 |
Kernel |
2. 内存相关
| 关键词 |
说明 |
位置 |
GC |
垃圾回收 |
应用进程 |
HeapTaskDaemon |
堆任务守护线程 |
应用进程 |
ConcurrentGC |
并发GC |
应用进程 |
Alloc |
内存分配 |
应用进程 |
Free |
内存释放 |
应用进程 |
kmalloc |
内核内存分配 |
Kernel |
kfree |
内核内存释放 |
Kernel |
kswapd |
交换守护进程 |
Kernel |
memreclaim |
内存回收 |
Kernel |
3. I/O相关
| 关键词 |
说明 |
位置 |
android_fs_dataread_start |
数据读取开始 |
Kernel |
android_fs_dataread_end |
数据读取结束 |
Kernel |
android_fs_datawrite_start |
数据写入开始 |
Kernel |
android_fs_datawrite_end |
数据写入结束 |
Kernel |
block_rq_issue |
块请求发出 |
Kernel |
block_rq_complete |
块请求完成 |
Kernel |
4. 网络相关
| 关键词 |
说明 |
位置 |
net_dev_xmit |
网络设备发送 |
Kernel |
net_dev_recv |
网络设备接收 |
Kernel |
tcp_send |
TCP发送 |
Kernel |
tcp_receive |
TCP接收 |
Kernel |
六、SQL查询常用关键词
1. 表名
| 表名 |
说明 |
slice |
时间片表,包含所有Trace事件 |
sched |
调度表,包含CPU调度信息 |
thread |
线程表,包含线程信息 |
process |
进程表,包含进程信息 |
counter |
计数器表,包含性能计数器 |
track |
轨道表,包含Trace轨道信息 |
2. 常用字段
| 字段 |
说明 |
表 |
ts |
时间戳(纳秒) |
slice, sched |
dur |
持续时间(纳秒) |
slice |
name |
事件名称 |
slice |
utid |
线程ID |
slice, sched |
upid |
进程ID |
slice, sched |
cpu |
CPU核心 |
sched |
state |
线程状态 |
sched |
value |
计数器值 |
counter |
3. 常用查询模式
查询掉帧
查询主线程耗时操作
查询CPU使用率
七、常见问题定位关键词
1. 卡顿问题
| 关键词 |
说明 |
用途 |
Choreographer#doFrame |
帧调度 |
查找掉帧 |
performTraversals |
视图遍历 |
查找布局耗时 |
drawFrame |
绘制帧 |
查找渲染耗时 |
dequeueBuffer |
获取Buffer |
查找Buffer分配问题 |
queueBuffer |
提交Buffer |
查找Buffer提交问题 |
2. 启动问题
| 关键词 |
说明 |
用途 |
startProcess |
启动进程 |
查找进程创建耗时 |
handleBindApplication |
绑定Application |
查找Application初始化耗时 |
performLaunchActivity |
启动Activity |
查找Activity创建耗时 |
onCreate |
创建 |
查找创建耗时 |
3. 内存问题
| 关键词 |
说明 |
用途 |
GC |
垃圾回收 |
查找GC频率和耗时 |
HeapTaskDaemon |
堆任务守护线程 |
查找GC活动 |
Alloc |
内存分配 |
查找内存分配模式 |
kswapd |
交换守护进程 |
查找内存压力 |
4. CPU问题
| 关键词 |
说明 |
用途 |
cpu_frequency |
CPU频率 |
查找频率问题 |
sched_switch |
任务切换 |
查找调度问题 |
sched_waking |
任务唤醒 |
查找唤醒延迟 |
八、搜索技巧
1. 精确搜索
- 完整匹配:直接输入关键词,如
Choreographer#doFrame
- 部分匹配:使用通配符,如
onCreate 可以匹配所有onCreate方法
- 正则表达式:在搜索框中使用正则,如
.*onCreate.*
2. 组合搜索
- 多关键词:使用空格分隔,如
onCreate Activity
- 排除关键词:使用
- 排除,如 onCreate -Application
- 时间范围:结合时间选择,缩小搜索范围
3. 常用搜索模式
启动相关
渲染相关
内存相关
CPU相关
九、快速定位技巧
1. 使用书签
- 标记关键点:按
M 键标记当前位置
- 跳转书签:按
G 键跳转到书签
- 管理书签:在书签列表中管理
2. 使用时间选择
- 选择时间范围:
Shift + 鼠标拖拽
- 缩放时间:
W 放大,S 缩小
- 平移时间:
A 左移,D 右移
3. 使用筛选器
- 进程筛选:只显示特定进程
- 线程筛选:只显示特定线程
- 事件筛选:只显示特定事件
4. 使用SQL查询
- 快速统计:使用SQL查询快速获取统计数据
- 复杂分析:使用SQL进行复杂的数据分析
- 导出数据:使用SQL查询结果导出数据
十、关键词速查表
启动流程关键词
渲染流程关键词
内存回收关键词
CPU调度关键词
十一、实际应用示例
示例1:查找启动耗时
搜索关键词:
分析步骤:
- 搜索
startProcess,找到进程启动时间
- 搜索
handleBindApplication,找到Application初始化时间
- 搜索
performLaunchActivity,找到Activity创建时间
- 搜索
Choreographer#doFrame,找到首帧时间
- 计算各阶段耗时
示例2:查找卡顿原因
搜索关键词:
分析步骤:
- 搜索
Choreographer#doFrame,找到掉帧
- 查看该帧的
performTraversals 耗时
- 查看
drawFrame 耗时
- 查看
dequeueBuffer 和 queueBuffer 耗时
- 定位瓶颈
示例3:查找内存问题
搜索关键词:
分析步骤:
- 搜索
GC,查看GC频率
- 搜索
HeapTaskDaemon,查看GC线程活动
- 搜索
Alloc,查看内存分配模式
- 搜索
kswapd,查看内存压力
十二、总结
关键词分类
- 启动相关:进程创建、Application初始化、Activity创建、首帧渲染
- 渲染相关:帧调度、视图系统、RenderThread、SurfaceFlinger、GPU
- 系统服务:ActivityManager、WindowManager、Input、Binder
- 进程线程:进程名称、线程名称
- 性能指标:CPU、内存、I/O、网络
- SQL查询:表名、字段、查询模式
使用建议
- 建立关键词库:根据常用场景建立关键词库
- 快速定位:使用关键词快速定位问题
- 组合使用:结合搜索、筛选、SQL查询等多种方式
- 持续积累:在实际使用中不断积累新的关键词
最后更新:2024年