Android上如何使用perfetto分析systrace
Android上如何使用perfetto分析systrace
Perfetto 是一个用于性能分析的工具,提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具,提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南,包括安装、收集、查看和分析 trace 的步骤。
1. 安装 Perfetto 工具
a. 在开发机器上安装 Perfetto
在开发环境中,需要安装 Perfetto 工具。可以从 GitHub 发布页面下载最新版本:
-
下载最新的 Perfetto 二进制文件:Perfetto Releases
-
下载并解压:
wget https://github.com/google/perfetto/releases/download/v<version>/perfetto-linux-x64.zip
unzip perfetto-linux-x64.zip
-
替换
<version>为最新的版本号,例如v24.0.0。
b. 在 Android 设备上安装 Perfetto
Perfetto 通常已内置在 Android 设备中,但如果需要手动安装,可以使用 adb 命令安装最新的 APK:
adb install -r perfetto-<version>-android.apk
可以从 Perfetto Releases 中找到对应的 APK 文件。
2. 收集 Perfetto Trace 数据
a. 使用 ADB 收集 trace 数据
Perfetto 可以从命令行启动并收集 trace 数据。你可以通过以下命令启动 Perfetto trace 捕获:
adb shell perfetto -c /data/misc/perfetto-trace/config.pbtx -o /data/misc/perfetto-trace/trace.pb
-
-c选项指定配置文件路径。你需要一个 Perfetto 配置文件(.pbtxt格式)。 -
-o选项指定输出文件路径。这个文件将保存 trace 数据。
b. 示例 Perfetto 配置文件
可以创建一个简单的配置文件 config.pbtxt,内容如下:
# Perfetto Trace Configbuffers {size_kb: 10240
}data_sources {config {name: "linux.ftrace"ftrace_config {categories: ["*"]}}
}duration_ms: 60000
这个配置文件指定了一个 10MB 的 buffer 和一个 60 秒的 trace 采集时长,并收集所有 Ftrace categories 的数据。
c. 启动 Trace 捕获
在设备上执行以下命令来开始捕获 trace 数据:
adb shell perfetto -c /data/misc/perfetto-trace/config.pbtxt -o /data/misc/perfetto-trace/trace.pb
d. 停止 Trace 捕获
停止 trace 捕获可以通过结束 Perfetto 命令来实现:
adb shell pkill -SIGINT perfetto
3. 分析 Perfetto Trace 数据
a. 使用 Perfetto UI 分析 Trace
Perfetto 提供了一个 Web UI,用于加载和分析 trace 数据:
-
打开 Perfetto UI。
-
点击“Open a Trace”按钮,选择你之前保存的 trace 文件
trace.pb。 -
使用 UI 工具中的不同面板来查看 trace 数据,包括 CPU 活动、Ftrace 信息、Heap 使用等。
b. 使用命令行工具分析 Trace
也可以使用 perfetto 命令行工具生成 HTML 或 JSON 格式的 trace 报告:
./perfetto --txt-to-pb /path/to/config.pbtxt
./perfetto -i /data/misc/perfetto-trace/trace.pb -o /data/misc/perfetto-trace/trace.html
这将把 trace 数据从 .pb 文件转换为 .html 文件,可以在浏览器中查看。
c. 进行深度分析
在 Perfetto UI 中,你可以进行以下分析操作:
-
查看 Timeline:查看各个事件的时间线,理解系统行为。
-
分析 CPU 使用情况:查看 CPU 核心的使用情况,识别性能瓶颈。
-
分析 Ftrace 数据:查看 Ftrace 提供的内核事件数据,诊断系统问题。
-
检查系统调用:查看应用或系统调用的详细信息。
4. 高级分析和优化
a. 使用查询语言分析 Trace
Perfetto 支持 SQL 查询语言,可以对 trace 数据执行复杂的查询:
SELECT * FROM slice WHERE name = 'your_event_name'
b. 结合其他工具
Perfetto 可以与其他性能分析工具结合使用,比如 Android Studio Profiler、adb shell dumpsys 等,以获得更全面的性能数据。
c. 编写自定义脚本分析 Trace
可以编写 Python 脚本来解析和分析 Perfetto trace 数据。Perfetto 提供了 Python API 进行更深层次的数据处理。
-
示例:使用 Perfetto 分析 Systrace 数据
以下是一个完整的示例,从配置到分析 Systrace 数据的步骤:
# 1. 创建 Perfetto 配置文件
echo 'buffers { size_kb: 10240 } data_sources { config { name: "linux.ftrace" ftrace_config { categories: ["*"] } } } duration_ms: 60000' > config.pbtxt# 2. 启动 Trace 捕获
adb shell perfetto -c /data/misc/perfetto-trace/config.pbtxt -o /data/misc/perfetto-trace/trace.pb# 3. 停止 Trace 捕获
adb shell pkill -SIGINT perfetto# 4. 下载 trace 文件到本地
adb pull /data/misc/perfetto-trace/trace.pb .# 5. 使用 Perfetto UI 打开 trace 文件
./perfetto -i trace.pb -o trace.html# 6. 打开 trace.html 文件进行分析
open trace.html
通过以上步骤,可以使用 Perfetto 来高效地收集和分析 Android 系统中的 Systrace 数据,进行深入的性能诊断和优化。
参考文档
-
Perfetto 主页
-
Perfetto GitHub 页面
相关文章:
Android上如何使用perfetto分析systrace
Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具,提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具,提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…...
React Hooks学习笔记
一、usestate的使用方法-初始化state函数 import React, { useState } from "react"; function App() {const [count, setCount] useState(0);return (<div><p>点击{count}次</p><button onClick{() > setCount(count 1)}>点击</bu…...
BGP第二日
上图为今日所用拓扑 ,其中R1和R4,R3和R5为EBGP邻居,R1和R3为IBGP邻居,AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态:建立邻居最初的状态 2.Connect 连接状态:在…...
rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态
问题描述: 因业务需要使用的rabbitmq是3.7.8版本的,rabbitmq在3.3.0之后就允许使用guest账号的权限了,所以需要创建一个administrator标签的用户。 如下操作创建的用户: 创建完成之后就提示如下的报错: 注:…...
ARM功耗管理之多核处理器启动
安全之安全(security)博客目录导读 思考:SecureBoot?多核处理器启动流程?PSCI启动方式? 一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cp…...
java使用easypoi模版导出word详细步骤
文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…...
Android 内部保持数据的方式
Android内部保持数据的方式主要有五种,每种方式都有其特定的用途和优点。以下是详细的介绍: SQLite数据库 定义:SQLite是一个轻量级的、跨平台的数据库,所有的信息都存储在单一文件内,占用内存小,并且支持…...
uniapp 表格,动态表头表格封装渲染
1.接口表格数据: {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...
beyond Compare连接 openWrt 和 VsCode
连接步骤总结 1. 新建会话 -> 文件夹比较 2.点击浏览文件夹 3.在弹出页面 配置 ftp 3.1)选中ftp 配置文件 3.2)选中ssh2 3.3)填写我们需要远端连接的主机信息 先点击连接并浏览 得到下方文件夹 弹出无效登录,说明需要密码 我们返回右键刚刚创建的新 …...
量化机器人能否识别市场机会?
量化机器人的设计和应用是为了通过高级算法和大数据分析,精确地识别和把握市场中的交易机会。这些机器人的能力不仅仅局限于执行预定的交易策略,更包括在复杂和快速变化的市场环境中识别利润机会。 首先,量化机器人能够处理和分析大量的市场…...
香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别
OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板,自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力,堪称目前开发板市场中的顶尖性能,实在令人垂涎三尺。如此强大的板子,当然要亲自体验一番。今天非常荣幸地拿到…...
MongoDB教程(二):mongoDB引用shell
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MongoD…...
A133 Android10 root修改
1.前言 客户应用需求root相关的权限,我们需要修改系统的权限才可以满足客户需求 2.修改方法 frameworks层:注释掉 diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_…...
实验场:在几分钟内使用 Bedrock Anthropic Models 和 Elasticsearch 进行 RAG 实验
作者:来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground,这是一个新的低代码界面,开发人员可以通过 A/B 测试 LLM、调整提示(prompt)和分块数据来迭代和构建生产 RAG 应用程序。今天…...
代理详解之静态代理、动态代理、SpringAOP实现
1、代理介绍 代理是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。为了对外开放协议,B往往实现了一个接口,A也会去实现接口。但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法。A…...
Laravel - laravel-websockets 开发详解
1.我laravel-websockets 的开发环境 Laravel 9.0Laravel WebSockets (最新版)Laravel Vite 2. 安装服务器端包 beyondcode/laravel-websockets 运行以下命令安装laravel-websockets composer require beyondcode/laravel-websockets 安装完后&#…...
vue3 学习笔记04 -- axios的使用及封装
vue3 学习笔记04 – axios的使用及封装 安装 Axios 和 TypeScript 类型定义 npm install axios npm install -D types/axios创建一个 Axios 实例并封装成一个可复用的模块,这样可以在整个应用中轻松地进行 API 请求管理。 在 src 目录下创建一个 services 文件夹&…...
键盘快捷键设置录入
效果图: 代码: import React, {useContext, useEffect, useRef} from react import {message} from "antd"; import lodash from "lodash"; import {StateContext} from ../../index.tsx import {useUpdateEffect} from "ahoo…...
刷题Day49|647. 回文子串、516.最长回文子序列
647. 回文子串 647. 回文子串 - 力扣(LeetCode) 思路:递推公式的含义是[i, j]内的子串是否为回文子串(bolean[][])。一共两种情况:s[i] s[j],i和j相差1以外就得判断中间包含的的字符串是否为回文了&…...
关于transformers库验证时不进入compute_metrics方法的一些坑
生成式任务输入就是标签 transformers在进入compute_metrics前会有一个判断,源码如下: # 版本 transformers4.41.2 # 在trainer.py 的 3842 行 # Metrics! if (self.compute_metrics is not Noneand all_preds is not Noneand all_labels is not Nonea…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
