Systrace前言

Systrace允许你跟踪系统的行踪(trace),它可以告诉你在哪些线程、进程在这段时间内都做了什么,都把时间花在哪里,然后通过系统的提示优化点从而找到那些不足的代码来进行优化。

图形界面启动:


dart 内存分析memory map systemtrace分析内存_dart 内存分析memory map



Systrace界面预览

通过上面的步骤之后就会在规定的目录下生成一份html文件然后打开后就可以看到了如下的界面。


dart 内存分析memory map systemtrace分析内存_dart 内存分析memory map_02

可以通过键盘来放大、缩小、移动。 
w:用于变大 
s:用于缩小 
d:左边移动 
a:右边移动 
你也可以点击右上角的?号来查看等多的操作

Systrace性能调优

我们主要查看界面上的Alert、Frames,其中可以用绿色、黄色、红色来区分当前界面的性能等级分别是优、良、差。当遇到红色的时候肯定当前的性能需要优化。


dart 内存分析memory map systemtrace分析内存_dart 内存分析memory map_03

我们主要查看图片中的红色框内的优化点。 
当我们点击了Alerts或者点击右边的Alerts列表中的任何一点我们可以看到在界面的最底部会相对应的优化提示以及可能会出现优化的视频教程链接。


dart 内存分析memory map systemtrace分析内存_视频教程_04

比如上面的提示说你View的draw绘制花的时间太长了,然后我们可以根据Description来很明白的看到提示的内容是什么。

然后我们可以点击一块Frames中的F来查看,同样的它会生成一份跟Alerts类似的报告结果并放在界面的最低端。我们可以通过按下m键查看这一帧到下一帧所花费的时间以及哪个方法被调用的最长。


dart 内存分析memory map systemtrace分析内存_性能调优_05

可以明显看到这时间>16.6ms,系统要求UI的60fps水准所以系统会报出黄色的警告。照样我们从Description中可以读出到底是哪里出了问题

Description 
ListView item recycling involved inflating views. Ensure your Adapter#getView() recycles the incoming View, instead of constructing a new one.

我们可以看出来系统提示你在getView中花费了太多时间没能很有效的复用机制。我们就能顺着这条路去找界面的代码哪里出现了不足从而优化完善。

当然Systrace无法帮你定位到代码里面的具体到某一行代码,但是我们可以通过Alerts和Frames来能基本上优化了不足的地方,然后我们可以根据TraceView来分析具体函数花了多长时间来进一步优化代码提高性能。