如果希望度量性能,您应限制为仅收集低开销数据:Basic Telemetry、 ActionScript Sampler 和 CPU Usage 类别。这些类别经过了严格设计,所以和执行您的内容相比,Flash Player 只需尽可能少的时间收集数据并将其发送到 Scout。这意味着您可信任在 Scout 中看到的时间度量,这在查找性能问题时尤为重要!
如果希望收集有关渲染 的详细信息,也可选择具有高开销的设置:DisplayList Rendering Details 和 Stage3D Recording。这些设置对调试图形相关问题很有用;它们会分别让您看到在每个帧上绘制的 DisplayObject 以及 Stage3D 命令的准确执行顺序。但是,这种细节水平需要一定的代价。Flash Player 必须花多得多的时间来收集数据并将其传输到 Scout,这会降低您的内容的运行速度。如果决定收集此数据,那么在 Scout 中看到的计时信息将不准确。由于 Flash Player 正在执行额外的工作,因此一些执行时间看起来将比实际的要长。不仅如此,结果将具有偏差 ,因为一些活动的度量方式比其他活动更详细。
请记住,如果希望准确的性能数据,请保持低开销!您不能同时获得详细的渲染数据和准确的时间度量。这就像在乌塞恩 • 博尔特跑 100 米时对他进行采访。在您将话筒对着他时,他无法打破任何世界记录!
Basic Telemetry 和 ActionScript Sampler如果对性能感兴趣,您应该打开 Basic Telemetry 和 ActionScript Sampler 设置。它们实际上会收集两种不同类型的数据,这两种数据最初可能引起混淆。Flash Player 执行您的内容时,有两个核心部分会协同工作:
- Flash Player,它执行实际的工作并与外部世界进行联系。除了其他工作,它还将内容渲染到屏幕并播放声音和视频,以及处理输入事件和网络。
- 您的 SWF,它基本而言是一组静态资源(比如图像)和动态资源(比如 脚本 和 时间轴 )。这些动态资源由 Flash Player 执行并会告诉它怎么做。
Flash Player 代码库是仪器化的 ,所以它可在关键位置度量自己的情况。它度量自己用了多长时间执行关键代码块,以及它的关键数据结构使用了多少内存。此处 “关键 ” 这个词很重要。如果 Flash Player 度量了它在每个函数中所花的时间,它将具有很高的开销,而且运行速度比未分析它时会慢得多。因为它仅度量已知会花大量时间的活动,所以这些度量的开销微乎其微。换句话说,您在 Scout 中看到的时间非常准确。此数据称为 Basic Telemetry,Scout 在绘制帧时间轴时会使用它,Summary、Activity Sequence 和 Top Activities 面板中也会使用它。注意,Flash Player 仅报告所花的时间长于 5 微秒的活动;任何短于此时间的活动都不会在 Scout 中显示。
Scout 还会显示 SWF 中的 ActionScript 3 执行信息。打开 ActionScript Sampler 设置后,您就可以在 ActionScript 面板中看到此信息。此数据与 Basic Telemetry 有很大的区别。Flash Player 不会提前知道您的代码将是什么,所以它不能提前测量。而且如果 Flash Player 打算记录每个函数调用并将它们发送到 Scout,会增加极大的开销,进而导致结果不准确。相反,Flash Player 在执行期间会对您的 ActionScript 进行抽样 。每隔一毫秒,它就会获取调用堆栈的一个快照 ,该快照表示您的代码在特定的时间点所做的操作。
在 Scout 的 ActionScript 面板中,会在您选择的帧范围上聚合此数据,让您看到在每个函数上平均花的时间比例。此数据仅是近似值 (它仅显示为最接近的毫秒数,因为这是抽样频率),但随着您查看的抽样越多(比如选择更多的抽样),它会越来越准确。您始终应该注意 ActionScript 面板中的数据质量指示器。沮丧的面部(参见图 2)会告诉您,您查看的数据量不足以使它具有统计意义,而高兴的面部(参见图 3)表示数据非常准确,您可用它确定哪些函数的开销最高。