当前位置: 首页 > 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…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...