Android性能优化--Perfetto用SQL性能分析

Android性能优化–Perfetto用SQL性能分析

文章目录

  • Android性能优化--Perfetto用SQL性能分析
    • 介绍
    • Perfetto SQL 基础
    • 使用 Perfetto SQL 进行性能分析
    • 总结

本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134167741
最新更新地址 https://gitee.com/chenjim/chenjimblog
Perfetto 抓取 trace 可参考 https://blog.csdn.net/CSqingchen/article/details/128900541

介绍

Perfetto 是一个由 Google 开发的高性能、可扩展的事件追踪系统,用于在实时和离线场景下监控系统的性能。
它通过一种简单且强大的查询语言(称为 SQL)来分析和查询事件数据。
在本博客中,我们将深入探讨如何使用 SQL 在 Perfetto 中进行性能分析。

Perfetto SQL 基础

Perfetto SQL 是一种用于查询事件数据的语言,它支持大多数标准的 SQL 操作,
如 SELECT、FROM、WHERE、GROUP BY、ORDER BY 等。
在 Perfetto 中,数据以表格的形式存储,因此你可以使用 SQL 来检索和操作这些数据。
下面是一个简单的 Perfetto SQL 查询示例:
SELECT ts, dur, name FROM slice WHERE ts > 85545835986081 AND ts < 85546017415330
ts, dur, name 是挑选的字段,slice 是挑选的表名

示例 trace 文件可以在 data/perfetto下载 xiaomi13.camera.trace.7z
解压后,在 https://ui.perfetto.dev/ 打开

可以使用如下命令查看表中有哪些字段
SELECT * FROM slice LIMIT 10

如果 trace 中包含 android log,还可以用如下命令过滤日志
SELECT * FROM android_logs WHERE msg LIKE "%ProcessRequest%" LIMIT 30

trace 中有哪些表可用,以及各个字段是什么关系呢,可以参考
https://perfetto.dev/docs/analysis/sql-tables
其中 Event 关系图如下

使用 Perfetto SQL 进行性能分析

使用 Perfetto SQL 进行性能分析的关键在于理解如何构造查询以获取你需要的信息。
以下是一些常见的性能分析任务和相应的 SQL 查询示例:

  1. 分析特定事件的发生频率:
    SELECT COUNT(*) FROM slice WHERE name = 'waitForNextFrame'
    waitForNextFrame 一共有多少次
  2. 分析事件的性能数据:
    SELECT (dur/1e6) FROM slice WHERE name = 'waitForNextFrame'
    每次 waitForNextFrame 耗时多少毫秒。dur单位是纳秒
  3. 分析一段时间内的事件数据:
    SELECT MIN(dur/1e6) as min_duration, MAX(dur/1e6) as max_duration, AVG(dur/1e6) as avg_duration FROM slice WHERE name = 'waitForNextFrame' and dur > 0
    显示 waitForNextFrame 最小、最大、平均值
  4. 对事件进行排序:
    SELECT (dur/1e6),ts,name FROM slice WHERE name LIKE '%wait%' and dur > 0 ORDER by dur DESC
  5. 统计 CPU 时间
     DROP VIEW IF EXISTS slice_with_utid;CREATE VIEW slice_with_utid ASSELECTts,dur,slice.name as slice_name,slice.id as slice_id, utid,thread.name as thread_nameFROM sliceJOIN thread_track ON thread_track.id = slice.track_idJOIN thread USING (utid);DROP TABLE IF EXISTS slice_thread_state_breakdown;CREATE VIRTUAL TABLE slice_thread_state_breakdownUSING SPAN_LEFT_JOIN(slice_with_utid PARTITIONED utid,thread_state PARTITIONED utid);SELECT slice_id, slice_name, SUM(dur) AS cpu_timeFROM slice_thread_state_breakdownWHERE state = 'Running'GROUP BY slice_id;
    

基本都是 SQL 语句,SQL关键字含义可以参考 https://www.w3schools.cn/sql/

总结

使用 Perfetto 和 SQL 进行性能分析是一种强大而灵活的方法。
通过理解如何构造 SQL 查询,你可以轻松地获取你需要的信息,从而更好地理解系统的性能。
在 Perfetto 中使用 SQL 进行性能分析可以帮助你更好地理解系统的性能,并找出潜在的性能问题。

相关文章
Android性能优化–Perfetto抓取trace
Android性能优化–perfetto分析native内存泄露
Android性能优化–Perfetto用SQL性能分析

参考文章
https://perfetto.dev/docs/quickstart/trace-analysis
https://perfetto.dev/docs/analysis/common-queries
https://zhuanlan.zhihu.com/p/641412977
https://yiyan.baidu.com/share/gdFw3P5ucI

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

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

相关文章

力扣日记11.5-【二叉树篇】二叉树的迭代遍历

力扣日记&#xff1a;【二叉树篇】二叉树的迭代遍历 日期&#xff1a;2023.11.5 参考&#xff1a;代码随想录、力扣 144. 二叉树的前序遍历 题目描述 难度&#xff1a;简单 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 提示&#xff1a; 树中节点数目在…

Git(七).git 文件夹瘦身,GitLab 永久删除文件

目录 一、问题背景二、问题复现2.1 新建项目2.2 上传大文件2.3 上传结果 三、解决方案3.1 GitLab备份与还原1&#xff09;备份2&#xff09;还原 3.2 删除方式一&#xff1a;git filter-repo 命令【推荐】1&#xff09;安装2&#xff09;删除本地仓库文件3&#xff09;重新关联…

将 UniLinks 与 Flutter 集成(安卓 AppLinks + iOS UniversalLinks)

让我们使用 Flutter Mobile 和 Flutter Web 集成 UniLinks。 一步一步的指导&#xff01; 我是 Pedro Dionsio&#xff0c;是葡萄牙 InspireIT 公司的 Flutter 开发人员&#xff0c;我写这个 UniLinks 教程的座右铭是&#xff1a; Firebase DynamicLinks 已被弃用&#xff0…

机器学习笔记 - 感知器的数学表达

一、假设前提 感知机(或称感知器,Perceptron)是Frank Rosenblatt在1957年就职于Cornell航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络。 它可以被视为一种最简单形式的前馈神经网络,是一种二元线性分类模型,其输入为实例的特征向量,输出为实…

206. 反转链表 --力扣 --JAVA

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 解题思路 先排除特殊情况&#xff1a;当前链表包含节点数小于等于&#xff1b;获取末尾节点&#xff0c;即反转后的头节点&#xff1b;通过递归来反转节点间的上下级关系&#xff1b;…

同为科技(TOWE)自动断电倒计时定时桌面PDU插排

在每个家庭中&#xff0c;插排插座都是必不可少的电源设备。随着各种电器的普及应用和生活节奏的加快&#xff0c;人们对插排也有着多样化的需求&#xff0c;比如在插排中加入定时开关、自动断电、断电记忆、倒计时等等功能&#xff0c;让原本不支持智能家居的用电器秒变智能。…

Mysql高级——Mysql8一主一从,多主多从搭建

修改 /etc/hosts文件 ip地址 master1 ip地址 master2 ip地址 slave1 ip地址 slave2一主一从 create database master1db;create table master1db.master1tab(name char(50));insert into master1db.master1tab VALUES(1111);insert into master1db.master1tab VALUES(2222);m…

重复的DNA序列

问题&#xff1a; DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分…

Linux命令--mkdir创建目录的方法

原文网址&#xff1a;Linux命令--mkdir创建目录的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Linux创建目录命令--mkdir的用法。 格式 mkdir [选项] 目录… -m, –mode模式&#xff0c;设定权限<模式> (类似 chmod)&#xff0c;而不是 rwxrwxrwx 减 umask-p, --p…

按键开发环境搭建

雷电模拟器 创建虚拟机 2.设置root权限 打开按键精灵连接虚拟机 开启悬浮 mumu模拟器操作 查找端口方法 adb connect 127.0.0.1:16416 设置-应用-所有应用-按键精灵-开启悬浮 步骤二&#xff1a;开启root 处理未root&#xff1a;中途如果有如下未root的情况&#x…

基于SSM的网吧计费管理系统(有报告)。Javaee项目,ssm项目。

演示视频&#xff1a; 基于SSM的网吧计费管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通…

软件测试的目的---防范项目风险

软件测试的目的到底是什么一直是困扰开发人员和测试人员的一个问题, 项目管理人员希望测试能够保证软件项目的成功 开发人员希望希望测试可以让他们理直气壮的说,他们的软件是没有问题的,从而证明他们的工作成果 软件测试经典理论说,测试无法证明软件是没有问题,而只能证明软…

P6462补刀

灵光一现,突然就做出来了 正好写一下思路过程 一开始寻思是个数论的问题,貌似需要用到扩展欧几里得,不管那么多,直接写上,接着不断缝缝补补修修改改,此处省略一小时.... 做不出来....好难受 星期天,无聊,做个题.. 突然,不对啊 这个题实际上不就是我当前打还是不打的一个选…

Monarch Mixer:一种性能比Transformer更强的网络架构

六年前&#xff0c;谷歌团队在arXiv上发表了革命性的论文《Attention is all you need》。作为一种优势的机器学习网络架构&#xff0c;Transformer技术迅速席卷全球。Transformer一直是现代基础模型背后的主力架构&#xff0c;并且在不同的应用程序中取得了令人印象深刻的成功…

OCS2工具箱

实时系统优化控制工具箱 参考视频&#xff1a;ETH 最优控制/MPC 实时求解器 OCS2 使用入门 参考文档&#xff1a;OCS2 求解器入门 选择OCS2 OCS2 是一个 MPC 实时求解器 (SLQ/iLQR)&#xff0c;依赖 Pinocchio 构建机器人动力学模型&#xff0c;采用 RViz 或者 RaiSim 验证 (…

[LeetCode] 2.两数相加

一、题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个…

react native引用原生组件时无法显示的问题处理

最近有个需求&#xff0c;要在react native中嵌入一个原生的视频组件&#xff0c;同事嵌入后发现有问题&#xff1a; 内容无法显示 https://musicfe.com/rn-android-webview 参考这个方法,在嵌入之后调用一下。 public void manuallyLayoutChildren(View view) {int width v…

【前端笔记】ant-design-vue 3.x使用modal.method()自定义content内容小记

在一次编写业务代码时&#xff0c;碰到了一种既想要Modal.success样式&#xff0c;有想要定制其content内容的情况。 大部分情况下&#xff0c;使用Modal.method()这种方式时&#xff0c;可能content内容固定都是字符串&#xff0c;那如果想要做更高级的交互怎么办&#xff1f…

1.计算机系统概述

目录 一. 计算机的发展 二. 计算机硬件的基本组成 三. 各个硬件的工作原理 &#xff08;1&#xff09;主存储器 &#xff08;2&#xff09;运算器 &#xff08;3&#xff09;控制器 &#xff08;4&#xff09;一个例子 四. 计算机系统的层次结构 五. 计算机的性能指标…

【Mysql】Mysql中表连接的原理

连接简介 在实际工作中&#xff0c;我们需要查询的数据很可能不是放在一张表中&#xff0c;而是需要同时从多张表中获取。下面我们以简单的两张表为例来进行说明。 连接的本质 为方便测试说明&#xff0c;&#xff0c;先创建两个简单的表并给它们填充一点数据&#xff1a; …