IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 系统分析工具:Systrace -> 正文阅读

[移动开发]Android 系统分析工具:Systrace

前言

Systrace 可以帮助开发者收集Android关键子系统(SurfaceFlinger、WMS等Framework 部分关键模块、服务,View体系系统等)的运行信息。Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。对于UI显示性能,比如动画播放不流畅、渲染卡顿等问题提供了分析数据。

Systrace 工具安装使用

Systrace 工具包会在sdk/platform-tools/systrace/ 目录下,如图所示:
在这里插入图片描述

Windows上搭建Systrace环境

  • 进入到Systrace 所在目录,输入 systrace.py -l 命令。如果你的操作系统没有搭建python环境。会报错信息:ImportError: No module named win32con
    在这里插入图片描述
    Python环境配置

  • 接下来,安装win32con模块。使用 pip install pypiwin32 命令。报错信息:
    在这里插入图片描述
    通过信息可知,需要安装pip工具。安装pip阅读这篇文章windows上pip安装及使用详解

继续 安装win32con模块,使用 pip install pypiwin32 命令。
在这里插入图片描述
win32con 安装成功!

  • 再次调用 systrace.py -l命令。报错如下:
    在这里插入图片描述
    重新安装six模块,调用 pip uninstall sixpip install six 命令。
    在这里插入图片描述
  • 再次输入 systrace.py -l 命令。如图所示:
    在这里插入图片描述
    搭建Systrace环境 搭建成功!!

使用Systrace 命令

输入命令:python systrace.py -t 5 -o mytrace.html wm gfx input view sched freq 生成trace.html 文件 。
在这里插入图片描述
命令格式解析:

python systrace.py [options] [category1] [category2] ... [categoryN]

上面的命令中, -t 5 -o mytrace.html 属于 [options] 参数,wm gfx input view sched freq 属于 [categories] 参数

命令参数说明

  • 全局选项
全局选项缩写含义
–help-h显示帮助消息。
–list-categories-l列出您的已连接设备可用的跟踪类别。
  • options
options缩写含义
-o 将 HTML 跟踪报告写入指定的文件。如果您未指定此选项,systrace 会将报告保存到 systrace.py 所在的目录中,并将其命名为 trace.html。
–time=N-t N跟踪设备活动 N 秒。如果您未指定此选项,systrace 会提示您在命令行中按 Enter 键结束跟踪。
–buf-size=N-b N使用 N KB 的跟踪缓冲区大小。使用此选项,您可以限制跟踪期间收集到的数据的总大小。
–app=app-name-a app-name启用对应用的跟踪,指定为包含进程名称的逗号分隔列表。这些应用必须包含 Trace 类中的跟踪检测调用。您应在分析应用时指定此选项。
–serial=device-serial-e device-serial在已连接的特定设备上进行跟踪。
–from-file=file-path根据文件(例如包含原始跟踪数据的 TXT 文件)创建交互式 HTML 报告,而不是运行实时跟踪。
–ktrace=functions-k functions跟踪逗号分隔列表中指定的特定内核函数的活动。
  • categories
categories全称含义
schedCPU SchedulingCPU 的调度信息,可以看到 CPU 的每个核在具体的时间点执行了什么线程
gfxGraphicsGraphics 渲染系统,包括 SurfaceFlinger、VSync、Texture、RenderThread 的信息
inputInput输入事件系统,记录键盘输入、触摸等事件信息
viewView SystemView 视图系统,常见的 View 的 onMeasure、onLayout、onDraw 都记录在此系统中
wmWindow ManagerWindowManager 的调用信息记录在此模块中
amActivity ManagerActivityManager 的调用信息记录在此模块中
dalvikDalvik VM虚拟机相关信息,比如 GC 垃圾回收信息

浏览trace.html 文件基础

