Perfetto入门教程

📚 核心官方资料(权威+最新)

  1. 官方主页https://perfetto.dev/ ------ 总入口,含所有文档、教程、案例
  2. 官方入门指南https://perfetto.dev/docs/ ------ 从安装到分析的完整流程,必看
  3. Web UIhttps://ui.perfetto.dev/ ------ 可视化分析核心入口,直接拖入trace文件即可
  4. 命令行手册https://perfetto.dev/docs/command_line/perfetto ------ ADB抓trace的参数详解
  5. Android开发者文档https://developer.android.com/studio/profile/perfetto ------ 与Android Studio联动说明

🧩 精选中文入门资料(快速上手)

  1. 掘金系列教程:《Perfetto从入门到精通》《Android卡顿性能第二代工具Perfetto》------ 中文场景化讲解,适合国内开发者
  2. CSDN简易入门:《Perfetto简易入门》------ 命令行、Web UI基础操作,快速上手
  3. 博客园快速入门:《Perfetto快速入门:在Android上记录跟踪》------ 抓trace实操步骤,适合座舱App调试

🚀 入门三步法(座舱App场景)

  1. 准备工作

    • 设备:Android 10+(内置Perfetto守护进程),开启开发者选项与USB调试
    • 环境:安装ADB,确保设备连接正常(adb devices可识别)
    • 工具:Web UI(ui.perfetto.dev)或Android Studio Bumblebee+(内置Perfetto集成)
  2. 抓trace实操(ADB命令)

    • 快速模式(类似Systrace):

      bash 复制代码
      adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto-trace -t 10s -a

      (-t 10s为时长,-a采集所有数据源,适合快速定位卡顿)

    • 导出trace:

      bash 复制代码
      adb pull /data/misc/perfetto-traces/trace.perfetto-trace ~/Desktop/
    • 进阶模式(自定义配置,如只抓音频+CPU):编写trace_config.proto,用--config参数指定

  3. 分析流程(Web UI)

    • 拖入trace文件,选择"CPU调度""内存""卡顿"等视图
    • 定位座舱App问题:如音乐播放卡顿,查看音频线程状态、锁持有情况、系统进程抢占资源情况
    • 用SQL查询(如查找CPU占用前10的线程):提升分析效率

💡 座舱App调试高频技巧

  1. 卡顿分析:开启"atrace应用""CPU调度""SurfaceFlinger",查看主线程阻塞点、VSYNC信号丢失情况
  2. 内存泄漏:结合heapprofd数据源,抓Native内存快照,定位未释放的音频播放器、Binder对象等
  3. 线程阻塞:查看线程状态(RUNNABLE/BLOCKED/WAITING),结合锁信息找死锁或长耗时操作

⚠️ 避坑提示

  1. 避免长时间抓trace(>30s),文件过大影响分析;座舱App建议5-10s,聚焦问题场景
  2. 抓trace时复现问题(如播放卡顿、切换歌曲延迟),确保数据有效性
  3. 分析时结合logcat,Web UI可导入logcat日志,关联时间轴定位问题

座舱App Perfetto调试速查表

一、 核心准备

条件 要求
设备系统 Android 10+(内置Perfetto守护进程)
开发者选项 开启USB调试 + 系统跟踪
工具入口 Web UI:https://ui.perfetto.dev/(直接拖入trace文件)
环境依赖 安装ADB,确保adb devices能识别车机/测试设备

二、 常用ADB命令(直接复制用)

1. 快速抓全量trace(定位座舱卡顿/掉帧)

bash 复制代码
# 抓取10秒全量数据(含CPU/内存/线程/系统事件),适合快速复现问题
adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto-trace -t 10s -a
# 导出trace到电脑桌面
adb pull /data/misc/perfetto-traces/trace.perfetto-trace ~/Desktop/

2. 自定义抓座舱App专属trace(精准分析音乐/空调模块)

