性能优化-卡顿优化-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.rhkb.cn/news/166475.html

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

相关文章

[Leetcode] 0035. 搜索插入位置

35. 搜索插入位置 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target …

OceanBase自动安装部署演示环境demo

OceanBase自动安装部署 前提条件 官方给出硬件条件需要满足以下要求 本文操作系统为:Red Hat Enterprise Linux 8 64 位 下载链接:https://pan.baidu.com/s/1rZ39xJFhk0HdmC4wEJcxvg 提取码:c01x 下载并安装 all-in-one 安装包 执行如下…

LabVIEW生成和打印条形码

LabVIEW生成和打印条形码 想在LabVIEW中生成条形码然后打印条形码。但是,当尝试使用任何一个打印VI来从LabVIEW打印条形码字体时,打印机中的字体是扭曲的。该如何解决这个问题? 首先,需要条形码字体。如果没有,可以从…

【题解 树形dp 拆位】 树上异或

「KDOI-06-S」树上异或 题目描述 给定一棵包含 n n n 个节点的树,第 i i i 个点有一个点权 x i x_i xi​。 对于树上的 n − 1 n-1 n−1 条边,每条边选择删除或不删除,有 2 n − 1 2^{n-1} 2n−1 种选择是否删除每条边的方案。 对于…

nginx部署vue项目(访问路径加前缀)

nginx部署vue项目(访问路径加前缀) nginx部署vue项目,访问路径加前缀分为两部分: (1)修改vue项目; (2)修改nginx配置; vue项目修改 需注意,我这是vue-cli3配置&#x…

npm 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

一、报错: npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。 所在位置 行:1 字符: 1npm init -y~~~ CategoryInfo : ObjectNotFo…

uniapp开发h5引入第三方js(sdk)

manifest.json 应用配置 | uni-app官网 根据文档上描述需要自定义模板的场景为: 方法一: 起初以为是在原有的index.html基础上再新建一个html文件,在项目根目录建立一个template.h5.html(仿照hello-uni-app项目)&…

Linux下程序(C语言)实现对文件的复制

目标&#xff1a; 使用系统调用实现cp命令。 原理&#xff1a; 使用系统调用fopen打开文件&#xff0c;使用fgets()从文件读数据&#xff0c;使用fputs() 向文件写数据。 linux 文件 创建命令为 vi (文件名&#xff09;.c 文件源码&#xff1a; #include<stdio.h>…

【微服务保护】Sentinel 流控规则 —— 深入探索 Sentinel 的流控模式、流控效果以及对热点参数进行限流

文章目录 前言一、快速掌握 Sentinel 的使用1.1 什么是簇点链路1.2 Sentinel 的简单使用示例 二、Sentinel 流控模式2.1 直接模式2.2 关联模式2.3 链路模式 三、流控效果3.1 快速失败3.2 预热模式3.3 排队等待 四、对热点参数的流控4.1 热点规则4.2 热点规则演示 前言 微服务架…

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…

【LeetCode】144. 二叉树的前序遍历 [ 根结点 左子树 右子树 ]

题目链接 文章目录 Python3方法一&#xff1a; 递归 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法二&#xff1a; 迭代 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法三&#xff1a; Morris ⟮ O ( n ) 、 O ( 1 ) ⟯ \lgroup O(n)、O(1) \rgroup ⟮O(n)、O(1)⟯ C…

基于Java的人事考勤签到管理系统设计与实现(源码+lw+部署文档+讲解等)

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

从头开始使用 KNN 进行 KNN 和 MNIST 手写数字识别的初学者指南

一、说明 MNIST &#xff08;“修改后的国家标准与技术研究所”&#xff09;是事实上的计算机视觉“hello world”数据集。自 1999 年发布以来&#xff0c;这个经典的手写图像数据集一直作为分类算法基准测试的基础。随着新的机器学习技术的出现&#xff0c;MNIST 仍然是研究人…

[AUTOSAR][诊断管理][$11] 复位服务

文章目录 一、简介(1) 应用场景&#xff08;2&#xff09; 请求格式&#xff08;3&#xff09; 重启类型 二、示例代码(1) 11_ecu_reset.c 一、简介 ECU复位服务就是可以此诊断指令来命令ECU执行自复位&#xff0c;复位有多种形式&#xff0c;依据子功能参数来区分&#xff08…

【JavaEE】synchronized原理 -- 多线程篇(6)

synchronized原理 1. synchronized具体采用了哪些加锁策略?2. synchronized内部实现策略(内部原理)2.1 偏向锁2.2 轻量级锁与重量级锁 3. synchronized 的其它优化策略3.1 锁消除3.2 锁的粒度 4. 总结 1. synchronized具体采用了哪些加锁策略? synchronized既是悲观锁, 也是…

Flow深入浅出系列之在ViewModels中使用Kotlin Flows

Flow深入浅出系列之在ViewModels中使用Kotlin FlowsFlow深入浅出系列之更聪明的分享 Kotlin FlowsFlow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 Flow深入浅出系列之在ViewModels中使用Kotlin Flows Flow出现后&#xff0c;LiveData仍然可以用&#xff0c;并且…

Vue动态class

注意在自定义组件上绑定class会添加到该组件的根元素上面 1.对象语法 传入class对象v-bind:class 指令也可以与普通的 class attribute 共存可以动态修改class的值可以绑定一个计算数据来实现 1.传入class对象 <script src"./vue.js"></script><di…

【第二天】C++类和对象解析:构造函数、析构函数和拷贝构造函数的完全指南

一、类的引出概述 在c语言结构体中&#xff0c;行为和属性是分开的&#xff0c;万一调用错误&#xff0c;将会导致问题发生。c中类将数据和方法封装在一起&#xff0c;加以权限区分&#xff0c;用户只能通过公共方法 访问 私有数据。 二、封装 封装特性包含两个方面&#xff0…

【C++】-c++的类型转换

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

自然语言处理---Self Attention自注意力机制

Self-attention介绍 Self-attention是一种特殊的attention&#xff0c;是应用在transformer中最重要的结构之一。attention机制&#xff0c;它能够帮助找到子序列和全局的attention的关系&#xff0c;也就是找到权重值wi。Self-attention相对于attention的变化&#xff0c;其实…