当前位置: 首页 > news >正文

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

相关文章:

  • P5740 【深基7.例9】最厉害的学生
  • Hive引擎MR、Tez、Spark
  • 不写前端代码,curl直接调试sse
  • 百分点科技受邀参加“一带一路”国际合作高峰论坛
  • git学习——第4节 时光机穿梭
  • golang 在 Mac、Linux、Window 下交叉编译
  • 半导体可靠性测试方法都有哪些?
  • 百度智能云发布AI原生应用工作台,为大模型落地五类需求提供最优
  • flutter 手机卡住,需要等待,主线程被占用
  • 微信小程序 onLoad(option) 方法
  • Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!
  • GaussDB for openGauss部署形态
  • 6.MidBook项目经验之前端nuxt优化SEO和手机登录,微信登录
  • NR SRS power control
  • C++(boost):通过boost::process::child同步调用其他程序
  • 【经验分享】解决vscode编码问题
  • 核酸管外观缺陷检测(一)
  • NodeJS @kubernetes/client-node连接到kubernetes集群的方法
  • 【基于Kmeans、Kmeans++和二分K均值算法的图像分割】数据挖掘实验三
  • 深入理解Java CompletableFuture并发编程模型
  • TensorFlow手动加载数据集(以mnist为例)
  • C++项目实战——基于多设计模式下的同步异步日志系统(总集篇)
  • 杨辉三角按列求和
  • C复习-语句
  • [Python进阶] 操纵键盘:PyAutoGUI
  • jdbc快速开始
  • C语言中static关键字用法
  • STM32-LCD液晶显示
  • GraphQL 查询:一个全面指南
  • 快速自动化处理JavaScript渲染页面的方法