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 报告

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值