当前位置: 首页 > news >正文

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 数据:

  1. 打开 Perfetto UI。

  2. 点击“Open a Trace”按钮,选择你之前保存的 trace 文件 trace.pb

  3. 使用 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 进行更深层次的数据处理。

  1. 示例:使用 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 是一个用于性能分析的工具&#xff0c;提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具&#xff0c;提供更加全面的性能分析功能。以下是如何使用 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第二日

上图为今日所用拓扑 &#xff0c;其中R1和R4&#xff0c;R3和R5为EBGP邻居&#xff0c;R1和R3为IBGP邻居&#xff0c;AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态&#xff1a;建立邻居最初的状态 2.Connect 连接状态&#xff1a;在…...

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述&#xff1a; 因业务需要使用的rabbitmq是3.7.8版本的&#xff0c;rabbitmq在3.3.0之后就允许使用guest账号的权限了&#xff0c;所以需要创建一个administrator标签的用户。 如下操作创建的用户&#xff1a; 创建完成之后就提示如下的报错&#xff1a; 注&#xff1a…...

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考&#xff1a;SecureBoot&#xff1f;多核处理器启动流程&#xff1f;PSCI启动方式&#xff1f; 一般嵌入式系统使用的都是对称多处理器&#xff08;Symmetric Multi-Processor, SMP&#xff09;系统&#xff0c;包含了多个cpu, 这几个cp…...

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…...

Android 内部保持数据的方式

Android内部保持数据的方式主要有五种&#xff0c;每种方式都有其特定的用途和优点。以下是详细的介绍&#xff1a; SQLite数据库 定义&#xff1a;SQLite是一个轻量级的、跨平台的数据库&#xff0c;所有的信息都存储在单一文件内&#xff0c;占用内存小&#xff0c;并且支持…...

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...

beyond Compare连接 openWrt 和 VsCode

连接步骤总结 1. 新建会话 -> 文件夹比较 2.点击浏览文件夹 3.在弹出页面 配置 ftp 3.1&#xff09;选中ftp 配置文件 3.2)选中ssh2 3.3)填写我们需要远端连接的主机信息 先点击连接并浏览 得到下方文件夹 弹出无效登录&#xff0c;说明需要密码 我们返回右键刚刚创建的新 …...

量化机器人能否识别市场机会?

量化机器人的设计和应用是为了通过高级算法和大数据分析&#xff0c;精确地识别和把握市场中的交易机会。这些机器人的能力不仅仅局限于执行预定的交易策略&#xff0c;更包括在复杂和快速变化的市场环境中识别利润机会。 首先&#xff0c;量化机器人能够处理和分析大量的市场…...

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别

OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板&#xff0c;自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力&#xff0c;堪称目前开发板市场中的顶尖性能&#xff0c;实在令人垂涎三尺。如此强大的板子&#xff0c;当然要亲自体验一番。今天非常荣幸地拿到…...

MongoDB教程(二):mongoDB引用shell

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…...

A133 Android10 root修改

1.前言 客户应用需求root相关的权限&#xff0c;我们需要修改系统的权限才可以满足客户需求 2.修改方法 frameworks层&#xff1a;注释掉 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 实验

作者&#xff1a;来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground&#xff0c;这是一个新的低代码界面&#xff0c;开发人员可以通过 A/B 测试 LLM、调整提示&#xff08;prompt&#xff09;和分块数据来迭代和构建生产 RAG 应用程序。今天…...

代理详解之静态代理、动态代理、SpringAOP实现

1、代理介绍 代理是指一个对象A通过持有另一个对象B&#xff0c;可以具有B同样的行为的模式。为了对外开放协议&#xff0c;B往往实现了一个接口&#xff0c;A也会去实现接口。但是B是“真正”实现类&#xff0c;A则比较“虚”&#xff0c;他借用了B的方法去实现接口的方法。A…...

Laravel - laravel-websockets 开发详解

1.我laravel-websockets 的开发环境 Laravel 9.0Laravel WebSockets &#xff08;最新版&#xff09;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 实例并封装成一个可复用的模块&#xff0c;这样可以在整个应用中轻松地进行 API 请求管理。 在 src 目录下创建一个 services 文件夹&…...

键盘快捷键设置录入

效果图&#xff1a; 代码&#xff1a; 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. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;递推公式的含义是[i, j]内的子串是否为回文子串&#xff08;bolean[][])。一共两种情况&#xff1a;s[i] s[j]&#xff0c;i和j相差1以外就得判断中间包含的的字符串是否为回文了&…...

