Android中如何通过perfetto抓取trace

一,perfetto的作用

Perfetto的作用是提供一个性能检测和跟踪分析工具集,用于Android、Linux和Chrome平台。

Perfetto是Google推出的一款全新的平台级跟踪分析工具,它从Android 10开始被引入,旨在替代之前的systrace工具。Perfetto的核心特点包括用户空间到用户空间的跟踪协议,基于protobuf序列化机制的数据填充到共享内存缓冲区,以及支持获取内置数据源(如ftrace、atrace、logcat)的信息。此外,Perfetto还提供了SDK和Library供C++应用程序使用,以实现定制化的性能监测。

在Perfetto中抓取trace的方法通常涉及使用特定的命令行工具,其中:

复制代码
-o 参数指定了抓取文件的输出目录和文件名。
-t 参数则用来设置抓取的时间,例如设置为20秒。

要开始使用Perfetto抓取trace,你需要确保你的设备运行的是Android 9.0(API级别28)或更高版本的操作系统。通过适当的命令行工具和参数配置,你可以启动Perfetto来记录系统跟踪信息。这些信息随后可以用于分析和优化应用程序和系统的性能

二、抓取以及查看trace文件网页

新版的

1.https://ui.perfetto.dev/

总体上是新版好用,如果遇到别人分享的trace文件新版打开文件失败可以试下旧版或者看下是不是中文文件名导致的

三、使用步骤

1.1 启动跟踪服务

Perfetto 基于自 Android 9 (P) 以来可用的平台服务,但默认情况下仅在 Android 11 (R)。 在 Android 9 (P) 和 10 (Q) 上,您需要执行以下操作以确保 在开始之前启用跟踪服务:

c 复制代码
# Needed only on Android 9 (P) and 10 (Q) on non-Pixel phones.
adb shell setprop persist.traced.enable 1

1.2 记录跟踪,trace抓取的3中方式

命令行工具:

直接使用设备上的命令: /system/bin/perfetto

用户界面工具:

通过 Perfetto UI 中的记录页面。

使用设备上的系统跟踪应用

1.2.1 通过 Perfetto UI 记录跟踪

浏览器打开 ui.perfetto.dev,然后从左侧菜单中选择"记录新跟踪"。

如果不确定,请首先打开"CPU"选项卡下的"计划详细信息"。(这里生成命令需要的 CONFIG_FILE ,可查看 Recording settings )

确保设备已连接,然后选择"添加 ADB 设备"。一旦您的设备 已成功配对(您可能需要在设备上允许USB调试),选择"开始录制"按钮。
Navigation:文件导航选项:

Open trace file:导入protobuf 文件(通过perfetto生成的)

Open with legacy UI:导入systrace文件(通过systrace生成的)

Record new trace:Perfetto UI录制protobuf文件(后面会单独介绍)

Current Trace:当前trace选项

Show timeline:显示时间线

Download:下载此trace文件

Legacy UI:以Systrace报表打开

Query(SQL):输入sql命令进行过滤信息

Example Traces:trace示例

Open Android example:打开android的trace示例

Open Chrome example:打开chrome的trace示例

Metrics and auditors:指标过滤器

Support:支持项

Controls:分析面板控制类型

Documentation:文档解读

Report a bug:提交发下你的bug

Bottom Action:底部支持功能

Toggle Perf Debug Modle:切换性能调试模式

Number of pending SQL queries:待执行的SQL查询数

service worker:缓存离线服务

Perfetto UI 录制protobuf文件

1.2.2 通过 cmdline 记录跟踪

c 复制代码
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s \
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

/system/bin/perfetto 这个下面单独说明

简单模式:
使用类似与systrace。如果需要设定时间加-t,默认跟踪10s。-o输出文件的位置,使用/data/misc/perfetto-traces/,否则perfetto没有权限访问, 然后pull出文件,在Perfetto UI中打开使用。如下命令可直接使用,通常这种信息对大多数情况都够用了。

生成.perfetto-trace文件:

c 复制代码
adb shell perfetto gfx input view wm am ss sched freq idle binder_driver res rs  -o /data/misc/perfetto-traces/trace -t 10s

