Android中如何通过perfetto抓取trace

2024-02-21 06:36
文章标签 抓取 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秒。

要开始使用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 记录跟踪,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

/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

导出.perfetto-trace文件:

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执行即可。

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

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

duration_ms: 10000buffers: {size_kb: 8960fill_policy: DISCARD
}
buffers: {size_kb: 1280fill_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: 1process_stats_config {scan_all_processes_on_start: true}}
}

注意,这是一个以 .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'

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

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

adb pull /data/local/traces/ .

推荐通过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 memoryadb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

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

使用 ftrace 收集内核信息
使用 atrace 收集服务和应用中的用户空间注释
使用 heapprofd 收集服务和应用的本地内存使用情况信息

这篇关于Android中如何通过perfetto抓取trace的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730868

相关文章

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后