性能测试:DAMP

DAMP(DevTools At Maximum Performance)是我们用于跟踪性能的测试套件。

如何在本地运行?

./mach talos-test --suite damp

请注意,第一次运行会比较慢,因为它会拉取一个包含各种网站副本的大型 tarball。这将运行所有 DAMP 测试,您可以使用以下命令按测试名称进行筛选:

./mach talos-test --suite damp --subtests console

此命令将运行名称中包含“console”的所有测试。

请注意,在持续集成中,DAMP 测试被拆分为更小的测试套件:damp-inspectordamp-otherdamp-webconsole。实际上,--suite damp 仅在本地使用,因为它包含所有可能的测试,并且使用起来更方便。但是,如果需要,您可以用任何其他测试套件替换 damp,如果您只想运行与特定测试套件关联的测试。您可以在 damp-tests.js 中找到测试和测试套件之间的映射关系。

命令行选项

仅运行一次测试

./mach talos-test --suite damp --cycles 1 --tppagecycles 1

--cycles 将 Firefox 重启次数限制为仅一次,而 --tppagecycles 将每个 Firefox 启动中测试重新运行的次数限制为一次。这在调试某个特定的子测试时通常很有用。

截取屏幕截图

DEBUG_DEVTOOLS_SCREENSHOTS=1 ./mach talos-test --suite damp

当传递 DEBUG_DEVTOOLS_SCREENSHOTS 环境变量时,将在每个子测试运行后截取屏幕截图。屏幕截图将在新选项卡中打开,并且它们的标题包含子测试标签。Firefox 不会自动关闭,以便您可以查看屏幕截图。

录制性能分析

./mach talos-test --suite damp --gecko-profile --gecko-profile-entries 100000000

这将自动记录测试并打开性能分析。您可以使用以下命令专注于单个子测试运行:

./mach talos-test --suite damp --subtests custom.webconsole --cycles 1 --tppagecycles 1 --gecko-profile --gecko-profile-entries 100000000

如何在 try 上运行?

./mach try fuzzy --query "'test-linux1804-64-shippable-qr/ 'damp" --rebuild 6
  • Linux 似乎构建和运行速度很快,并且在其他操作系统上提供了相当稳定的结果。DevTools 的绝大多数性能问题与操作系统无关,因此您在哪个操作系统上运行它们并不重要。

  • “damp” 是我们运行 DAMP 的 talos 存储桶。

  • 6 是我们运行 DAMP 测试的次数。这样做是为了计算所有 6 次运行的平均值,并有助于过滤掉噪音。

如何在 try 上获取性能分析?

一旦您拥有 damp 的成功 try 作业

  • 在 Treeherder 中选择此作业

  • 单击左下角的 ... 菜单

  • 选择“创建 Gecko 性能分析”

PerfHerder Create Gecko Profile menu

这应该会启动一个名为 damp-p 的新 damp 作业。一旦 damp-p 完成

  • 选择 damp-p 作业

  • 单击“作业详细信息”选项卡

  • 单击“在 Firefox 性能分析器中打开”

它做什么?

DAMP 测量三个重要的操作

  • 打开工具箱

  • 重新加载网页

  • 关闭工具箱 它测量对以下面板执行每个操作所需的时间

检查器、控制台、网络监控程序、调试器、内存、性能。

它运行所有这三个测试两次。每次针对不同的网页

  • “简单”:一个空网页。此测试突出了所有工具在最简单的页面上的性能。

  • “复杂”:bild.de 网站的副本。这应该代表一个通过 DevTools 调试的典型网站。

然后,还有一些额外的测试

  • “冷启动”:我们首先使用检查器运行三个操作(打开工具箱、页面重新加载和关闭工具箱)。这是在 Firefox 启动后、任何其他测试之前首先运行的。此测试允许测量“冷启动”。当用户第一次与 DevTools 交互时,会加载和缓存许多资源,因此所有后续交互都会快得多。

  • 以及许多其他较小的测试,专注于每个面板的一个特定功能或可能的缓慢。

