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

news2025/2/23 19:28:58

文章目录

  • 一、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 \
<<EOF

buffers: {
    size_kb: 63488
    fill_policy: DISCARD
}
buffers: {
    size_kb: 2048
    fill_policy: DISCARD
}
data_sources: {
    config {
        name: "android.packages_list"
        target_buffer: 1
    }
}
data_sources: {
    config {
        name: "android.power"
        android_power_config {
            battery_poll_ms: 1000
            battery_counters: BATTERY_COUNTER_CAPACITY_PERCENT
            battery_counters: BATTERY_COUNTER_CHARGE
            battery_counters: BATTERY_COUNTER_CURRENT
            collect_power_rails: true
        }
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}
data_sources: {
    config {
        name: "linux.sys_stats"
        sys_stats_config {
            stat_period_ms: 1000
            stat_counters: STAT_CPU_TIMES
            stat_counters: STAT_FORK_COUNT
            cpufreq_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: 2048
            drain_period_ms: 250
        }
    }
}
duration_ms: 10000

EOF

方法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.coloradmin.cn/o/1866471.html

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

相关文章

CSS 文本输入框右下角的尺寸控件(三斜线:-webkit-resizer)消除,以及如何配置其样式,添加 resize 让标签元素可进行拖拽放大。

前言&#xff1a;在日常的前端开发中&#xff0c;不管是原始的和 还在在各类组件库中的文本输入框中&#xff0c;元素内容的右下角总是有一个三斜线的样式&#xff0c;本文简单了解它是什么&#xff1f;如何去控制并修改样式&#xff1f; 一、它是&#xff1f; 这三个斜线其实…

python---OpenCv(二),背景分离方法较有意思

目录 边界矩形 旋转矩形(最小外接矩形): 计算轮廓 找4个点的坐标 把浮点型转为Int 画轮廓 边界矩形--&#xff08;最大外接矩形&#xff09; 转灰度 找轮廓 找顶点 画矩形 显示 背景分离方法&#xff08;这个很好玩&#xff0c;可以识别在动的物体&#xff09; 边…

如何提高项目风险的处理效率?5个重点

提高项目风险的处理效率&#xff0c;有助于迅速识别和应对风险&#xff0c;减少风险导致的延误&#xff0c;降低成本&#xff0c;提升项目质量&#xff0c;确保项目按时交付。如果项目风险处理效率较低&#xff0c;未能及时发现和处理风险&#xff0c;导致问题累积&#xff0c;…

文化财经wh6boll带macd多空转折点提示指标公式源码

文化财经wh6boll带macd多空转折点提示指标公式源码&#xff1a; DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA); MID:MA(CLOSE,26);//求N个周期的收盘价均线&#xff0c;称为布林通道中轨 TMP2:STD(CLOSE,26);//求M个周期内的收盘价的标准差 …

【计算机网络体系结构】计算机网络体系结构实验-www服务器配置管理实验

一、实验内容 www服务器配置管理&#xff0c; wireshark数据包分析 二、实验目的 1. 了解WWW服务的体系结构与工作原理&#xff0c;掌握利用Microsoft的IIS实现WWW服务的基本配置&#xff0c;掌握WEB站点的管理 2. 利用Wireshark抓取http数据包进行分析。运行软件Wireshark…

ARM 240625

练习&#xff1a; 汇编实现1-100累加&#xff0c;结果保存在r0 .text 声明下面内容都属于文本段内容 .globl _start 声明 _start 是一个全局启用的标签_start: 封装 _start 标签&#xff0c;汇编的标签和C中函数类似mov r0,#0 mov 把0 搬运到 r0 寄存器mov r1,#1 mov 把1 …

postman汉化中文(Windows)

Postman 是一款专业的 API 开发工具&#xff0c;为开发者提供了创建、测试、调试和分享 HTTP 请求的便利性和灵活性。其主要功能包括请求构建与发送、自动化测试、团队协作与分享、实时监视与调试以及环境与变量管理。无论是个人开发者还是团队&#xff0c;Postman 都能有效地提…

Fragment与ViewModel(MVVM架构)

简介 在Android应用开发中&#xff0c;Fragment和ViewModel是两个非常重要的概念&#xff0c;它们分别属于架构组件库的一部分&#xff0c;旨在帮助开发者构建更加模块化、健壮且易维护的应用。 Fragment Fragment是Android系统提供的一种可重用的UI组件&#xff0c;它能够作为…

【第14章】探索新技术:如何自学SD3模型(找官方资料/精读/下载/安装/3款工作流/效果测试)ComfyUI基础入门教程

近期,也就是2024年6月12日,StabilityAI开源了最新的SD3模型的2B版本,而神奇的是,ComfyUI早在6月11号就已经适配了SD3!相比之下,SD WebUI 的更新速度却远远落后... 所以,如果想要尝试一些AI绘画领域的新技术,ComfyUI是一个非常值得投入时间学习的工具。 这节课,我们就…

Ascend基于自定义算子工程的算子开发

环境准备 见https://gitee.com/zaj1414904389/ascend-tutorial.git 工程创建 CANN软件包中提供了工程创建工具msopgen&#xff0c;开发者可以输入算子原型定义文件生成Ascend C算子开发工程 [{"op": "AddCustom","input_desc": [{"name…

2024全网最全面及最新且最为详细的网络安全技巧四 之 sql注入以及mysql绕过技巧 (2)———— 作者:LJS

目录 4.5 DNS记录类型介绍(A记录、MX记录、NS记录等&#xff0c;TXT&#xff0c;CNAME&#xff0c;PTR) 4.5.1 DNS 4.5.2 A记录 4.5.3NS记录 4.5.4 MX记录 4.5.5 CNAME记录 4.5.6 TXT记录 4.5.7 泛域名与泛解析 4.5.8域名绑定 4.5.9 域名转向 4.6 Mysql报错注入之floor报错详解…

基于Java影院管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

若依框架自定义左侧导航栏图标,并变色

若依框架中&#xff0c;有时候设计图跟若依框架自带的图标不一样&#xff0c;需要替换掉&#xff0c;问题来了&#xff0c;怎么替换&#xff0c;并变色&#xff1f; 1、设计师给的图标的路径必须是合并的&#xff0c;非多个路径&#xff0c;这样我们下载下来的svg图才有只有一个…

msvcr110.dll丢失的解决方法,亲测有效的几种解决方法

最近&#xff0c;我在启动一个程序时&#xff0c;系统突然弹出一个错误提示&#xff0c;告诉我电脑缺失了一个名为msvcr110.dll的文件。这让我感到非常困惑&#xff0c;因为我之前从未遇到过这样的问题。经过一番搜索和尝试&#xff0c;我总结了5种靠谱的解决方法。下面分享给大…

平凉小果子,平凡中的惊艳味道

平凉美食小果子&#xff0c;这看似平凡的名字背后&#xff0c;藏着无数平凉人的美好回忆。它不仅仅是一种食物&#xff0c;更是一种情感的寄托&#xff0c;一种文化的传承。小果子的制作过程看似简单&#xff0c;实则蕴含着深厚的功夫。选用优质的面粉作为主要原料&#xff0c;…

vue3-openlayers 要素聚合(cluster)、icon聚合

本篇介绍一下使用vue3-openlayers 要素聚合&#xff08;cluster&#xff09;&#xff0c;icon聚合 1 需求 要素聚合&#xff08;cluster&#xff09;&#xff0c;icon聚合 2 分析 使用ol-source-cluster 4 实现 <template><ol-map:loadTilesWhileAnimating"…

Redis数据库(五):Redis数据库基本特性

这一节我们来介绍如何使用C语言的库来操作Redis数据库。 目录 一、hiredis的安装 1.1 下载源码 1.2 解压 1.3 进入hiredis路径下 1.4 利用makefile文件进行编译 二、接口介绍 三、C程序操作Redis代码 四、redis.conf配置文件详解 五、Redis的持久化 5.1 RDB &#x…

优思学院|精益生产3大特征、5个步骤、8大浪费、10大工具

前言 精益生产作为一种先进的生产管理理念&#xff0c;起源于丰田汽车公司的生产方式&#xff0c;其核心在于消除浪费、优化流程&#xff0c;以最少的投入获取最大的产出。本文将详细解析精益生产的三大特征、五个步骤、八大浪费和十大工具&#xff0c;帮助读者深入理解这一理…

【java计算机毕设】学生作业管理系统java MySQL ssm JSP maven项目源代码+文档

1项目功能 【java计算机毕设】学生作业管理系统java MySQL ssm JSP maven 项目设计源代码 文档 期末小组作业 2项目介绍 系统功能&#xff1a; 学生作业管理系统包括管理员、小管理员、教师、学生四种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、管理员管理、学…

DWC USB2.0协议学习2--架构介绍

目录 1 系统级架构 1.1 DWC_otg PMU模块 1.2 DWC_otg层次结构框图 1.3 DWC_otg功能模块框图 1.4 USB Host体系结构 1.4.1 发送FIFO 1.4.2 接收FIFO 1.5 USB Device体系结构 1.5.1专用发送FIFO 1.5.2 单个接收FIFO 2 DWC_otg_core架构 2.1 AHB总线接口单元(BIU) 2.2…