关于transformers库验证时不进入compute_metrics方法的一些坑

生成式任务输入就是标签 transformers在进入compute_metrics前会有一个判断&#xff0c;源码如下&#xff1a; # 版本 transformers4.41.2 # 在trainer.py 的 3842 行 # Metrics! if (self.compute_metrics is not Noneand all_preds is not Noneand all_labels is not Nonea…...

水质溶解氧在线监测仪:实时监测与数据记录解析

水质溶解氧在线监测仪是一款专注于水体溶解氧与水温监测的专业设备&#xff0c;可快速记录水体关键参数&#xff0c;同时支持扩展多种水质参数传感器&#xff0c;能根据不同使用需求灵活组合配置。设备内置存储功能&#xff0c;可留存历史监测数据与报警记录&#xff0c;还支持…...

拆解中金2025财报:飞轮效应,如何驱动高质量增长?

2025年的中国资本市场&#xff0c;有三条主线在交汇&#xff1a;创新驱动、资本市场深化改革、个人养老金全面推开。它们分别指向一家投行必须具备的三种能力——资产端的挖掘、交易端的兑现、资金端的配置。 与此同时&#xff0c;证券行业正在经历一场无声的洗牌。牌照红利在…...

GESP2025年3月认证C++三级( 第三部分编程题(2、词频统计)

一、&#x1f9d9;‍♂️ 故事背景&#xff1a;单词王国选举大会 在“单词王国”里 &#x1f3f0; 有很多单词来参加“最受欢迎单词”比赛&#xff01; &#x1f449; 比如&#xff1a; Apple banana apple Orange banana apple二、&#x1f3af; 任务 &#x1f449; 找出&…...

快速验证机器人抓取创意:用快马平台十分钟构建openclaw技能演示原型

最近在研究机器人抓取技能时&#xff0c;发现openclaw技能大全这个知识库特别实用。但每次想验证一个新抓取动作的可行性&#xff0c;都要从头搭建仿真环境&#xff0c;实在太费时间了。后来尝试用InsCode(快马)平台快速生成原型&#xff0c;十分钟就能看到效果&#xff0c;分享…...

云服务器是如何保障数据安全的

在云服务器中&#xff0c;访问控制机制是重要的安全屏障。云服务商会实施严格的身份认证&#xff0c;用户需要通过密码、密钥、生物识别等多种方式进行身份验证&#xff0c;只有通过验证的用户才能获得相应的操作权限。同时&#xff0c;基于角色的访问控制将用户分配到不同角色…...

4个步骤掌握python-for-android:Python移动应用跨平台部署指南

4个步骤掌握python-for-android&#xff1a;Python移动应用跨平台部署指南 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 1. 问题&#xff1a;Python移动开发…...

AI赋能开发:在快马平台让qun329数据处理更智能

在开发过程中&#xff0c;处理复杂数据是每个开发者都会遇到的挑战。最近我在做一个名为qun329的数据处理项目时&#xff0c;就遇到了数据异常检测、缺失值填充和性能优化等一系列问题。幸运的是&#xff0c;通过InsCode(快马)平台的AI辅助开发功能&#xff0c;这些问题都得到了…...

卡诺图简化逻辑函数详解

你提供的图片是数字逻辑电路教材中关于**卡诺图&#xff08;Karnaugh Map&#xff09;**的内容&#xff0c;主要讲解如何用卡诺图表示和化简逻辑函数。下面我为你逐部分解释&#xff1a;&#x1f4cc; 一、核心概念&#xff1a;什么是卡诺图&#xff1f;卡诺图是一种图形化工具…...

Ai2Psd终极指南:如何将Illustrator矢量图层完美导出到Photoshop

Ai2Psd终极指南&#xff1a;如何将Illustrator矢量图层完美导出到Photoshop 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 还在为AI到PSD的格…...

10080-基于单片机的智能输液监测系统设计(仿真工程文件+原理图工程+源代码工程+详细介绍说明书)

基于单片机的智能输液监测系统设计&#xff08;仿真工程文件原理图工程 10080-基于单片机的智能输液监测系统设计&#xff08;仿真工程文件原理图工程源代码工程详细介绍说明书&#xff09; 功能描述&#xff1a; (1)设计一个光电传感器&#xff0c;置于一次性输液器的漏斗外边…...