如何在 try 上查看结果?

首先,打开 TreeHerder。在执行 ./mach try 时,控制台会显示一个链接。您还应该收到一封包含链接的邮件。

查找“T-e10s(+6)”,单击“+6”,然后单击“damp”:TreeHerder 作业

在刚刚打开的底部面板上,单击“将结果与另一个修订版进行比较”。TreeHerder 面板

您现在在 PerfHerder 上,单击“比较”。PerfHerder 比较

在“Talos”选择菜单旁边,在筛选文本框中,键入“damp”。在“damp opt e10s”项下,将鼠标悬停在“linux64”行上,单击“子测试”链接。PerfHerder 筛选

在这里,您可以获得每个 DAMP 测试的结果:PerfHerder 子测试

在此页面上,您可以使用结果表顶部的筛选框按测试名称进行筛选。此表包含以下列

  • 基准:在基准构建上运行测试的平均时间(默认情况下,mozilla-central 修订版上过去 2 天的 DAMP 运行)。

  • 新版本:在新构建上运行测试的平均时间,即包含您的补丁的构建。“基准”和“新版本”都带有“± x.xx%”后缀,它告诉您时间的方差。即中位数时间与最慢和最快时间之间的平均百分比差异。

  • 差异:基准运行和新版本运行之间的百分比差异。此差异的颜色可以是红色、橙色或绿色

    • 红色表示“肯定存在回归”

    • 橙色表示“可能存在回归”

    • 绿色表示“肯定有改进”

    • 无彩色背景表示“无法得出结论” 肯定和可能的差异由下一列解释。

  • 置信度:如果两次运行之间存在显着差异,则说明结果是否可靠。

    • “低”表示两次运行之间没有显着差异,或者差异小于给定测试的典型方差。如果已知测试在两次相同构建的运行之间执行时间变化 2%,而您在基准构建和新构建之间得到 1% 的差异,则置信度将为低。您真的无法得出任何结论。

    • “中”表示中等置信度,并且差异约等于方差的大小。它可能突出显示了回归,但仍可以通过测试噪声来证明。

    • “高”表示这是一个高置信度差异。差异明显高于测试的典型方差。很可能检测到回归。

还有一个“仅显示重要更改”复选框,这有助于查看是否存在任何显着回归。它将仅显示具有中等或高置信度的回归和改进。

如何为 DAMP 做贡献?

DAMP 基于一个名为 Talos 的更通用的测试套件。Talos 是一个 Mozilla 测试套件,用于跟踪所有 Firefox 组件的性能。它使用 Python 编写,以下是 mozilla-central 中的 源代码。与其他测试套件相比,它不是在云端运行,而是在专用硬件上运行。这是为了确保性能指标随着时间的推移以及两次运行之间保持稳定。Talos 运行各种类型的测试。更具体地说,DAMP 是一个 页面加载器测试。DAMP 的 源代码 也在 mozilla-central 中。有关 DAMP 测试实现的更多信息,请参阅 编写新的性能测试

如何使用 PerfHerder 图表

在 PerfHerder 图表上,每个圆圈代表 mozilla-central 上的一次推送。当您看到峰值或下降时,您可以尝试通过点击圆圈来识别相关的补丁。它将显示一个黑色弹出窗口。然后点击更改集哈希(例如“cb717386aec8”),您将获得一个 Mercurial 更改日志。然后,您可以阅读更改日志并查看哪些更改集可能影响了性能。

例如,打开此页面。它正在跟踪针对“简单”页面的检查器打开性能。Perfherder graphs

看到 12 月 31 日的性能下降了吗?现在,点击此峰值的第一个黄色圆圈。您将获得一个类似这样的黑色弹出窗口:Perfherder changeset popup

点击更改日志链接以查看在此运行期间添加了哪些更改集。在这里,您将看到性能下降来自以下补丁

  • Bug 1245921 - 将工具箱工具栏转换为 React 组件

  • Bug 1245921 - 为 XUL 修补 ReactDOM 事件系统