开始使用Adobe Scout(下)

来源:互联网 发布:java培训 编辑:程序博客网 时间:2024/05/21 09:10

转自 : http://blog.sina.com.cn/s/blog_6bfa2fc10101bqo2.html



ACTIONSCRIPT

 

到现在,你已经看到flash player 不间断的活动,但你最关心的是可能是你的as代码在作什么。在actionscript面板里显示了这些内容。

 开始使用Adobe <wbr> <wbr>Scout(下)

当你初看actionscript面板,你可能看到一系列的函数的调用,为了得到说明和查看调用的栈,只需要点击展开所有按钮,它在自上而下设置的右边。

 开始使用Adobe <wbr> <wbr>Scout(下)

你可以向下滚动调用栈查找哪个函数最费时间,如下图,Context3D.present  的调用最费时间

 开始使用Adobe <wbr> <wbr>Scout(下)

默认情况下,actionscript面板显示向下而下的栈的调用,也就是入口点在栈的最上面,本地的调用在栈的最下面。反过来来看本地函数上花费了多少时间也非常有用,可以通过选择自下而上来实现。

你可以得到每个包花费多少时间的高级视图,通过打开在总结面板的actionscript分类查看。

Actionscript面板已经增加了用颜色区分不同的函数。本地用深蓝表示,用户的as代码用浅蓝表示,stage3d用松石绿表示。下图展示了用颜色标志的向下而上的视图。

 开始使用Adobe <wbr> <wbr>Scout(下) 

你也可以使用总结面板过滤你不想看到的包,下图展示了只关注invawayders 包的效果。

 开始使用Adobe <wbr> <wbr>Scout(下)

在自下而上的视图里,父结节是你的函数,有自身时间列指示了在全部选择的帧里(notincluding any calls it might make into other functions)它花费的时间。当你打开结点时你会看到自下而上的栈调用关系,它显示了这个函数里调用了哪些其它函数,每个子函数对父函数的贡献

ActionScript 面板展示了一个在帧和时间轴里所有选择的帧的actionscript代码的合计。有一点要记住,这些数据是基于统计采样的,也就是意味着你观测的数据越多,得到的更准确的结果。如果你在右边上面看到一个悲伤的小脸,意味着你需要选择更多的帧。

ActionScript 面板的另一个有用的功能是你可以在首要活动和活动序列面板进行数据交互。

在这两个面板里,你可以单击一个具体的活动在actionscript面板里实现过滤。例如下图,展示了当你单击首要活动的mouseDown 事件时,它仅显示这个事件处理的内部的处理代码。

开始使用Adobe <wbr> <wbr>Scout(下)


你可以过滤任何活动,不仅仅是as事件处理函数。例如,下图显示了用垃圾回收活动过滤actionscript代码。不像一个事件,垃圾回收可以在你代码执行的过程中触发。用垃圾回收过滤让你看到哪个函数引起了垃圾回收。你可以在调用栈里看到。如果某个函数引起了过多的垃圾回收,它可能消费太多内存。

 开始使用Adobe <wbr> <wbr>Scout(下)

Trace log

当对actionscript代码进行采样时,scout收集trace()的输出。在帧和时间轴面板的事件面板里的跟踪事件轨展示了哪一帧执行了trace,而且如果你点击了有trace 的帧,在活动序列面板里同样会显示。你也可以选任意数量的帧并在跟踪日志面板里查看全部的trace输出。

 开始使用Adobe <wbr> <wbr>Scout(下)



 

会话信息

Scout使你轻松和其它人分享数据。例如,如果你发现一个问题,你可以记录下scout会话,保存为flm 文件,并把它发给你的同事帮你debug错误。像你运行在哪种机器上,你用的是哪个版本的flash,这些信息很容易就会丢失。会话信息面板呈现了这些信息。它被分为几个部分,提供详细的让scout收集的遥测数据。

 

开始使用Adobe <wbr> <wbr>Scout(下) 

 

显示列表渲染

你已经摸索了很多面板让你来诊断flash player as代码正在干什么。但如果你的问题是关于渲染的呢?scout的一个亮点之一就是使你发现底层的渲染问题。

如果你在使用传统的flash 显示列表渲染,你可以在新会话设置里打开显示列表渲染详细信息选项,然后收集正在进行的详细信息。当你选择单帧时,你可以在显示列表渲染里看到。

 开始使用Adobe <wbr> <wbr>Scout(下)





 

如上面,当你选择帧时,在面板的左边有一系列正在渲染的传递并显示它花费多长时间。渲染传递并不总是恰好和边界对齐,因此你可能看到一个渲染的传递在一帧里开始,然后在下一帧结束。在一帧里,如果你看到多于一个完整的渲染传递,就是意味着你渲染过于频繁,例如你可能在不需要的时候调用updateAfterEvent()

默认下显示列表渲染面板在热图模式下打开,这个屏幕的代表指示了哪个区域被重新渲染。

最白最亮的区域是最费时间渲染的,你可以在右边的树里点选择一个对象,它会在相应的区域高亮显示出来。它给你展示了对渲染传递和每一步的花费的详细的分解。

