# 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年*