Android性能分析工具-Perfetto基本使用

文章目录

  • 一、Perfetto介绍
  • 二、抓取方法
    • 2.1 手机端直接抓取
      • 2.1.1 打开系统跟踪
      • 2.1.2 开始录制
    • 2.2 使用 adb 抓取
    • 2.3 通过 Perfetto 网页自定义抓取
  • 三、trace分析方法
    • 3.1 打开trace文件
    • 3.2 查看方法

一、Perfetto介绍

  Perfetto 是一个用于性能检测和跟踪分析的生产级开源堆栈。它提供用于记录系统级和应用级跟踪的服务和库、本机 + Java 堆分析、使用 SQL 分析跟踪的库以及用于可视化和探索多 GB 跟踪的基于 Web 的 UI。
在这里插入图片描述
主要特点:

  • 可以在线抓取长时间的trace:可以长达一个小时,另外抓取的文件size也可以达到GB级别,这样就可以在后台开启,让它一直抓取trace了,特别适用于那种复现概率很低,又比较严重的性能问题。

  • Perfetto具有很好的可扩展性:它除了提供标准的tracepoints之外,例如CPU调度信息,内存信息等,还可以通过atrace HAL层扩展,在Android P当中,Google新增加了一个atrace HAL层,atrace进程可以调用这个HAL的接口来获取当前的扩展信息,相关代码可见Google 提交,这样如果需要扩展tracepoints的话,就可以按照graphic的示例添加即可。

  • 提供全新的Perfetto UI网站:可以在上面通过选取开关的方式,自动生成抓取trace的命令,同时可以打开trace文件,自动把protobuf或者json转变成UI,另外还集成了几种预定义的trace分析统计工具,详情可见它的 Metrics and auditors 选项。

  Perfetto本身是一个框架,关于它的架构和模块的详细介绍,有兴趣的可以参考它的doc网站,它的源码可以参考Android Source Tree的 /external/perfetto 目录,里面有很多的tools和脚本,可以拿来直接使用,本文只对这个工具做简单的使用介绍。

doc网站地址:https://perfetto.dev/docs/

二、抓取方法

2.1 手机端直接抓取

2.1.1 打开系统跟踪

方法1:在开发者选项中打开

  • 打开开发者选项
  • 进入开发者选项,选择系统跟踪(System tracing),开启显示“快捷设置”图块(Show Quick Setting tile)
  • 打开顶部下滑菜单快捷设置面板的快捷图标,或者打开开发者选项系统跟踪(System tracing)录制跟踪记录(Record trace)
  • 通知面板会出现一个系统跟踪通知,点击可以开始和停止录制

方法2:通过adb命令打开
adb shell am start com.android.traceur/com.android.traceur.Main Activity

对应的界面如下:
在这里插入图片描述
选中显示“快捷设置”图块,会在控制中心显示快速抓取trace图块:
在这里插入图片描述

2.1.2 开始录制

在这里插入图片描述
在这里插入图片描述
数据保存位置/data/local/traces
在这里插入图片描述
到处trace文件:adb pull /data/local/traces .

2.2 使用 adb 抓取

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 60s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

-o /data/misc/perfetto-traces/trace_file.perfetto-trace:输出trace的路径
-t 60s:最多抓取时长,可以Ctrl+C停止
sched ... memory:要抓取相关模块
更多配置说明,参见文档:https://perfetto.dev/docs/concepts/config

2.3 通过 Perfetto 网页自定义抓取

通过Perfetto UI网站可以帮助生成配置文件,点击 Record new trace会看到很多配置界面
在这里插入图片描述
方法1:自动生成命令,然后终端执行
选择想要的tracepoints之后,点击Recording command,将命令拷贝出来直接在终端就可以执行,完成之后分析/data/misc/perfetto-traces/trace文件
在这里插入图片描述
在这里插入图片描述

adb shell perfetto \-c - --txt \-o /data/misc/perfetto-traces/trace \
<<EOFbuffers: {size_kb: 63488fill_policy: DISCARD
}
buffers: {size_kb: 2048fill_policy: DISCARD
}
data_sources: {config {name: "android.packages_list"target_buffer: 1}
}
data_sources: {config {name: "android.power"android_power_config {battery_poll_ms: 1000battery_counters: BATTERY_COUNTER_CAPACITY_PERCENTbattery_counters: BATTERY_COUNTER_CHARGEbattery_counters: BATTERY_COUNTER_CURRENTcollect_power_rails: true}}
}
data_sources: {config {name: "linux.process_stats"target_buffer: 1process_stats_config {scan_all_processes_on_start: true}}
}
data_sources: {config {name: "linux.sys_stats"sys_stats_config {stat_period_ms: 1000stat_counters: STAT_CPU_TIMESstat_counters: STAT_FORK_COUNTcpufreq_period_ms: 1000}}
}
data_sources: {config {name: "linux.ftrace"ftrace_config {ftrace_events: "sched/sched_switch"ftrace_events: "power/suspend_resume"ftrace_events: "sched/sched_wakeup"ftrace_events: "sched/sched_wakeup_new"ftrace_events: "sched/sched_waking"ftrace_events: "power/cpu_frequency"ftrace_events: "power/cpu_idle"ftrace_events: "power/gpu_frequency"ftrace_events: "raw_syscalls/sys_enter"ftrace_events: "raw_syscalls/sys_exit"ftrace_events: "sched/sched_process_exit"ftrace_events: "sched/sched_process_free"ftrace_events: "task/task_newtask"ftrace_events: "task/task_rename"buffer_size_kb: 2048drain_period_ms: 250}}
}
duration_ms: 10000EOF

