# 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. 常用查询模式

#### 查询掉帧
```sql
SELECT * FROM slice 
WHERE name = 'Choreographer#doFrame' 
AND dur > 16666667;
```

#### 查询主线程耗时操作
```sql
SELECT name, dur / 1000000.0 AS duration_ms
FROM slice 
WHERE utid = (SELECT utid FROM thread WHERE name LIKE '%main%' LIMIT 1)
ORDER BY dur DESC
LIMIT 20;
```

#### 查询CPU使用率
```sql
SELECT cpu, COUNT(*) AS usage
FROM sched 
WHERE ts BETWEEN ? AND ?
GROUP BY 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. 常用搜索模式

#### 启动相关
```
startProcess
handleBindApplication
performLaunchActivity
onCreate
```

#### 渲染相关
```
Choreographer#doFrame
performTraversals
drawFrame
dequeueBuffer
queueBuffer
```

#### 内存相关
```
GC
HeapTaskDaemon
Alloc
kswapd
```

#### CPU相关
```
cpu_frequency
sched_switch
sched_waking
```

## 九、快速定位技巧

### 1. 使用书签

- **标记关键点**：按 `M` 键标记当前位置
- **跳转书签**：按 `G` 键跳转到书签
- **管理书签**：在书签列表中管理

### 2. 使用时间选择

- **选择时间范围**：`Shift + 鼠标拖拽`
- **缩放时间**：`W` 放大，`S` 缩小
- **平移时间**：`A` 左移，`D` 右移

### 3. 使用筛选器

- **进程筛选**：只显示特定进程
- **线程筛选**：只显示特定线程
- **事件筛选**：只显示特定事件

### 4. 使用SQL查询

- **快速统计**：使用SQL查询快速获取统计数据
- **复杂分析**：使用SQL进行复杂的数据分析
- **导出数据**：使用SQL查询结果导出数据

## 十、关键词速查表

### 启动流程关键词
```
startProcess → handleBindApplication → performLaunchActivity → 
onCreate → onStart → onResume → Choreographer#doFrame
```

### 渲染流程关键词
```
Choreographer#doFrame → performTraversals → performMeasure → 
performLayout → performDraw → drawFrame → dequeueBuffer → 
queueBuffer → onMessageReceived
```

### 内存回收关键词
```
GC → HeapTaskDaemon → ConcurrentGC → Alloc → Free → kswapd
```

### CPU调度关键词
```
sched_switch → sched_waking → cpu_frequency → cpu_idle
```

## 十一、实际应用示例

### 示例1：查找启动耗时

**搜索关键词：**
```
startProcess
handleBindApplication
performLaunchActivity
Choreographer#doFrame
```

**分析步骤：**
1. 搜索 `startProcess`，找到进程启动时间
2. 搜索 `handleBindApplication`，找到Application初始化时间
3. 搜索 `performLaunchActivity`，找到Activity创建时间
4. 搜索 `Choreographer#doFrame`，找到首帧时间
5. 计算各阶段耗时

### 示例2：查找卡顿原因

**搜索关键词：**
```
Choreographer#doFrame
performTraversals
drawFrame
dequeueBuffer
queueBuffer
```

**分析步骤：**
1. 搜索 `Choreographer#doFrame`，找到掉帧
2. 查看该帧的 `performTraversals` 耗时
3. 查看 `drawFrame` 耗时
4. 查看 `dequeueBuffer` 和 `queueBuffer` 耗时
5. 定位瓶颈

### 示例3：查找内存问题

**搜索关键词：**
```
GC
HeapTaskDaemon
Alloc
kswapd
```

**分析步骤：**
1. 搜索 `GC`，查看GC频率
2. 搜索 `HeapTaskDaemon`，查看GC线程活动
3. 搜索 `Alloc`，查看内存分配模式
4. 搜索 `kswapd`，查看内存压力

## 十二、总结

### 关键词分类

1. **启动相关**：进程创建、Application初始化、Activity创建、首帧渲染
2. **渲染相关**：帧调度、视图系统、RenderThread、SurfaceFlinger、GPU
3. **系统服务**：ActivityManager、WindowManager、Input、Binder
4. **进程线程**：进程名称、线程名称
5. **性能指标**：CPU、内存、I/O、网络
6. **SQL查询**：表名、字段、查询模式

### 使用建议

1. **建立关键词库**：根据常用场景建立关键词库
2. **快速定位**：使用关键词快速定位问题
3. **组合使用**：结合搜索、筛选、SQL查询等多种方式
4. **持续积累**：在实际使用中不断积累新的关键词

---

*最后更新：2024年*
