当前位置: 首页 > 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类似

相关文章:

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

性能优化(卡顿分析) 文章目录 一、抓取trace的方法1.使用systrace抓取trace2.使用atrace抓取3.使用Perfetto抓取trace 二、trace文件的分析1.快捷操作1.1 导航操作1.2 快捷操作 2.chrome trace工具分析trace文件3.Prefetto分析trace文件 一、抓取trace的…...

P5740 【深基7.例9】最厉害的学生

题目描述 现有 N N N 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 8 8 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 150 150 150 的自然数)。总分最高的学…...

Hive引擎MR、Tez、Spark

Hive引擎包括:默认MR、Tez、Spark 不更换引擎hive默认的就是MR。 MapReduce:是一种编程模型,用于大规模数据集(大于1TB)的并行运算。 Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化&#xff0…...

不写前端代码,curl直接调试sse

不写前端代码,curl直接开两个终端调试sse 过程: 客户端向服务端发送建立连接请求; 服务端向客户端推送内容; 服务端向客户端发送结束信号并结束 注意事项: 只有连接时要求content-type是xxx 其他问题: …...

百分点科技受邀参加“一带一路”国际合作高峰论坛

10月17-18日,第三届“一带一路”国际合作高峰论坛在北京成功举行。作为新一代信息技术出海企业代表,百分点科技董事长兼CEO苏萌受邀出席高峰论坛开场活动——“一带一路”企业家大会,与来自82个国家和地区的企业或机构、有关国际组织、经济机…...

git学习——第4节 时光机穿梭

我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version control system. Git is free software. 现在&…...

golang 在 Mac、Linux、Window 下交叉编译

目录 交叉编译参数说明CGO_ENABLEDGOOS : 目标操作系统【darwin、linux、windows】GOARCH :目标架构【386、amd64、arm】 Mac 下编译,Linux / Windows 下执行Linux 下编译,Mac / Windows 下执行Windows 下编译,Mac / Linux 下执行…...

半导体可靠性测试方法都有哪些?

半导体测试是半导体设备中的一种技术,其中半导体组件(芯片、模块等)在组装到系统就会出现故障。在特定电路的监控下,部件被迫经历一定的半导体试验条件,并分析部件的负载能力等性能。这种半导体测试有助于确保系统中使用的组件导体器件&#…...

百度智能云发布AI原生应用工作台,为大模型落地五类需求提供最优

10月17日,百度世界在北京首钢园召开。百度智能云在大会期间的重磅发布,先来个主要内容总结: 首先,百度智能云在百度世界2023大会上宣布了以下重要消息:面向企业客户的文心大模型4.0 API调用服务得到了广泛应用&#x…...

flutter 手机卡住,需要等待,主线程被占用

ANR原理分析 WaitingInMainSignalCatcherLoop log中记录了ANR发生的时间以及具体提示。WaitingInMainSignalCatcherLoop代表了主线程等待异常。The application may be doing too much work on its main thread.同样表示处理时间过多。 traces 刚才的log有第二句Wrote stack …...

微信小程序 onLoad(option) 方法

在微信小程序中,onLoad(option) 是一个生命周期函数,用于监听页面加载。当小程序的页面被加载时,onLoad(option) 函数会被自动调用,并将页面的参数传递给这个函数。 option 参数是一个包含页面参数的对象,其中的每个属…...

Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!

先上效果图 插件安装 先说 word 文件是docx-preview插件 excel文件是用 xlsx 插件 介绍后端返回的数据 因为在拦截器处 做了对数据的处理 最后你调接口拿到的数据是 一个对象 里面包含: url : blob对象转换的用于访问Blob数据的临时链接。这个链接可以被用于在网页中展示…...

GaussDB for openGauss部署形态

前言 华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库,具有高性能、高可用、高安全、低成本的特点,本文带你详细了解GaussDB数据库的部署形态。 1、GaussDB部署形态三种类型 GaussDB部署形态:单机 独立部署是将数据库组件部署…...

6.MidBook项目经验之前端nuxt优化SEO和手机登录,微信登录