用chrome浏览器打开该文件,如图所示:
在这里插入图片描述
如上图所示,横坐标是以时间为单位,纵坐标是以进程-线程的方式来划分,同一进程的线程为一组放在一起,可收缩/展开。

键盘快捷键:
在这里插入图片描述

在这里插入图片描述

解读Systrace报告

Systrace 会生成包含多个部分的输出HTML文件。该报告列出了每个进程的线程。如果给定线程会渲染界面帧,该报告还会沿时间轴指明所渲染的帧。当您在报告中从左向右移动时,时间会向前推移。

用户互动

这部分部分包含表示应用或游戏中的具体用户互动(例如点按设备屏幕)的条形图。这些互动可用作有用的时间标记。
在这里插入图片描述

CPU 活动

这部分显示了表示每个CPU中的线程活动的条形图。这些条形会显示所有应用(包括您的应用或游戏)中的 CPU 活动。
在这里插入图片描述
如上图所示,CPU 活动部分可以展开,展开后您就可以查看每个CPU的时钟频率。

系统事件

此部分中的直方图会显示特定的系统级事件,例如特定对象的纹理计数和总大小。值得仔细检查的直方图是标记为 SurfaceView 的直方图。
在这里插入图片描述
如上图所示,描绘 Surface Flinger进程(包括VSync事件和界面线程交换工作)的其他直方图。

显示帧

在这里插入图片描述

  • 绿色:正在运行

线程正在完成与某个进程相关的工作或正在响应中断。

  • 蓝色:可运行

线程可以运行但目前未进行调度。

  • 白色:休眠

线程没有可执行的任务,可能是因为线程在遇到斥锁定时被阻止。

  • 橙色:不可中断的休眠

线程在遇到 I/O 操作时被阻止或正在等待磁盘操作完成。

  • 紫色:可中断的休眠

线程在遇到另一项内核操作(通常是内存管理)时被阻止。

自定义事件

默认情况下,Systrace 都只能记录、收集系统层面的信息。Android提供了这样的 Api的,这个类是Trace类,使用Trace类记录自己应用中的信息。

  Trace.beginSection("TAG"); // 开始
  try{
     // 调试代码
     ....
  }finally{
   Trace.endSection();  
  }

注意

  • Trace.beginSection(String sectionName) 和 Trace.endSection() 需要成对出现,建议使用用 try{ } finally{} 。
  • Trace.beginSection(String sectionName) 和 Trace.endSection() 需要在同一线程中。
  • 如果在 Trace.endSection() 之前有多个 Trace.beginSection(String sectionName),Trace.endSection() 会匹配离它最近的一个未匹配过的 Trace.beginSection(String sectionName)。

检测卡顿案例

下面是对RecyclerView 列表滑动卡顿现象分析的实例。如图所示:
在这里插入图片描述
Systrace 报告列出了渲染界面帧的每个进程,并指明了沿时间轴渲染的每个帧。我们知道1s内会渲染60帧,渲染一帧需要16.6ms。在16.6ms内渲染的必须保持每秒60帧稳定帧速率的帧会以绿色圆圈表示。渲染时间超过16.6ms的帧会以黄色或红色帧圆圈表示(潜在卡顿因素)。

点击红色个帧圆圈可将其突出显示,并提供有关系统为渲染该帧所做工作的其他信息,包括提醒。此报告还会显示系统在渲染该帧时执行的方法。您可以调查这些方法以确定界面卡顿的可能原因。
在这里插入图片描述
如上图所示,查看此工具在您的跟踪记录中发现的每条提醒以及设备触发每条提醒的次数,请点击窗口最右侧的Alerts标签页。Alerts面板可帮助您了解跟踪记录中出现的问题以及这些问题导致出现卡顿的频率。您可以将此面板视为要修正的错误列表。通常情况下,只需对一个区域进行细微改动或改进即可移除整组提醒。

参考资料

浏览 Systrace 报告

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:19:35  更:2022-04-06 23:21:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 22:08:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码