性能优化-卡顿优化-tarce抓取及分析

性能优化(卡顿分析)

文章目录

  • 一、抓取trace的方法
      • 1.使用systrace抓取trace
      • 2.使用atrace抓取
      • 3.使用Perfetto抓取trace
  • 二、trace文件的分析
      • 1.快捷操作
        • 1.1 导航操作
        • 1.2 快捷操作
      • 2.chrome trace工具分析trace文件
      • 3.Prefetto分析trace文件

一、抓取trace的方法

1.使用systrace抓取trace

使用Android sdk目录下的systrace抓取tarce,路径为:Sdk\platform-tools\systrace

:Android sdk plotform需要小于34 ,api34删除了systrace 默认使用Perfetto

在这里插入图片描述

需要安装python2.x版本。python环境安装完成后还需要安装pywin32和six库解决

pip install win32com
pip install six

安装完成后运行

python systrace.py -a com.test.demo:demo --time=10 -b 48000 -o systrace.html gfx view wm am freq idle binder_driver

参数解释:

  • -a 应用包名
  • –time 抓trace的时长
  • -o 生成的trace文件路径
  • -b buffer大小
  • -categories: 抓trace的模块 可以使用python systrace --list查看支持的模块

在这里插入图片描述

2.使用atrace抓取

adb connect ip
adb root
adb remount
adb shell 
执行如下命令
atrace -z -b 8000  -t 10 -a com.tcl.vod -o ./trace1 sched freq gfx irq input view wm am pm res dalvik idle ss rs workq  binder_driver binder_lock disk mmc memreclaim
  • -z 压缩
  • -b buffer大小
  • -t 抓取时长
  • -a 包名
  • -catecategories 抓trace的模块

复现问题后,输入

adb shell ps -A | grep atrace

确认atrace进程是否结束

抓取完成后,取出生成的trace文件,并转换成html

adb pull /data/local/tmp/trace_output
systrace.py --from-file trace_output -o output.html

需要获取root权限。

3.使用Perfetto抓取trace

Perfetto在Android9以上默认预制,需要开启

开启trace

setprop persist.traced.enable 1
perfetto -o /data/misc/perfetto-traces/trace_log -t 120s -b 100mb -s 150mb sched freq idle am wm gfx view input
  • -o trace文件输出路径
  • -t 抓取trace的时间
  • -b buffer大小
  • -catecategories 抓trace的模块

二、trace文件的分析

抓取trace文件后最终都需要转为html文件后,利用工具进行分析。目前分析的工具有chrome://tracing/ 和Perfetto

1.快捷操作