导出.perfetto-trace文件:

c 复制代码
adb pull /data/misc/perfetto-traces/trace ~/trace

普通模式:

借助config文件配置要调试的内容,命令行如下,其中config.pbtx为config file,可以借助Perfetto UI的recording setting(Perfetto UI)生成,或者在Perfetto UI中的redording settings中设置后好,在recording command 中copy所有内容,在terminal中直接copy执行即可。

c 复制代码
cat config.pbtx | adb shell perfetto -c - --txt -o /data/misc/perfetto-traces/trace.perfetto-trace

Perfetto 为我们提供了一种更方便更加灵活的配置化式的 trace 抓取方案: trace config 。让我们先来看一下官方提供的 config 样例 config.pbtx:

c 复制代码
duration_ms: 10000
 
buffers: {
    size_kb: 8960
    fill_policy: DISCARD
}
buffers: {
    size_kb: 1280
    fill_policy: DISCARD
}
data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
            ftrace_events: "power/suspend_resume"
            ftrace_events: "sched/sched_process_exit"
            ftrace_events: "sched/sched_process_free"
            ftrace_events: "task/task_newtask"
            ftrace_events: "task/task_rename"
            ftrace_events: "ftrace/print"
            atrace_categories: "gfx"
            atrace_categories: "view"
            atrace_categories: "webview"
            atrace_categories: "camera"
            atrace_categories: "dalvik"
            atrace_categories: "power"
        }
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

注意,这是一个以 .pbtx 为后缀名的文件,使用时,我们需要先将这个文件 push 到手机目录下,而后执行如下抓取命令:

c 复制代码
adb push config.pbtx /data/local/tmp/config.pbtx
adb shell 'cat /data/local/tmp/config.pbtx | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.perfetto-trace'

可以看到,我们通过这种的方式也是抓取成功的,通过 config 的方式我们可以自定义抓取规则,更大的契合了各种业务的需要。

1.2.3 System Tracing 的系统级应用抓取

启用开发者选项(如果尚未启用此选项)

打开开发者选项设置

在调试部分中,选择 System Tracing (系统跟踪)。此时会打开 System Tracing 应用,其中显示了应用菜单。

在应用菜单中,启用 显示 "快捷设置"图块
启用录制跟踪记录开关,该图块会变为启用状态,并且系统会显示常驻通知,通知您系统正在录制跟踪记录

完成这些操作后,可通过停用录制跟踪记录开关来停止跟踪

使用 ADB 导出报告

c 复制代码
adb pull /data/local/traces/ .

推荐通过perfetto命令抓取perfetto trace

执行抓取命令

c 复制代码
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
 
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

使用 perfetto 工具,您可以通过 Android 调试桥 (adb) 在 Android 设备上收集性能信息。使用 adb shell perfetto ... 命令调用 perfetto 工具。 perfetto 从您的设备上收集性能跟踪数据时会使用多种来源,例如:

复制代码
使用 ftrace 收集内核信息
使用 atrace 收集服务和应用中的用户空间注释
使用 heapprofd 收集服务和应用的本地内存使用情况信息
相关推荐
浩浩测试一下44 分钟前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
移动开发者1号2 小时前
深入理解原子类与CAS无锁编程:原理、实战与优化
android·kotlin
陈卓4102 小时前
MySQL-主从复制&分库分表
android·mysql·adb
移动开发者1号2 小时前
深入理解 ThreadLocal:原理、实战与优化指南
android·kotlin
zhangphil2 小时前
Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算
android
厦门德仔3 小时前
【WPF】WPF(样式)
android·java·wpf
aqi003 小时前
FFmpeg开发笔记(七十二)Linux给FFmpeg集成MPEG-5视频编解码器EVC
android·ffmpeg·音视频·流媒体
Devil枫5 小时前
Kotlin高级特性深度解析
android·开发语言·kotlin
ChinaDragonDreamer5 小时前
Kotlin:2.1.20 的新特性
android·开发语言·kotlin
雨白16 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack