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.hqwc.cn/news/160560.html

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

相关文章

IOS渲染流程之提交图层数据至RenderThread进程

大致链路 UIView/CALayer---->CoreAnimation./Core Graphics/Core Image---->GPU Drive-->GPU 图层树/视图树 一个UIView&#xff08;视图&#xff09;对应一个CALayer&#xff08;图层&#xff09;&#xff0c;CALayer对应显示的数据其有个content代表Bitamp&#…

前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

目录 场景还原相关代码开发者工具 - 网络请求记录 问题排查定位改bug 总结 场景还原 我在前端使用axios接收后端xlsx表格文件流并下载&#xff0c;xlsx文件能够下载成功&#xff0c;但是打开却显示文件无法打开 相关代码 请求API封装:Content–Type以及responseType经核对均…

CH10_简化条件逻辑

分解条件表达式&#xff08;Decompose Conditional&#xff09; if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd))charge quantity * plan.summerRate; elsecharge quantity * plan.regularRate plan.regularServiceCharge;if (summer())…

Py之auto-gptq:auto-gptq的简介、安装、使用方法之详细攻略

Py之auto-gptq&#xff1a;auto-gptq的简介、安装、使用方法之详细攻略 目录 auto-gptq的简介 1、版本更新历史 2、性能对比 推理速度 困惑度&#xff08;PPL&#xff09; 3、支持的模型 3、支持的评估任务 auto-gptq的安装 auto-gptq的使用方法 1、基础用法 (1)、量…

堆叠注入 [GYCTF2020]Blacklist1

打开题目 判断注入点 输入1&#xff0c;页面回显 输入1 页面报错 输入 1 # 页面正常&#xff0c;说明是单引号的字符型注入 我们输入1; show databases; # 说明有6个数据库 1; show tables; # 说明有三个表 我们直接查看FlagHere的表结构 1;desc FlagHere&#xff1b;# 发…

Spring Boot 使用断言抛出自定义异常,优化异常处理机制

文章目录 什么是断言&#xff1f;什么是异常&#xff1f;基于断言实现的异常处理机制创建自定义异常类创建全局异常处理器创建自定义断言类创建响应码类创建工具类测试效果 什么是断言&#xff1f; 实际上&#xff0c;断言&#xff08;Assertion&#xff09;是在Java 1.4 版本…

【QT】文件读写

新建项目 加入控件 整体做一个布局 功能&#xff1a;选择文件路径&#xff0c;打开文件&#xff08;两种文件格式&#xff1a;utf-8、GBK&#xff09; #include "widget.h" #include "ui_widget.h" #include <QPushButton> #include <QFileDial…

短视频账号矩阵系统saas源码搭建/技术

一、短视频矩阵系统建模----技术api接口--获取用户授权 技术文档分享&#xff1a; 本系统采用MySQL数据库进行存储&#xff0c;数据库设计如下&#xff1a; 1.用户表&#xff08;user&#xff09;&#xff1a; - 用户ID&#xff08;user_id&#xff09; - 用户名&#xff08…

shell综合项目

主菜单 http和Nginx分别的install的菜单&#xff0c;安装过程通过重定向到/dev/null达到看不见的效果 输入非整数或者大于4的数字都会提示错误 代码如下: [rootserver ~]# vim install_menu.sh #!/bin/bash function menu() { cat << EOF …

前端面试题之HTML篇

1、src 和 href 的区别 具有src的标签有&#xff1a;script、img、iframe 具有href的标签有&#xff1a;link、a 区别 src 是source的缩写。表示源的意思&#xff0c;指向资源的地址并下载应用到文档中。会阻塞文档的渲染&#xff0c;也就是为什么js脚本放在底部而不是头部的…

【实验记录】为了混毕业·读读论文叭

PR曲线 1. Robust_Place_Recognition_using_an_Imaging_Lidar 在第三节方法中&#xff0c;提到了一些列处理步骤&#xff0c;分析来与vins相似&#xff0c;在vins中是关键帧检索、特征提取、DBoW查询、描述子匹配、PnP RANSAC求解。 第四节的实验部分&#xff0c;没有绘制pr…

适用于 Linux 的 WPF:Avalonia

许多年前&#xff0c;在 WPF 成为“Windows Presentation Foundation”并将 XAML 作为 .NET、Windows 等的 UI 标记语言引入之前&#xff0c;有一个代号为“Avalon”的项目。Avalon 是 WPF 的代号。XAML 现在无处不在&#xff0c;XAML 标准是一个词汇规范。 Avalonia 是一个开…