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 six 和 pip 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 | 全称 | 含义 |
---|---|---|
sched | CPU Scheduling | CPU 的调度信息,可以看到 CPU 的每个核在具体的时间点执行了什么线程 |
gfx | Graphics | Graphics 渲染系统,包括 SurfaceFlinger、VSync、Texture、RenderThread 的信息 |
input | Input | 输入事件系统,记录键盘输入、触摸等事件信息 |
view | View System | View 视图系统,常见的 View 的 onMeasure、onLayout、onDraw 都记录在此系统中 |
wm | Window Manager | WindowManager 的调用信息记录在此模块中 |
am | Activity Manager | ActivityManager 的调用信息记录在此模块中 |
dalvik | Dalvik 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 报告
Android 系统分析工具:Systrace相关推荐
- Android开发工具集合
Android Studio Android开发环境,基于IntelliJ IDEA,谷歌2013年I/O大会发布,类似 Eclipse ADT:现已更新到1.3版本(截止15年8月),并支持NDK开 ...
- Android:通过systrace进行性能分析及使用-详细
Android:通过systrace进行性能分析 https://www.cnblogs.com/blogs-of-lxl/p/10926824.html 一.Systrace 简介 Systrace ...
- Android系统分析—OTA升级
Android系统分析-OTA升级 1. recovery 1.1 升级流程 2. 辅助功能 2.1 ui.cpp 2.2 screen_ui.cpp 2.3 default_device.cpp 2 ...
- Android 持续搜集关于Android使用工具
以下各种使用工具纯属个人搜集使用,再此自己做个记录.我也不想单独写自己会的,因为网上的大神们都写得很详细,也感谢他们的无私精神!在这里我只是把这些都搜集起来,做他们的搬运工吧!希望也能帮得上正在使用这 ...
- java安卓开发工具_推荐几个非常实用的Android开发工具
工欲善其事,必先利其器.我们进行Android开发也要有好的开发工具辅助才能更好更高效的完成各种开发,为用户提供更实用的应用程序.本文就为大家推荐几个非常实用的Android开发工具,及几个常用的编辑 ...
- Xamarin.Form的Android SDK工具下载安装
Xamarin.Form的Android SDK工具下载安装 本节将讲解如何下载Xamarin.Form的Android SDK工具,并使用其中的工具管理Android SDK,如何创建模拟器等内容. ...
- android 测试工具,Android开源项目第四篇:开发及测试工具篇
本文为那些不错的Android开源项目第四篇--开发工具篇,**主要介绍Android开发工具和测试工具相关的开源项目**. Android开源项目系列汇总已完成,包括: 1.Buck faceboo ...
- 【Android CPU 优化】Android CPU 调优 ( Trace 文件分析 | Android Profiler 工具 | CPU Profiler 工具 )
文章目录 一.Android CPU 优化 二.CPU Profiler 工具 三.相关资源 一.Android CPU 优化 在 Android 中 , 出现 动画掉帧 , 页面切换白屏 , 卡顿 ...
- 【Android 内存优化】Android Profiler 工具常用功能 ( 监测内存 | 内存快照 )
文章目录 一. 内存泄漏排查 ( Android Profiler 工具 ) 二. Android Profiler 内存监测相关功能 三.内存快照分析 内存泄漏原理 : 长生命周期对象 , 持有短生 ...
- qpython3调用adb_Python实现的基于ADB的Android远程工具
Python实现的基于ADB的Android远程工具,本工具为原创,涉及知识: - Python编程 - Tkinter GUI编程 - ADB通信机制 代码全文: #!/usr/bin/env py ...
最新文章
- 前端学PHP之正则表达式基础语法
- python给图片添加字符
- BZOJ3808 : Neerc2012 Labyrinth of the Minotaur
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- SAP HANA数据库里对中文字符串排序的实现
- spring boot项目开发中遇到问题,持续更新
- 全部关于测试–第2部分
- [css] 元素竖向的百分比设置是相对容器的高度吗?
- SpringCloud集成Security安全(Config配置中心)
- 不止有小米9 雷军还准备了支持无线充电的移动电源!
- [Python3] 010 字符串:给你们看看我的内置方法 第二弹
- 英语12个月份名称的由来
- java计算器流程图_我的第一个JAVA程序之计算器
- Windows网络编程之(二)Socket通信非阻塞模式Select(TCP和UDP)
- 全减器及其相关概念的理解
- 小程序毕设作品之微信积分商城小程序毕业设计成品(7)中期检查报告
- Linux 学习笔记 (一)
- qemu内存模型(2) 实现说明
- Kotlin-Android世界的一股清流-Lambda表达式
- LWN:GFP 标志介绍以及移除 __GFP_ATOMIC!