通过切换到区域模式你可以得到渲染传递更详细的视图。如下图,屏幕上的区域被分解为四种不同的类别,flash player 将它做为渲染引擎的一部分使用。明白这些分类对大幅度改善渲染的执行非常有用,例如,你不想对每一帧都改变的东西进行缓存。

 开始使用Adobe <wbr> <wbr>Scout(下)

  区域(红色)框起来的是在屏幕上需要重绘的地方。这些信息和在debug版的flashplayer 右键显示重绘区域的内容是一样的。

 

  更新的表面(蓝色)是在这次渲染传递时要被更新的部分,表面是flash player 当使用滤镜,blend mode,位图缓存和位图时不断创建的位图。

  缓存的表面(黄色)是被运行时缓存的表面,因此它可能被多帧复用,仅当这个渲染传递显示时缓存被重新渲染

  显示对象(绿色)是你加在显示列表里的矢量内容。再强调一遍,只有显示对你在显示时被重绘。

注意右边的活动和它是相同的颜色系统。你可以点击显示的任何一个区域,相应的在树上会相应相应的结点。如下图,在有的结节左侧会有小点,这表示这个结节会被重绘。

 开始使用Adobe <wbr> <wbr>Scout(下)

 

Stage3D渲染

如果你在开发基于gup加速的内容,你会使用新的stage3d api。使用GPU加速渲染内容在桌面方面(Adobe AIR 3.0 以上和Flash Player 11以上)和移动方面(Adobe AIR 3.2 以上)是与平台无关的。你可能在开发3d内容或使用如starling这样的将gpu用于2d内容渲染2d框架,如果你在scout中正好打开了stage3d记录,flashplayer就会把每条执行到的stage3d命令传到scout里。也就是说,所有context3d对象的调用会被记录下来。Stage3d渲染面板可以一步步的重新执行这些命令

 
开始使用Adobe <wbr> <wbr>Scout(下)




在这个面板里,你会看到所有你所选择帧里执行的stage3d命令。你可以点击任何有关draw的函数(Context3D.drawTriangles),左边的面板会立即更新显示调用这个函数后后台缓冲区的状态。按空格键会跳到下一个draw函数调用的地方,按backspace键会跳到前一个draw函数调用的地方,这使得单步调试渲染的场景非常简单。

 开始使用Adobe <wbr> <wbr>Scout(下)

 

如果你使用的是渲染到纹理(render-to-texture),然后scout会自动在后台缓冲区里显示你当前选择的渲染目标对象。

每条stage3d命令以简洁的格式显示,它带有传给命令的参数值。如果你不记得每个参数的含义,你可以右键命令选择显示参数名称。

Stage3d 渲染面板可以单步调试draw函数是因为scout有在它内部正在运行的stage3d擎的备份。Flash player运行时并没有把位图传给scout;它只是传每一条stage3d命令和程序里提供的参数,诸如程序,纹理,缓冲区这样你就可以用你的方式研究探索你的场景,调试你的内容。

线框模式,在该面板上方的工具条里打开,它仅使用重绘的三角形边显示场景的预览,这样回顾每一个对象并得知绘了什么。

 开始使用Adobe <wbr> <wbr>Scout(下)

 

要使用stage3d面板必须把允许stage3d记录选项打开,关于gpu有用信息会记录下来。

对任何stage3d内容,你可以参考在总结面板里得到gpu内存会话,它也会在会话概况和帧和时间轴上打开相应的图表。

 开始使用Adobe <wbr> <wbr>Scout(下)

你可以看到每个场景里数量的draw方法的调用数量,并且能看到你上传的主要的gpu内存资源的分解。

 

 

Stage3d 程序编辑器

因为scout有你执行的stage3d命令的全部信息,你可以交互地修改每一条命令,然后看渲染的结果。每一次你调用Context3D.drawTriangles,你就告诉gpu运行两个程序:在屏幕上定位若干位置的vertex program ,和在每一个三角形内容进行着色的fragmentprogram 。在stage3d 程序编辑器的帮助下,scout让你可以交互的查看和编辑这些程序。

Stage3D渲染面板里,点击draw函数调用的地方,然后看stage3d程序编辑器,如下图,stage3d程序编辑器可以在窗口菜单里选择打开。它会显示在调用draw时供vertex  fragment 程序使用的AGAL代码。

 开始使用Adobe <wbr> <wbr>Scout(下)

开始使用Adobe <wbr> <wbr>Scout(下)

你可以交互的编辑这些代码,然后点上传让scout重绘场景。下图展示了这个过程。

 //fragment program (agal 1)
tex ft0, v0, fs1 <2d, linear, miplinear, repeat>
tex ft1, v1, fs2 <2d, linear, miplinear, repeat>
mul oc, ft0, ft1

上面头两行程序读入两个不同的纹理,最后一行将两纹理相乘来决定最后输出的像素颜色。

第一个纹理(fs1)是建筑墙的砖块形,第二个纹理(fs2)是阴影。

 开始使用Adobe <wbr> <wbr>Scout(下)

