1.确保你的SWF文件是针对Flash Player 11.4/AIR 3.4以上版本发布的!因为只有Flash Player 11.4/AIR 3.4以上版本才支持Telemetry
2.下载python文件,地址:https://github.com/adamcath/telemetry-utils
5.然后你先打开Scout,再打开你的.swf文件,就可以体验Scout的强大与神奇啦!
[运行期概览(Session Summary)]
在这里可以对整个运行期间有个大局观,哪些部分明显的变化或问题一目了然,然后快速定位到该区间。如图:
这里是整个分析工具的第一阶定位:帧区间。
[分帧资源(Frame Timeline)]
然后分帧资源面板是对运行期概览的放大。
帧时间部分的红线是预算阈值,超过红线的帧即是拖延帧速率因而需要优化的帧。
鼠标掠过会出提示该部分占用系统资源的具体数据。如图:
这里是整个分析工具的第二阶定位:帧。
这里选择帧控制着其他面板数据所在的帧。
[概览面板(Summary)]
分帧资源所选帧的资源消耗数据明细都会出现在这里:
注意,这里分两部分:活动和非活动,活动就是你占用了CPU时间去干了些什么,非活动就是CPU该干的干完了,干等的时候。
从我运行截图的帧情况看,有一项是“等候GPU”,这是因为CPU和GPU需要同步以达到期望的帧速率。如果某一个XPU超负荷了,帧速率就会拖延。如果有大量时间花在“等候GPU”,说明GPU超负荷了。有几种原因造成:
> GPU性能到不到
> 你交给GPU的活儿太重!需要优化:减少渲染的三角形、简化AGAL程序、减小纹理。Scout不能分析GPU运行每一步的时间消耗,然而可以从Stage3D渲染面板中看到精确的命令调用列表,从中分析。
> 如果帧速率随机抖动、震荡或锯齿状变化,可能是遭遇一项由于CPU和GPU同步造成的FP问题,甭担心,这不是你的问题,因为Adobe正在搞定中~
可以选择概览面板中的活动分类控制所有面板中相应的活动颜色分类显示——只显示所选活动颜色,其他活动全灰,便于集中分析某类活动中的问题。如图:
这里是整个分析工具的第三阶定位:活动类型。
[耗时活动(Top Activities)]
这里按照耗时排序列出不同类型的活动,比概览更详细了:
举例的截图帧可以看到排到前边的几项活动:像素化边框,渲染脏矩阵,两个事件,运行时等。
这里只是按活动类型来统计的。
活动过滤器 以0.5毫秒为限。即打开过滤,0.5毫秒内的事件消耗将忽略。
注意这里的不同活动颜色也是跟概览及其他面板对应的。
[活动序列(Activity Sequence)]
与活动序列不同,这里对所有活动进行精确的层级关系展示:
比如“建立显示对象边框”和“像素化边框”都是永远都在“渲染脏矩阵”内部才会出现的子活动。
[ActionScript]
还是按照调用堆栈从根开始的,清晰明了。
该面板根据调用关系方向分为两种,在左上角下拉切换。
>Top-Down是以顶级入口调用(司令)为根依次展开被调用者直至原生调用函数(一线士兵):
>Bottom-Up是反序,即以原生调用函数(一线士兵)为根依次展开调用者直至顶级入口调用(司令):
可以看到举例用项目是debug版,因为数trace最占时间了——因此实际性能测试最好发布Release版,能减少trace对分析数据的干扰。
其中有个小技巧,除了用按钮可以全部展开收缩外,还可以用Alt点击某个三角展开收缩其所有的子树。
另外,本视图也可以进行过滤。在这里展开概览面板中的ActionScript:
即可在ActionScript面板可以看到ActionScript面板随之对代码分类着色:
选择展开的概览面板中的ActionScript树中的某个包,可以进行聚焦过滤,非聚焦包都会变灰。这里就不截图了。
到目前为止观察数据都是某一帧的,我们可以在分帧资源面板选择更多的帧,则ActionScript面板立即会进行聚合统计。
这样统计数据会更精确,因为这些数据都是用统计抽样法采集的。更多采样,会得到更准确的结果。
现在多选择些帧,概览面板可以看到具体的区间:
貌似选了118帧,选择同时观察ActionScript面板,会发现数据在跟着变化:
会发现结果跟只选某一帧大不一样!
另外可以通过选中耗时活动和活动序列中的某个活动来过滤该活动所调用的函数。比如在耗时活动选择文本布局:
则在ActionScript会过滤出结果:
在活动中选择垃圾回收,也可以发现在运行中其被调用的情况。
[Trace Log]
这个就不多说了,单帧和多帧都可以,所有的trace输出都可以在这儿看到。
[显示列表渲染(DisplayList Rendering)]
从分帧资源可以看出,在很多情况下,显示列表渲染要比ActionScript占用更多时间。
左侧是渲染通道列表,渲染通道不总是精确地跟帧的边界对齐,所以可能会发现某个渲染通道从一帧开始,然后从下一帧结束。如果发现某帧有多个完成的渲染通道,就说明渲染过于频繁。例如,可能不恰当地调用updateAfterEvent():
本面板有两种视图模式。
>热度图模式 显示哪些区域渲染了,亮度代表了渲染的时间消耗。可以直接点击某区域,右侧会展开其对应的显示列表结构:
(注:本图嫖窃自Thibault Imbert原文)
>区域图模式 能看到更多细节:
(注:本图嫖窃自Thibault Imbert原文)
区域图模式会根据FP渲染引擎工作方式分解为四种类型区域,理解这些类型有助于提高渲染性能。例如,不需要缓存每帧改变的东西。
这四种区域分别说明:
> 区域(红色)表示这部分需要重绘。跟在FP Debugger版本看到的区域是一样的。
> 更新的表面(蓝色)是FP内部用滤镜、混合、位图缓存和位图创建出的位图。
> 缓存的表面(黄色)是运行时缓存的表面,可以多帧重用。仅仅在当前渲染通道重新渲染的缓存才会显示。
> 显示列表(绿色)是加入到显示列表的矢量内容。仅仅重新渲染的显示对象才会显示。
右侧的活动列表,容易看懂,注意前边带小圆点表示该区域被重绘了,因为该区域确实需要更新。