1.1 导航操作
导航操作作用
w放大,[+shift]速度更快
s缩小,[+shift]速度更快
a左移,[+shift]速度更快
d右移,[+shift]速度更快
1.2 快捷操作
常用操作作用
f放大当前选定区域
m标记当前选定区域
v高亮VSync
g切换是否显示60hz的网格线
0恢复trace到初始态,这里是数字0而非字母o
一般操作作用
h切换是否显示详情
/搜索关键字
enter显示搜索结果,可通过← →定位搜索结果
`显示/隐藏脚本控制台
?显示帮助功能

2.chrome trace工具分析trace文件

在这里插入图片描述

chrome://tracing/ 打开该链接,加载第一步中抓到的trace文件,可以看到图形化加载的文件,横坐标以时间为单位,纵坐标以进程-线程的方式划分。同一进程的线程为一组放在一起。

每个app进程,都有一个Frams行,绿色的圆点代表正常帧,即在16.6ms内完成绘制的帧。当圆点颜色为黄色或者红色,意味着该帧的绘制超过了16.6ms,即发生了丢帧。此时需要通过放大该帧分析问题。

针对上图圈住的红帧进行分析

在这里插入图片描述

选中该帧按w放大后,按M可以标记该帧,可以看到该帧耗时113ms,严重超过16.6ms。

在这里插入图片描述

主要耗时发生在layout阶段。layout中包含了每个item的inflate(recyclerview),卡顿就发生在这儿。优化主要针对这几个耗时较长的进行优化。

3.Prefetto分析trace文件

https://ui.perfetto.dev/ 打开该链接打开抓到的trace文件。

在这里插入图片描述

基本操作步骤与上述与chorme类似

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

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

相关文章

精益求精:使用Ansible集中式自动备份核心数据

1、引言 在当今数字化时代,数据是企业和组织的核心资产。为了确保数据的安全性和可恢复性,备份是至关重 要的。然而,手动备份数据可能会繁琐且容易出错,特别是在面对大规模和分布式的数据存储情况下。幸运的是,Ansibl…

(N-128)基于springboot,vue酒店管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis 本系统功…

C语言柔性数组

大家好,我们今天来补充一个知识,就是柔性数组。 柔性数组概念: 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。 C99 中,结构中的最后一个元素允许是未知大小的数…

【C++】:类和对象(中)之类的默认成员函数——构造函数and析构函数

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数 默认成员函数:用户没有显式实现,编译器会生成…

斯坦福JSKarel编程机器人使用介绍

斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰,有一个被称为卡雷尔(Karel)机器人的微型世界(microworld)的简化环境,可以让编程初学者从中学习理解编程的基本概念,而…

unity(WebGL) 截图拼接并保存本地,下载PDF

截图参考:Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载: Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入:Unity WebGL中文输入 支持输…

Peter算法小课堂—正整数拆分

大家可能会想:正整数拆分谁不会啊,2年级就会了,为啥要学啊 例题 正整数拆分有好几种,这里我们列举两种讲。 关系 我们看着第一幅图,头向左转90,记住你看到的图,再来看第二幅图,你…

KubeSphere安装mysql8

需要持久化储存数据的,建立有状态服务。 无状态服务是不会持久化的,重启就归零 KubeSphere 创建自建应用后,创建有状态服务,但是自己应用的有状态服务不能外放端口,需要在服务哪里删除pod,在创建负载指定相关的有状态服务,就可以外放端口了 安装mysql8 添加初始化密码参…

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务 一. CentOS7 安装配置SFTP服务器详解一、SFTP简介二、关闭防火墙三、安装SSH服务在CentOS7中,sftp只是ssh的一部分,所以采用yum来安装ssh服务即可1. 查看是否已经安装了ssh2.…

狄克斯特拉(Dijkstra) 算法 php实现

《算法图解》中提到的狄克斯特拉算法,用php实现。 一 原理及解释 根据示例图求出起点到终点的最小耗费路径。 因为涉及每条路径的权重,所以这种算法仅适合有向路径。 所谓有向路径,指仅从起点指向终点的路径。 相对的无向路径&#xff0…

【面试题笔记】C++继承和多态常见高频经典面试题

1.继承相关习题 1.1 什么是菱形继承?菱形继承的问题是什么? 菱形继承:菱形继承是多继承的一种特殊情况。两个中间类继承父类,而派生类继承了两个中间类,从而在继承关系上呈现出一种菱形。如下图所示: **…

ZKP3.2 Programming ZKPs (Arkworks Zokrates)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 3: Programming ZKPs (Guest Lecturers: Pratyush Mishra and Alex Ozdemir) 3.3 Using a library ( tutorial) R1CS Libraries A library in a host language (Eg: Rust, OCaml, C, Go, …)Key type: constraint system Mai…

光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

攻防世界web篇-Training-WWW-Robots

直接点击给出的地址,然后会转到另一个网页界面,在这个界面,已经给出了提示,robots.txt 在浏览器中,直接在地址的后面加上robots.txt,会进到下面这个界面 因为对php语言一窍不通,所以这里纯粹就…

【数据结构】队列(C语言实现)

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 队列 1. 队列的概念及结构…

搜维尔科技:Varjo-探讨汽车工业使用虚拟现实/XR的可能性

新的 奇亚EV9 被定位为起亚有史以来最豪华的车型。在一次活动中,起亚通过向芬兰媒体、利益相关者和经销商网络推出新的汽车车型(起亚EV9,EV9是一款高度超过5米的全电动车,拥有100千瓦的电池、快速充电能力、2500公斤的拖曳能力和7公斤的座位--这在市场上是一个独特的…

常见问题-找不到vcruntime140.dll无法继续执行代码解决方案

本文将介绍五种不同的解决方案,帮助大家解决这个问题。 首先,我们需要了解为什么会出现找不到vcruntime140.dll的情况。这种情况通常是由于以下几个原因导致的: 1. 系统环境变量设置不正确:系统环境变量中可能没有包含vcruntime…

jvm的jshell,学生的工具

jshell 在我眼里,只能作为学校教学的一个玩具,事实上官方也做了解释,以下是官方的解释: 在学习编程语言时,即时反馈很重要,并且 它的 API。学校引用远离Java的首要原因 教学语言是其他语言有一个“REPL”…