要看程序的改变如果起作用,改变最后一行,如下,它让颜色基于第一个纹理(只显示第一个纹理)。

 //fragment program (agal 1)
tex ft0, v0, fs1 <2d, linear, miplinear, repeat>
tex ft1, v1, fs2 <2d, linear, miplinear, repeat>
mov oc, ft0
 

 

当你点击上传后,你会看到场景重新渲染了。你同时会看到一些命令变成purple色了,表示这些命令使用了你的修改你也可以点击重置,还原原始的状态。

 

你也可以这样修改,只显示第二个纹理。

 //fragment program (agal 1)
tex ft0, v0, fs1 <2d, linear, miplinear, repeat>
tex ft1, v1, fs2 <2d, linear, miplinear, repeat>
mov oc, ft1

 开始使用Adobe <wbr> <wbr>Scout(下)

这种交互能力对debug来说非常有用,你也可以使用它学习如何使用AGAL 

 

常见问题

下面是一系列常见问题对你开始使用scout可能有帮助。

 

1.  Flash player 不能连接到scout

  确保你的scout是最新的版本

  确保你的flash player 足够新

  对于移动项目来说,确保你使用的是最新版的sdk 或者flash builder

  对于移动项目,确保companion app 是连着的

  同时确保.telemetry.cfg 文件内容正确并且位置正确

  核实scout服务正在监听。在浏览器里输入localhost:7934,如果有诸如“未收到数据”,“连接丢失”或其它类似的提示(因为scout不是http服务器),scout应该会显示“无法新建会话,因为telemetry 数据无效”。而如果浏览器等了很长时间然后跳出“服务器未发现”之类的提示,说明scoutsocket服务没在工作。

检测你的防火墙设置。你也可以改变scout的端口在首先项  > 监听新会话的端口。

然后scout会自动更新.telemetry.cfg文件。

2.  如果IOS 或者Android Scout companion app不能连接,试试如下方法。

  确保你的scout companion app是最新的。

  如果 companion app不能找到你的机器,看看输入ip 地址能不能连接上。

  查看选择其它的应用能不能连接到你的机器。你可能想在你的机器上建一个web

服务器连接试试。

  mac系统,在系统首先项  > 共享,启用web共享

  windows,启用iis

  在你本机上试试能不能访问本地的网站

  再试试从其它设备访问

3.  如果是从chrome里远程分析

如果在chrome里你使用的是Flash Pepper plugin(默认的是),.telemetry.cfg 件在一个不是很好找的位置

MAC OS   

~/Library/Application Support/Google/Chrome/Default/Pepper Data /Shockwave Flash/UserHome/.telemetry.cfg 

 

  Windows:  

%HOMEDRIVE%%HOMEPATH%\AppData\Local\Google\Chrome\UserData\Default\Pepper Data\ShockwaveFlash\UserHome\.telemetry.cfg 

4.  等待GPU的意思

stage3d的应用里,你的cpugpu必须同步才能得到你想要的帧频。如果一个负载了那个帧频就会掉下来,有如下几个可能。

  GPU不能超过60fps。如果你想更新的比这快,他们就会成块。如果你在构建60fps的,对等待gpu时间不要着急

  如果你的帧频一持续很低,那么就是你给gpu的负荷太大了。你需要优化的3d码(或者在配置更好的设备上运行)。例如,试着渲染更少的三角形,使用AGAL程序,或者使用更小的纹理。这时scout不能直接显示GPU里的什么慢,因为它不能测算GPU的时间。然而,如果你打开stage3d记录并查看stage3d记录面板,

 

你可以准备的看到哪个stage3d命令在执行,对它进行单步调试,看看他们是如果影响屏幕的。你可能能发现更有效的方式。

  如果你的帧率抖动,摆动,或锯齿图案,你可能遇到关于cpu gpu同步的问题,ADOBE正在展开这项工作。

5.  Scout崩溃或者显示错误,怎么办如果在你保存之前崩溃了,你可以从以下的路径里恢复数据,在这里你可能发现很多的FLM文件。

Mac OS:  /var/folders/… …/Adobe Performance Data

Windows:  %HOMEDRIVE%%HOMEPATH%\AppData\Local\Temp\Adobe Performance Data

 

注意  MAC OS,实际的位置可以变的,所以最好的方式就是在/var/folders搜索 "Adobe Performance Data"如果在试着打开FLM文件时Scout再次崩溃,那么你就是发现了一个bug。如果你提交你的FLMADOBE,我们会解决这个BUG并且会非常感激你的。

如果发生错误了,在scout log里有更多的信息。

Mac OS:  ~/Library/Preferences/Adobe/Scout/1.0/logs

  Windows:  %HOMEDRIVE%%HOMEPATH%\AppData\Roaming\Adobe\Scout\1.0\logs

 

下一步

现在你知道scout是如何工作和如何使用的,我鼓励你亲自用它来微调你在FLASHPLAYER AIR上的游戏。


0 0
原创粉丝点击