批处理实现:自动抓取perfetto日志 自动导出到当前文件夹 自动打开分析页面

序言

最近在研究性能问题需要抓取trace文件。于是写了个脚本

使用

双击运行批处理文件,可以开始记录trace。而且以当前文件夹下面的。config.pbtx 作为配置文件。 (pbtx就是一个json文件。配置了需要抓取那些参数,可以通过ui.perfetto.dev/中的Record new trace (左侧)的菜单,在右侧设置最近要记录什么内容。来生成配置文件。可以参考Android Perfetto 系列 2:Perfetto Trace 抓取 最后的文件在Cmdline instructions菜单中显示。 右边下方的内容拷贝到。当前目录,并命名为config.pbtx 记得把配置中的时间去除,这样可以一直记录。 在当前文件夹下新建批处理

bat 复制代码
@echo off
chcp 65001 >nul

@echo off
setlocal enabledelayedexpansion

:: 获取当前目录
echo 当前目录: %cd%

:: 使用 PowerShell 获取时间戳
for /f "delims=" %%a in ('powershell.exe -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set timestamp=%%a
echo 时间戳: %timestamp%

:: 删除旧 trace 文件
adb shell rm -rf /data/misc/perfetto-traces/trace.perfetto
timeout /t 1 >nul

:: 推送配置文件
adb push config.pbtx /data/misc/perfetto-configs/config.pbtx
timeout /t 1 >nul

:: 开始录制
echo 开始记录 trace,请按 Ctrl+C 结束录制...
adb shell -tt perfetto --txt -c /data/misc/perfetto-configs/config.pbtx -o /data/misc/perfetto-traces/trace.perfetto

:: 导出 trace 到当前目录
adb pull /data/misc/perfetto-traces/trace.perfetto .\trace_%timestamp%.perfetto

if exist trace_%timestamp%.perfetto (
    echo ✅ 文件已成功导出到当前目录:
    echo     trace_%timestamp%.perfetto

    echo.
    echo 🔗 正在打开 Perfetto 官方网站,请稍后手动上传 trace 文件。
    echo     1. 浏览器将自动打开 Perfetto UI。
    echo     2. 点击左上角 ^> Open trace file^> 按钮。
    echo     3. 选择刚刚保存的 trace_%timestamp%.perfetto 文件。
    echo.

    :: 打开默认浏览器访问 Perfetto UI
    start "" https://ui.perfetto.dev/

) else (
    echo ❌ 文件未找到,请检查设备路径或配置。
)

pause

双击bat运行,要结束录制的话,只需要按下 Ctrl+C 就可以了。 最后文件会自动保存到当前文件夹下,以时间命名。 最后还会自动打开分析网站。只需要把日志文件拖入浏览器就可以打开。

附带配置

这是我的配置文件,可以记录logcat

js 复制代码
buffers {
  size_kb: 65536
  fill_policy: DISCARD
}
buffers {
  size_kb: 4096
  fill_policy: DISCARD
}
data_sources {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "sched/sched_process_exit"
      ftrace_events: "sched/sched_process_free"
      ftrace_events: "task/task_newtask"
      ftrace_events: "task/task_rename"
      ftrace_events: "binder/*"
      ftrace_events: "block/*"
      ftrace_events: "clk/*"
      ftrace_events: "devfreq/*"
      ftrace_events: "ext4/*"
      ftrace_events: "f2fs/*"
      ftrace_events: "i2c/*"
      ftrace_events: "irq/*"
      ftrace_events: "kmem/*"
      ftrace_events: "memory_bus/*"
      ftrace_events: "mmc/*"
      ftrace_events: "oom/*"
      ftrace_events: "power/*"
      ftrace_events: "regulator/*"
      ftrace_events: "sched/*"
      ftrace_events: "sync/*"
      ftrace_events: "task/*"
      ftrace_events: "vmscan/*"
      ftrace_events: "fastrpc/*"
      ftrace_events: "sched/sched_switch"
      ftrace_events: "power/suspend_resume"
      ftrace_events: "sched/sched_blocked_reason"
      ftrace_events: "sched/sched_wakeup"
      ftrace_events: "sched/sched_wakeup_new"
      ftrace_events: "sched/sched_waking"
      ftrace_events: "sched/sched_process_exit"
      ftrace_events: "sched/sched_process_free"
      ftrace_events: "task/task_newtask"
      ftrace_events: "task/task_rename"
      ftrace_events: "power/cpu_frequency"
      ftrace_events: "power/cpu_idle"
      ftrace_events: "power/suspend_resume"
      ftrace_events: "raw_syscalls/sys_enter"
      ftrace_events: "raw_syscalls/sys_exit"
      ftrace_events: "power/gpu_frequency"
      ftrace_events: "gpu_mem/gpu_mem_total"
      ftrace_events: "power/gpu_work_period"
      ftrace_events: "ftrace/print"
      atrace_categories: "adb"
      atrace_categories: "aidl"
      atrace_categories: "am"
      atrace_categories: "audio"
      atrace_categories: "binder_driver"
      atrace_categories: "binder_lock"
      atrace_categories: "bionic"
      atrace_categories: "camera"
      atrace_categories: "dalvik"
      atrace_categories: "database"
      atrace_categories: "gfx"
      atrace_categories: "hal"
      atrace_categories: "input"
      atrace_categories: "network"
      atrace_categories: "nnapi"
      atrace_categories: "pm"
      atrace_categories: "power"
      atrace_categories: "res"
      atrace_categories: "rro"
      atrace_categories: "rs"
      atrace_categories: "sm"
      atrace_categories: "ss"
      atrace_categories: "vibrator"
      atrace_categories: "video"
      atrace_categories: "view"
      atrace_categories: "webview"
      atrace_categories: "wm"
      symbolize_ksyms: true
      disable_generic_events: true
    }
  }
}
data_sources {
  config {
    name: "linux.process_stats"
    process_stats_config {
      scan_all_processes_on_start: true
    }
  }
}
data_sources {
  config {
    name: "linux.sys_stats"
    sys_stats_config {
      meminfo_period_ms: 5000
      stat_period_ms: 250
      stat_counters: STAT_CPU_TIMES
      stat_counters: STAT_FORK_COUNT
      cpufreq_period_ms: 250
    }
  }
}
data_sources {
  config {
    name: "android.gpu.memory"
  }
}
data_sources {
  config {
    name: "android.java_hprof"
    java_hprof_config {
    }
  }
}
data_sources {
  config {
    name: "android.log"
    android_log_config {
      log_ids: LID_CRASH
      log_ids: LID_DEFAULT
      log_ids: LID_EVENTS
      log_ids: LID_KERNEL
      log_ids: LID_RADIO
      log_ids: LID_SECURITY
      log_ids: LID_STATS
      log_ids: LID_SYSTEM
    }
  }
}
data_sources {
  config {
    name: "android.surfaceflinger.frametimeline"
  }
}
data_sources {
  config {
    name: "android.game_interventions"
  }
}
data_sources {
  config {
    name: "android.network_packets"
    network_packet_trace_config {
      poll_ms: 1000
    }
  }
}
data_sources {
  config {
    name: "android.packages_list"
  }
}
data_sources {
  config {
    name: "android.statsd"
    statsd_tracing_config {
      push_atom_id: ATOM_PROCESS_STATE_CHANGED
      push_atom_id: ATOM_BLE_SCAN_RESULT_RECEIVED
      push_atom_id: ATOM_SENSOR_STATE_CHANGED
      push_atom_id: ATOM_GPS_SCAN_STATE_CHANGED
    }
  }
}
data_sources {
  config {
    name: "linux.perf"
    perf_event_config {
      timebase {
        frequency: 100
        timestamp_clock: PERF_CLOCK_MONOTONIC
      }
      callstack_sampling {
      }
    }
  }
}
相关推荐
AI服务老曹15 小时前
边云协同视频分析性能优化指南:多站点部署下的资源瓶颈突破与调优实战
性能优化·音视频
A_cainiao_A1 天前
【ggml系列】【第五篇】ggml_compute_forward_mul_mat 矩阵乘法算子源码与性能优化深度解析
线性代数·性能优化·矩阵
ai产品老杨1 天前
边云协同视频分析性能优化指南:多站点部署下的参数配置与排查清单(边缘推理+云端管理)
性能优化·音视频
苏打水com1 天前
《llama.cpp性能优化实战:从显存、KV Cache到Token/s》
性能优化·llama
该用户可能存在1 天前
【Win11优化】StartAllBack实战:解决任务栏合并、右键折叠等痛点
windows·性能优化·win11·windows 11·startallback·任务栏·开始菜单
灯澜忆梦2 天前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
爱喝水的鱼丶2 天前
SAP-ABAP:性能优化效果验证与回归测试:优化前后性能对比、业务逻辑兼容性校验方案
性能优化·sap·abap·回归测试·开发交流·交流学习
starzhang2 天前
06 从 Trace 看 Android 启动流程
性能优化
工业设备方案笔记2 天前
RK3588 AI设备性能优化指南:如何释放ARM边缘计算平台真正性能?
arm开发·人工智能·目标跟踪·性能优化·架构·边缘计算
数据库小学妹2 天前
空间数据库查询慢怎么排查?索引失效、表膨胀、SQL优化实战(附排查命令)
数据库·性能优化·信创·故障排查·索引调优·空间数据库