监视flash player在运行期间的性能表现


  我的想法就是在Flash Player运行期间简单的加入一个性能监测工具 方便我了解它的一些情况。FrameStats工具会帮助你判断Flash Player是正在执行代码 呢还是正在做渲染,抑或两者都在进行。
  这个工具是用纯粹的AS3来开发 的,用下面的代码加入到你的显示对象容器内(DisplayObject Container)。
  this.addChild( new FrameStats(this) );
  在Flex工程中,你可以将它放在UIComponent组件 中,因为这个组件类也是Sprite的子类
  protected function creationCompleteHandler():void { 
  var componenent:UIComponent = new UIComponent(); 
  componenent.addChild( frameStats ); 
  frameStatsHolder.addElement( componenent ); 
  }
  
  
  图1
  这个工具会显示下面几个阶段:
  构造代码 构造显示容器的代码和显示器子类执行情况
  ??Constructor Code -构造显示对象容器和他的子类中要执行的代码。
  时间是 Event.ENTER_FRAME 和 Event.FRAME_CONSTRUCTED 事件 之间的耗时
  ??帧动作Frame Actions -对象容器和它的子对象中的代码被执行;
  时间是 Event.EXIT_FRAME 和 Event.FRAME_CONSTRUCTED事件之间的耗时
  ??最终用户代码  监听渲染事件的代码和改变显示对象的最后的时机。
  ??可显示的对象发生改变   播放器 渲染显示列表中的显示对象的变化,这些变化会在屏幕上表现出来。 所显示的时间是从最终的用户代码到下一次进入帧事件(enter frame event)的耗时。
  
  源代码: 
  
  FrameStats.rar (3.7 KB)
  解释:
  FlashPlayer播放器是单线程的,它每一帧都会试着完全执行完编码和渲染需要的显示列表。直到FlashPlayer 10.1版本前都不曾有改变。这就意味着FP在每一个帧内都要完成代码执行和渲染两个任务。如果在单帧时间内完成不了,就会自动的改变帧速率使得每一帧时 间加长来完成这两个任务。也就意味着CPU和内存的高占用率和糟糕的用户体验。
  FlashPlayer 10.1版本正在解决此类问题。比如,10.1增加了自适应速率,如果两个任务都执行完会严重影响到帧速率。它会优先保障代码的执行而忽略掉渲染任务,从 而使得帧速率不会降到无法接受的地步。当10.1检测到背光进入到关闭状态时,它还会进入睡眠模式,这种模式下,渲染将暂停,帧速率降到4帧每秒(译者 注:节能但不失功能!)。10.1还会考虑执行优先权,比如如果加载 的swf 不需要显示在屏幕上(不呈现),它就会延后加载。另外,FP会自动暂停那些不可见的和不在屏幕最前面的swf(译者注:两个swf,其中一个被另一个挡住了,就是不在最前面)的回放。

猜你喜欢

转载自qwod18qwod.iteye.com/blog/1574428