1.nuxt服务端渲染技术SSR Server Side Render(ajax异步请求,SEO是靠爬虫抓取数据的,没有抓到数据排名靠后) 1.在用户端搭建(利于SEO) 1.解压后 npm install npm run dev 2.default.vue有 头内容和尾,创建头尾文件,然后加入到组件 3.每个前端系统对应一个单独的后台接口(太方便了…...

NR SRS power control

这篇看下NR SRS power control的相关内容,主要内容集中在38.213 7.3章节,SRS power control与PUSCH很类似,当然细节上也有所不同,这里简单看下。 UL功率控制,主要是PUSCH/PUCCH/SRS/PRACH的传输功率。 对于所有PUSCH/PUCCH/SRS传输…...

C++(boost):通过boost::process::child同步调用其他程序

boost提供了boost::process::child,可以通过其调用其他程序,并获得输出: #include <boost/process/child.hpp> #include <boost/process/io.hpp> #include <vector> #include <iostream> #include <string> #include <tuple>using nam…...

【经验分享】解决vscode编码问题

目录 先看一下我遇到的问题和你们的一不一样 下面是我查到的解决办法&#xff1a; 简单点说就是 我们看看解决后的效果 先看一下我遇到的问题和你们的一不一样 我一开始以为就是编码问题。 下面是我查到的解决办法&#xff1a; 这个错误提示看起来仍然是中文乱码。可能是由于…...

核酸管外观缺陷检测(一)

1.1 应用示例思路 (1) 对核酸管图像进行灰度化、阈值分割和连通域分析&#xff1b; (2) 筛选出待检测的区域&#xff0c;并对该区域进行变换校正&#xff1b; (3) 进一步获取待检测的ROI区域&#xff0c;并根据几何特征和阈值条件&#xff0c;来对核酸管外观进行检测&#x…...

NodeJS @kubernetes/client-node连接到kubernetes集群的方法

1. 首先&#xff0c;你需要在你的项目中安装kubernetes/client-node。你可以使用npm&#xff08;Node Package Manager&#xff09;来进行安装。在你的终端中输入以下命令&#xff1a; npm install kubernetes/client-node 2. 安装完毕后&#xff0c;你可以在你的代码中引入这…...

【基于Kmeans、Kmeans++和二分K均值算法的图像分割】数据挖掘实验三

文章目录 Ⅰ、项目任务要求II、原理描述KMeansKMeans二分K均值评价指标-轮廓系数 III、数据集描述IV、具体实现过程V、结果分析VI、完整代码VII、深度学习与图片分割&#xff08;补充&#xff09;CNN1. 卷积层&#xff08;Convolutional Layer&#xff09;&#xff1a;2. 激活函…...

腾讯VersaViT:多模态视觉理解新标杆

腾讯VersaViT&#xff1a;多模态视觉理解新标杆 【免费下载链接】VersaViT 项目地址: https://ai.gitcode.com/tencent_hunyuan/VersaViT 导语&#xff1a;腾讯最新发布的多模态视觉编码器VersaViT&#xff0c;通过创新的多任务协同训练策略&#xff0c;同时强化语言介…...

LFM2.5-1.2B-Thinking-GGUF部署教程:Ubuntu/CentOS/Debian三平台通用安装步骤

LFM2.5-1.2B-Thinking-GGUF部署教程&#xff1a;Ubuntu/CentOS/Debian三平台通用安装步骤 1. 平台简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;特别适合在资源有限的环境中快速部署。该镜像内置了GGUF模型文件和llama.cpp运行时&#xff…...

[Linux][虚拟串口]x一个特殊的字节

目标&#xff1a;构建带上下文记忆的猫咪聊天机器人 先看代码&#xff1a; from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.messages import SystemMessage,HumanMessage,AIMessage import os from dote…...

YOLOv8模型在RKNN平台上的实战部署指南(附完整代码)

YOLOv8模型在RKNN平台上的实战部署指南&#xff08;附完整代码&#xff09; 在嵌入式设备上部署高性能目标检测模型一直是计算机视觉领域的难点。瑞芯微&#xff08;Rockchip&#xff09;推出的RKNN推理框架为这一挑战提供了解决方案&#xff0c;尤其适合需要低功耗、高效率的边…...

R包版本冲突别头疼:手把手教你降级igraph 2.1.1,解决monocle3的orderCells报错

R包版本冲突实战指南&#xff1a;精准降级igraph解决monocle3依赖问题 当你满怀期待地安装好monocle3准备进行单细胞拟时序分析时&#xff0c;突然弹出的nei() was deprecated in igraph 2.1.0报错就像一盆冷水浇灭了热情。这种R包版本冲突在生物信息学分析中屡见不鲜&#xff…...

3步掌控《缺氧》存档:用Oni-Duplicity打造理想殖民地

3步掌控《缺氧》存档&#xff1a;用Oni-Duplicity打造理想殖民地 【免费下载链接】oni-duplicity A web-hosted, locally-running save editor for Oxygen Not Included. 项目地址: https://gitcode.com/gh_mirrors/on/oni-duplicity 你是否曾因《缺氧》中复制人负面特质…...

终极指南:如何在NixOS上完美打包与使用SilentSDDM主题

终极指南&#xff1a;如何在NixOS上完美打包与使用SilentSDDM主题 【免费下载链接】SilentSDDM A very customizable SDDM theme that actually looks good. 项目地址: https://gitcode.com/gh_mirrors/si/SilentSDDM SilentSDDM是一款高度可定制且视觉精美的SDDM登录主…...

如何快速上手AutoGPT-Next-Web:5分钟搭建专属AI助手

如何快速上手AutoGPT-Next-Web&#xff1a;5分钟搭建专属AI助手 【免费下载链接】AutoGPT-Next-Web &#x1f916; Assemble, configure, and deploy autonomous AI Agents in your browser.一键免费部署你的私人AutoGPT 网页应用 项目地址: https://gitcode.com/gh_mirrors/…...

从仿真到实战:在CST/HFSS中如何设置周期性边界条件评估紧耦合天线阵元性能

从仿真到实战&#xff1a;在CST/HFSS中设置周期性边界条件评估紧耦合天线阵元性能 天线阵列设计中最具挑战性的环节之一&#xff0c;是如何准确预测单个阵元在阵列环境中的真实工作状态。当我在设计第一个超宽带相控阵时&#xff0c;曾因忽视阵元间互耦效应导致实物测试结果与仿…...

【C语言】memmove()函数实战:如何安全高效地处理内存重叠拷贝

1. 为什么需要memmove()函数&#xff1f; 在C语言中处理内存拷贝时&#xff0c;我们经常会遇到一个棘手的问题&#xff1a;当源内存块和目标内存块存在重叠区域时&#xff0c;使用memcpy()函数可能会导致数据被意外覆盖。想象一下你在整理书架&#xff0c;想把第三层到第五层的…...