当前位置:   article > 正文

Android中如何通过perfetto抓取trace

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秒。
  • 1
  • 2

要开始使用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) 上,您需要执行以下操作以确保 在开始之前启用跟踪服务:

# Needed only on Android 9 (P) and 10 (Q) on non-Pixel phones.
adb shell setprop persist.traced.enable 1
  • 1
  • 2

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 记录跟踪

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
  • 1
  • 2

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

生成.perfetto-trace文件:

adb shell perfetto gfx input view wm am ss sched freq idle binder_driver res rs  -o /data/misc/perfetto-traces/trace -t 10s
  • 1

导出.perfetto-trace文件:

adb pull /data/misc/perfetto-traces/trace ~/trace
  • 1

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

cat config.pbtx | adb shell perfetto -c - --txt -o /data/misc/perfetto-traces/trace.perfetto-trace
  • 1

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

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
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

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

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'
  • 1
  • 2

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

1.2.3 System Tracing 的系统级应用抓取
启用开发者选项(如果尚未启用此选项)
打开开发者选项设置
在调试部分中,选择 System Tracing (系统跟踪)。此时会打开 System Tracing 应用,其中显示了应用菜单。
在应用菜单中,启用 显示 “快捷设置”图块
在这里插入图片描述启用录制跟踪记录开关,该图块会变为启用状态,并且系统会显示常驻通知,通知您系统正在录制跟踪记录
完成这些操作后,可通过停用录制跟踪记录开关来停止跟踪
在这里插入图片描述
使用 ADB 导出报告

adb pull /data/local/traces/ .
  • 1

推荐通过perfetto命令抓取perfetto trace
执行抓取命令

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
  • 1
  • 2
  • 3

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

使用 ftrace 收集内核信息
使用 atrace 收集服务和应用中的用户空间注释
使用 heapprofd 收集服务和应用的本地内存使用情况信息
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/122443
推荐阅读
相关标签
  

闽ICP备14008679号