bash 复制代码
# 只抓指定包名(如车载音乐App)+ CPU+音频数据源,避免日志冗余
adb shell perfetto -o /data/misc/perfetto-traces/music_trace.perfetto-trace -t 8s -b 32mb -c - <<EOF
buffers: {
    size_kb: 32768
}
data_sources: {
    config {
        name: "linux.perf"
        target_buffer: 0
        perf_config {
            all_cpus: true
            record_freq: 100
            trace_duration_ms: 8000
        }
    }
}
data_sources: {
    config {
        name: "android.surfaceflinger"
    }
}
packages: [
    "com.car.music"  # 替换成你的座舱App包名
]
EOF

3. 抓内存专项trace(排查座舱App内存泄漏)

bash 复制代码
# 抓取heapprofd数据源,分析Native/Java内存占用
adb shell perfetto -o /data/misc/perfetto-traces/memory_trace.perfetto-trace -t 10s -a --config heapprofd

三、 Web UI关键视图(座舱问题分析必看)

视图名称 作用 座舱调试场景
CPU Scheduling 查看所有线程的CPU占用、状态(RUNNABLE/BLOCKED) 定位音乐解码线程抢占CPU、主线程阻塞
Android Apps 筛选指定座舱App,查看进程内线程详情 聚焦音乐/空调模块的线程运行情况
Memory 实时监控内存变化、堆内存分配 排查座舱App退出后内存未释放问题
SurfaceFlinger 查看屏幕刷新、VSYNC信号 定位座舱UI卡顿、掉帧(如温度界面刷新慢)
Logcat 导入logcat日志,关联时间轴 结合日志定位性能问题触发时机

四、 座舱App高频问题排查步骤

1. 音乐播放卡顿

  1. 抓trace时复现卡顿场景(如切换歌曲、播放无损音乐);
  2. Web UI打开CPU Scheduling视图,筛选音乐App进程;
  3. 音频解码线程 是否长时间处于RUNNABLE(CPU占用过高);
  4. 切换SurfaceFlinger视图,检查是否有VSYNC信号丢失(导致UI卡顿)。

2. 空调信号响应慢

  1. 抓trace时操作空调温度调节,触发信号上报;
  2. 打开Android Apps视图,找到空调模块线程;
  3. 查看线程是否频繁处于BLOCKED状态(大概率是Binder通信阻塞);
  4. 结合Logcat视图,关联信号发送/接收日志,定位延迟环节。

3. 座舱App内存泄漏

  1. 内存专项命令抓trace,重复操作目标功能(如反复进入退出音乐页面);
  2. 打开Memory视图,查看堆内存是否持续上涨;
  3. 分析heapprofd数据,定位未释放的对象(如音频播放器、信号接收器)。

五、 避坑提示

  1. 抓trace时长控制在 5-10秒,过长会导致文件过大(>100MB),分析卡顿;
  2. 抓trace时必须复现问题,否则数据无意义;
  3. 车机系统可能限制trace权限,需确保adb shell有root权限(或用开发者模式);
  4. 分析时优先筛选目标App进程,避免被系统进程干扰。
相关推荐
千里马学框架22 天前
google官方文档:深入剖析ProtoLog原理及Winscope的查看方式
android·车载系统·framework·perfetto·系统开发·winscope
Tom4i2 个月前
Perfetto 快速上手
android·性能优化·perfetto
wuweikai06172 个月前
在Android设备上打开Perfetto调试日志开关
android·性能优化·perfetto
yuanbenshidiaos3 个月前
【性能优化】--perfetto分析思路
性能优化·perfetto
Winston Wood1 年前
Perfetto学习大全
android·性能优化·perfetto
yaoming1682 年前
Graphics Profiler 使用教程
性能优化·perfetto
清霜之辰2 年前
Android性能优化--Perfetto用SQL性能分析
android·sql·性能优化·perfetto
千里马学框架2 年前
systrace/perfetto中需要actrace打tag相关方法-车载车机framework系统开发实战
性能优化·车载系统·perfetto·systrace·安卓framework开发·android系统·atrace
安仔都有人用2 年前
android 如何分析应用的内存(十三)——perfetto
perfetto·heap_profile·heap_profile反混淆·heap_profile符号化·android内存分析