方法2:网页连接设备直接抓取
“Add ADB Device” 选择手机设备,如下图,其中有一些参数配置,根据自己的需要添加修改
在这里插入图片描述
最后点击右上角 “Start Recording”

三、trace分析方法

3.1 打开trace文件

在Open trace file中打开pull出来的trace
在这里插入图片描述
打开以后,就可以分析其中的数据:
在这里插入图片描述

3.2 查看方法

基本操作通过“W”、“S”、“A”、“D”实现,英文键盘下,w可以实现对trace范围的放大,s可以缩小范围,a整体左移,d整体右移。
基本操作还有疑问,可以在页面中shift+/ ,也就是“?”,通过官方提供的操作指南可以学习基本操作。
在这里插入图片描述
左键单击某个线程,既可看到详细信息,例如耗时等。再shift+M,可以精准标注该线程,使用鼠标左键长按整个区间,选择在需要分析的部分长按,既可获取在此期间的各个进程的操作,如图所示就是在still capture期间内CPU负载的具体情况,如果想看此时CPU 频率,左键长按在CPU Frequency上既可查看期间内频率的变化。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Call_once

call_once和once_flag的声明 struct once_flag {constexpr once_flag() noexcept;once_flag(const once_flag&) delete;once_flag& operator(const once_flag&) delete; }; template<class Callable, class ...Args>void call_once(once_flag& flag, …

程序员如何用ChatGPT解决常见编程问题:实例解析

引言 在现代编程的世界中&#xff0c;技术进步日新月异&#xff0c;程序员们面临着各种各样的挑战和问题。解决这些问题的过程中&#xff0c;找到合适的工具至关重要。ChatGPT作为一种先进的人工智能语言模型&#xff0c;能够帮助程序员迅速、高效地解决常见的编程问题。本文将…

windows10/win11截图快捷键 和 剪贴板历史记录 快捷键

后知后觉的我今天又学了两招&#xff1a; windows10/win11截图快捷键 按 Windows 徽标键‌ Shift S。 选择屏幕截图的区域时&#xff0c;桌面将变暗。 默认情况下&#xff0c;选择“矩形模式”。 可以通过在工具栏中选择以下选项之一来更改截图的形状&#xff1a;“矩形模式”…

深度神经网络(dnn)--风格迁移(简单易懂)

概括 深度神经网络&#xff08;DNN&#xff09;在风格迁移领域的应用&#xff0c;实现了将一幅图像的艺术风格迁移到另一幅图像上的目标。该技术基于深度学习模型&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;通过提取内容图像的内容特征和风格图像的…

Python+Pytest+Yaml+Request+Allure+GitLab+Jenkins接口自动化测试框架概解

PythonPytestYamlAllure整体框架目录&#xff08;源代码请等下篇&#xff09; 框架详解 common:公共方法包 –get_path.py:获取文件路径方法 –logger_util.py:输出日志方法 –parameters_until.py&#xff1a;传参方式方法封装 –requests_util.py&#xff1a;请求方式方法封…

星坤Type-A连接器:创新快充技术,引领电子连接!

快速发展的电子时代&#xff0c;消费者对电子设备的性能和便利性有着更高的要求。特别是在充电和数据传输方面&#xff0c;快充技术和高速传输已成为市场的新宠。中国星坤公司推出的Type-A连接器系列&#xff0c;以其卓越的性能和创新的设计&#xff0c;满足了市场对高效、稳定…

天润融通:AI赋能客户体验,推动企业收入和业绩增长

“客户体验已经成为全球企业差异化的关键。人工智能与数据分析等创新技术正在加速推动企业在客户体验计划中取得成功&#xff0c;以保持领先地位”。Customer Insights & Analysis 研究经理Craig Simpson说道。 客户体验 (CX&#xff0c;Customer Experience) 是客户在与企…

charles抓包

1、去官网下载最新版本&#xff0c;避免出现不必要的问题 2、mac 上charles 的菜单栏在最顶上 3、mac 上安装根证书不受信任 双击下不受信任的正证书&#xff0c;点开信任小文字&#xff0c;然后把下面的这些全部设置为始终信任 4、手机上安装证书 先把wifi代理设置好 如果安…

条码二维码读取设备在医疗设备自助服务的重要性

医疗数字信息化建设的深入推进&#xff0c;医疗设备自助服务系统已成为医疗服务领域的一大趋势&#xff0c;条码二维码读取设备作为自助设备的重要组成部分&#xff0c;通过快速、准确地读取条形码二维码信息&#xff0c;不公提升了医疗服务效率&#xff0c;还为患者提供了更加…

深度相机辅助导航避障(三):地面点云滤除

前面的章节介绍了坐标变换,以及如何设置深度相机的坐标变换。那就可以很直观从机器人的坐标系对深度相机扫描到的障碍物点云进行处理。 在实际应用中,机器人正确估计周围地形,对于道路的可通过性、路径规划和障碍物检测等方面都很重要。那么在获取深度相机点云数据后就得准…

绕过命令过滤器:探索UnixLinux中的Bypass技术

前言 在Unix或Linux系统的安全测试和网络防御中&#xff0c;了解如何绕过命令过滤器是非常重要的。今天&#xff0c;我们将探讨几种利用shell命令绕过安全限制的技巧&#xff0c;这些技巧常用于渗透测试中&#xff0c;以检测系统的安全漏洞。 0x00 命令介绍 一般而言&#x…

学生选课管理系统(JAVA课设)PS:有前端界面

1.课设要求描述 实现系统的所有功能&#xff0c;包括但不限于&#xff1a; 学生信息管理&#xff08;增加、删除、修改、查询&#xff09;课程信息管理选课操作成绩管理 2.制作思路及基础讲解 此项目主要是用于完成大二下半学期的JAVA大作业&#xff0c;也可当作课设&…

树莓派pico入坑笔记,uart使用

uart原理自行百度&#xff0c;相关内容很多其他博主写过并且质量很高&#xff0c;这里不再赘述。 调用circuitpy的busio模块来使用uart&#xff0c;除此以外&#xff0c;spi、iic等要需要使用该模块&#xff0c;使用方法见 官方教程 &#xff0c;详细信息见文档 官方的例子简…

文本生成图像综述

本调查回顾了扩散模型在生成任务中广泛流行的背景下文本到图像的扩散模型。作为一份自成一体的作品&#xff0c;本调查首先简要介绍了基本扩散模型如何用于图像合成&#xff0c;然后介绍了条件或指导如何改善学习。基于这一点&#xff0c;我们介绍了文本到图像生成方面的最新方…

# 深入理解 Java 虚拟机 (二)

深入理解 Java 虚拟机 &#xff08;二&#xff09; Java内存模型 主内存与工作内存 所有的变量存储在主内存&#xff08;虚拟机内存的一部分&#xff09;每条线程有自己的工作内存&#xff0c;线程对变量的所有操作&#xff08;读取、赋值&#xff09;都必须在工作内存中进行…

VMware Windows sever 虚拟机互联网连接配置

一、VMware配置 1、虚拟网络编辑 从左上角 编辑→虚拟网络编辑器 进入 2、配置NAT模式 配置的子网IP&#xff0c;在虚拟机中获取到的ip跟子网IP的前三个是一样的 1.配置网关 2.配置DHCP设置 这个主要是分配ip最后一位获取的区间 3、虚拟机配置 二、Windows Server 虚拟机配置…

【Linux】进程 | 控制块pcb | task_struct | 创建子进程fork

目录 Ⅰ. 进程的概念&#xff08;Process&#xff09; 1. 什么是进程&#xff1f; 2. 多进程管理 3. 进程控制块&#xff08;PCB&#xff09; task_struct 的结构 Ⅱ. 进程查看与管理 1. 使用指令查看进程 2. /proc 查看进程信息 3. 获取进程 ID 4. 创建子进程 原因&…

STM32启动流程 和 map文件的作用

一&#xff0c;启动流程 1. 复位/上电 2. 根据 BOOT0/BOOT1 确定程序从哪个存储位置执行 3. 初始化 SP 及 PC 指针 将 0X08000000 位置的栈顶地址存放在 SP 指针中 将 0x08000004 位置存放的向量地址装入 PC 程序计数器 4. 初始化系统时钟 5. 初始化用户堆栈 6. 进入main函数 二…

Jmeter TCP接口测试-实例

1、TCP接口结构 TCP接口&#xff1a;只有IP和PORT 传参数据类型根据开发定义的类型 需要添加一个ascii码的十进制字节结束符&#xff0c;tcp才会关闭 2、TCP接口环境搭建 在testfan-tcp-server.jar目录下&#xff0c;启动cmd命令行&#xff0c;输入&#xff1a; java -jar…

如何在 SwiftUI 视图中显示应用图标和版本

文章目录 前言获取应用图标获取应用版本创建 SwiftUI 视图总结前言 在应用中显示应用图标和版本是为用户提供快速识别应用版本和变体的好方法,无论是内部用户(如测试人员或利益相关者)还是外部用户。 在本文中,我将展示如何创建一个可访问的 SwiftUI 视图,既能显示应用图…