Systrace是分析Android设备性能的主要工具,systrace使用atrace来启用跟踪,然后读取ftrace缓冲区并将其全部封装到一个独立的HTML查看器里。
systrace.py路径:C:\Users\ruxian.feng\AppData\Local\Android\Sdk\platform-tools
systrace抓取方式:如果想要分析Android系统或者APP的问题,需要抓取systrace文件分析并找出引起系统卡顿或者app反应慢的语言,在源码上解决引起反应慢的问题
方式一:图形化界面Android Device Monitor
路径:Sdk\tools\monitor.bat
选择要分析的进程,在左边栏,点击左边栏右上角的图标
可以根据需求配置路径,时间,trace大小,平时一般用10s,20480KB,然后点击OK,操作要分析系统卡顿或者APP运行缓慢的部分,例如启动一个APP,系统会自动收集运行时的信息,生成一个html文件,然后再Chrome浏览器打开html文件,地址chrome://tracing/
Advanced Options:针对UI相关的性能问题,以下TAG必须使能:Input/Window Manager/Activity Manager/Bionic C Library/ CPU Freq/CPU Idle/CPU load. 如果设备可以root,root后可以看到更多的TAG,root后请使能:eMMC commands/ Synchonization/Kernel Workqueues.
方式二:命令行抓取trace
python systrace.py [options] [category1] [category2] [category3]...[cataegoryn]
systrace.py在:Sdk\platform-tools\systrace
注意:必须python2才可以运行,否则报错。
可以一个电脑上安装python2和python3,配置两个环境变量,把一个可执行文件重命名,例如Python3的可执行文件重命名为Python3.exe,这样就可以区分两个python
options:
options | 解释 |
---|---|
-o File | 输出的目标文件,即html的路径 |
-t | 执行时间,默认为5s |
-b | buffer的大小,单位kb,用于限制trace的大小 |
-k KFUNCS | 追踪Kernel函数,用逗号隔开 |
-a APP | 追踪应用包名,用逗号隔开 |
-from-file | 从文件中创建systrace |
-l | 列举可用的tags |
category:
category可取值:
category | 解释 |
---|---|
gfx | Graphics |
input | Input |
view | View System |
webview | WebView |
wm | Window Manager |
am | Activity Manager |
sm | Sync Manager |
audio | Audio |
video | Video |
camera | Camera |
hal | Hardware Modules |
app | Application |
res | Resource Loading |
dalvik | Dalvik VM |
rs | RenderScript |
bionic | Bionic C Library |
power | Power Management |
sched | CPU Scheduling |
irq | IRQ Events |
freq | CPU Frequency |
idle | CPU Idle |
disk | Disk I/O |
mmc | eMMC commands |
load | CPU Load |
sync | Synchronization |
workq | Kernel Workqueues |
memreclaim | Kernel Memory Reclaim |
regulators | Voltage and Current Regulators |
示例:
Python systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq
systrace图像分析:
纵轴代表时间,事件按照进程分组,同一个进程内按照线程进行纵向拆分,每个线程记录自己的工作,可收缩/展开
Frame:
每个APP进程都有一个Frame行,正常是绿色的圆点,颜色是黄色或者红色表示这一帧超过了16.6ms(丢帧),即会产生卡顿,这时需要放大那一帧进行进一步分析问题。对于Android 5或者更高的设备主要聚焦在UI Thread和Render Thread这两个线程,更早的版本,则全部集中在UI Thread。
Alerts::
Systrace能自动分析trace中的事件,并自动高亮性能问题作为一个Alerts,建议调试人员下一步怎么做
比如丢帧,点击黄色或者红色的Frame圆点会有相关的提示信息,另外最右边有一个Alerts tab 可以展开,查看所有警告提示信息。
当我们点击了Alerts或者点击右边的Alerts列表中的任何一点我们可以看到在界面的最底部会相对应的优化提示以及可能会出现优化的视频教程链接。
按M可以看到这一帧到下一帧的事件以及哪个方法调用的事件最长。
系统要求帧率是60fps,即一秒60帧,每帧之间16.6ms,通常说帧数,简单地说,就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用FPS(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 越多,所显示的动作就会越流畅。
Scheduling delay(调度延迟)的意思就是一个线程在处理一块运算的时候,在很长一段时间都没有被分配到CPU上面做运算,从而导致这个线程在很长一段时间都没有完成工作。