论文部分内容阅读
【摘 要】Adobe Scout 提供了大量的数据供用户查看,但解读这些数据需要许多技术知识。本文介绍了 Scout 在幕后收集的数据以及它如何使用该数据来创建所需的图片,以便用户可以更轻松地了解所发生的情况。
【关键字】Adobe Scout;数据
Adobe Scout是一个内存概要分析工具,可以对 ActionScript 应用程序以及在 Adobe AIR 上运行的移动设备应用程序进行概要分析。
Adobe Scout 使用遥测功能帮助开发人员对自己的 Flash 内容进行概要分析。Adobe Scout 提供许多高级遥测选项,供用户在对应用程序进行概要分析时使用。例如,Adobe Scout 中的远程概要分析功能允许用户在运行 Adobe Scout 之外的计算机或设备上运行要分析的内容,本文主要介绍 Scout 在幕后收集的数据以及它如何使用该数据来创建所有的图片。
一、Adobe Scout数据应用基本知识
Adobe Scout动分析会话时,Flash Player(或 Adobe AIR)会打开与 Scout 的套接字连接并开始发送数据。Scout 的主要面板中提供的大部分数据都是所定义的活动的名称和计时详细信息。(除了活动之外,还有跟踪语句、Stage3D 命令和纹理,以及一些其他内容。)Scout 将分析这些活动详细信息并生成其图表和图形。
二、Adobe Scout所定义的活动
在 Scout 中,活动是与某个特定功能相关联的时间块。Scout 中的活动具有以下特征:
每个活动都具有名称、开始时间和结束时间。某些活动还具有其他参数。
活动可以嵌套。如果活动 A 在活动 B 之前开始并且在活动 B 完成后结束,则 Scout 会将 B 视为 A 的子活动。
Scout 根据它所获得的计时数据计算每个活动的总时间(total time)和自身时间(self time)。总时间是指活动的开始时间和结束时间之间的时间量。自身时间是指在该活动上(但不包括在其子活动上)花费的时间。换言之,活动的自身时间是它的总时间减去它的直系子活动的总时间。以下是一个具体的案例。
假设 Flash Player 将表 1 中的活动数据发送到 Scout。(为绝对准确,Flash Player 不向 Scout 发送每个活动的开始和结束时间,而是发送结束时间和持续时间。但结果是相同的)
如表所示,Scout 会根据计时数据推测活动 B 是活动 A 的子活动。如果使用自定义跨度指标 API 来定义非嵌套的活动(例如,B 在 A 期间开始但在其之后结束),则在 Scout 中查看该数据将会生成错误或者只是不会显示数据。因此,在定义自己的嵌套指标时,需要注意按照这些事件的开始顺序的反向顺序来结束这些事件。
三、解读数据
通过前面的解释,现在理解Scout 中显示的数据应该会容易一些。首先,在 Activity Sequence 面板中,会列出 Scout 知道的有关单个帧的所有活动,以及它们保持未变的嵌套关系,如图1所示。
图 1单个帧的活动在 Activity Sequence 面板中显示为嵌套的活动
可以看到每个活动的开始时间,但在默认情况下该功能被关闭,因为它通常没有用处。(右键单击列标题可以更改哪些标题可见。)需要注意的是Scout 通常会筛选掉总时间小于 0.5 ms 的活动。要切换此行为,请单击 Hide Small Items 按钮。
另一方面,Top Activities 面板忽略了活动的开始时间和嵌套关系,以便它可以显示多个帧的聚合数据。在该面板中,同一活动的多个实例被分组到一起,而不是像在 Activity Sequence 面板中那样显示多次,因此 Scout 会指出活动在所选的时间跨度内发生了多少次,如图2所示。
图 2 Top Activities 面板显示多个帧的聚合数据
这两个面板背后的数据是相同的;它们只是对该数据进行了封装并且以不同的方式显示。了解這些面板背后的数据有助于更明确地理解这些含义。例如,当某个 ActionScript 函数调用BitmapData.draw() 或类似的 API 时,将会调用 Flash Player 渲染器。由于渲染在 ActionScript 执行之后开始并且在其结束之前结束,因此,Scout 会将其视为 ActionScript 活动的子活动。但是,只有在保留了嵌套信息的 Activity Sequence 面板中检查时才会看到这一情况。如果你查看 Top Activities 面板,所有活动都将被分组到一起,无论它们是由 ActionScript 触发的还是由 Flash Player 自动执行的。
最后,这可能不是一目了然的,但是在 Summary 面板中为每个条目显示的时间是相关活动的自身时间如图3所示。Summary 面板将活动分组为多个预定义的类别,并且为每个类别显示自身时间的总和,查看哪个活动名称属于哪个类别的最简单方法是查看 Scout 使用的颜色。
图 3 所有活动的总自身时间显示在 Summary 面板
四、ActionScript 面板
Scout ActionScript 面板中显示的数据与迄今为止讨论的所有事物完全不同。这是因为如果 Flash Player 在每次调用 ActionScript3 函数时都向 Scout 发送一个活动,则分析开销可能会使处理速度变得极为缓慢。因此,Flash Player 大约每毫秒对调用堆栈进行采样,并且 Scout 将推测正在发生的情况。例如,考虑 Flash Player 发送表 3 中呈现的数据的情况。
表3 Flash Player 发送的数据
通过该数据,Scout 可以估计出 FunctionC 大约执行了 2 ms。但是,不知道它在该期间内是执行了一次还是许多次 — Scout 只知道对于两次连续的采样,它位于调用堆栈的顶部。而且,在两次采样期间,FunctionC 可能已调用了 FunctionD(如果 FunctionD 快速返回)。这是 ActionScript 面板只能提供近似结果的原因,因此,要想获得更准确的结果,你应当选择一个较长的时间跨度。Scout 检查的样本越多,结果将越准确。
参考文献:
1.Adobe公司 .Adobe Flash CS6中文版经典教程[M].北京人民邮电出版社,2014.5
2.Thibault Imbert.Adobe Scout 入门[EB/OL]. http://www.adobe.com/cn/devnet/scout/articles/adobe-scout-getting-started.html#articlecontentAdobe_numberedheader_0.
【关键字】Adobe Scout;数据
Adobe Scout是一个内存概要分析工具,可以对 ActionScript 应用程序以及在 Adobe AIR 上运行的移动设备应用程序进行概要分析。
Adobe Scout 使用遥测功能帮助开发人员对自己的 Flash 内容进行概要分析。Adobe Scout 提供许多高级遥测选项,供用户在对应用程序进行概要分析时使用。例如,Adobe Scout 中的远程概要分析功能允许用户在运行 Adobe Scout 之外的计算机或设备上运行要分析的内容,本文主要介绍 Scout 在幕后收集的数据以及它如何使用该数据来创建所有的图片。
一、Adobe Scout数据应用基本知识
Adobe Scout动分析会话时,Flash Player(或 Adobe AIR)会打开与 Scout 的套接字连接并开始发送数据。Scout 的主要面板中提供的大部分数据都是所定义的活动的名称和计时详细信息。(除了活动之外,还有跟踪语句、Stage3D 命令和纹理,以及一些其他内容。)Scout 将分析这些活动详细信息并生成其图表和图形。
二、Adobe Scout所定义的活动
在 Scout 中,活动是与某个特定功能相关联的时间块。Scout 中的活动具有以下特征:
每个活动都具有名称、开始时间和结束时间。某些活动还具有其他参数。
活动可以嵌套。如果活动 A 在活动 B 之前开始并且在活动 B 完成后结束,则 Scout 会将 B 视为 A 的子活动。
Scout 根据它所获得的计时数据计算每个活动的总时间(total time)和自身时间(self time)。总时间是指活动的开始时间和结束时间之间的时间量。自身时间是指在该活动上(但不包括在其子活动上)花费的时间。换言之,活动的自身时间是它的总时间减去它的直系子活动的总时间。以下是一个具体的案例。
假设 Flash Player 将表 1 中的活动数据发送到 Scout。(为绝对准确,Flash Player 不向 Scout 发送每个活动的开始和结束时间,而是发送结束时间和持续时间。但结果是相同的)
如表所示,Scout 会根据计时数据推测活动 B 是活动 A 的子活动。如果使用自定义跨度指标 API 来定义非嵌套的活动(例如,B 在 A 期间开始但在其之后结束),则在 Scout 中查看该数据将会生成错误或者只是不会显示数据。因此,在定义自己的嵌套指标时,需要注意按照这些事件的开始顺序的反向顺序来结束这些事件。
三、解读数据
通过前面的解释,现在理解Scout 中显示的数据应该会容易一些。首先,在 Activity Sequence 面板中,会列出 Scout 知道的有关单个帧的所有活动,以及它们保持未变的嵌套关系,如图1所示。
图 1单个帧的活动在 Activity Sequence 面板中显示为嵌套的活动
可以看到每个活动的开始时间,但在默认情况下该功能被关闭,因为它通常没有用处。(右键单击列标题可以更改哪些标题可见。)需要注意的是Scout 通常会筛选掉总时间小于 0.5 ms 的活动。要切换此行为,请单击 Hide Small Items 按钮。
另一方面,Top Activities 面板忽略了活动的开始时间和嵌套关系,以便它可以显示多个帧的聚合数据。在该面板中,同一活动的多个实例被分组到一起,而不是像在 Activity Sequence 面板中那样显示多次,因此 Scout 会指出活动在所选的时间跨度内发生了多少次,如图2所示。
图 2 Top Activities 面板显示多个帧的聚合数据
这两个面板背后的数据是相同的;它们只是对该数据进行了封装并且以不同的方式显示。了解這些面板背后的数据有助于更明确地理解这些含义。例如,当某个 ActionScript 函数调用BitmapData.draw() 或类似的 API 时,将会调用 Flash Player 渲染器。由于渲染在 ActionScript 执行之后开始并且在其结束之前结束,因此,Scout 会将其视为 ActionScript 活动的子活动。但是,只有在保留了嵌套信息的 Activity Sequence 面板中检查时才会看到这一情况。如果你查看 Top Activities 面板,所有活动都将被分组到一起,无论它们是由 ActionScript 触发的还是由 Flash Player 自动执行的。
最后,这可能不是一目了然的,但是在 Summary 面板中为每个条目显示的时间是相关活动的自身时间如图3所示。Summary 面板将活动分组为多个预定义的类别,并且为每个类别显示自身时间的总和,查看哪个活动名称属于哪个类别的最简单方法是查看 Scout 使用的颜色。
图 3 所有活动的总自身时间显示在 Summary 面板
四、ActionScript 面板
Scout ActionScript 面板中显示的数据与迄今为止讨论的所有事物完全不同。这是因为如果 Flash Player 在每次调用 ActionScript3 函数时都向 Scout 发送一个活动,则分析开销可能会使处理速度变得极为缓慢。因此,Flash Player 大约每毫秒对调用堆栈进行采样,并且 Scout 将推测正在发生的情况。例如,考虑 Flash Player 发送表 3 中呈现的数据的情况。
表3 Flash Player 发送的数据
通过该数据,Scout 可以估计出 FunctionC 大约执行了 2 ms。但是,不知道它在该期间内是执行了一次还是许多次 — Scout 只知道对于两次连续的采样,它位于调用堆栈的顶部。而且,在两次采样期间,FunctionC 可能已调用了 FunctionD(如果 FunctionD 快速返回)。这是 ActionScript 面板只能提供近似结果的原因,因此,要想获得更准确的结果,你应当选择一个较长的时间跨度。Scout 检查的样本越多,结果将越准确。
参考文献:
1.Adobe公司 .Adobe Flash CS6中文版经典教程[M].北京人民邮电出版社,2014.5
2.Thibault Imbert.Adobe Scout 入门[EB/OL]. http://www.adobe.com/cn/devnet/scout/articles/adobe-scout-getting-started.html#articlecontentAdobe_numberedheader_0.