性能测试:DAMP¶
DAMP(DevTools At Maximum Performance)是我们用于跟踪性能的测试套件。
如何在本地运行?¶
./mach talos-test --suite damp
请注意,第一次运行会比较慢,因为它会拉取一个包含各种网站副本的大型 tarball。这将运行所有 DAMP 测试,您可以使用以下命令按测试名称进行筛选:
./mach talos-test --suite damp --subtests console
此命令将运行名称中包含“console”的所有测试。
请注意,在持续集成中,DAMP 测试被拆分为更小的测试套件:damp-inspector
、damp-other
和 damp-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 性能分析”
这应该会启动一个名为 damp-p
的新 damp 作业。一旦 damp-p
完成
选择
damp-p
作业单击“作业详细信息”选项卡
单击“在 Firefox 性能分析器中打开”
它做什么?¶
DAMP 测量三个重要的操作
打开工具箱
重新加载网页
关闭工具箱 它测量对以下面板执行每个操作所需的时间
检查器、控制台、网络监控程序、调试器、内存、性能。
它运行所有这三个测试两次。每次针对不同的网页
“简单”:一个空网页。此测试突出了所有工具在最简单的页面上的性能。
“复杂”:bild.de 网站的副本。这应该代表一个通过 DevTools 调试的典型网站。
然后,还有一些额外的测试
“冷启动”:我们首先使用检查器运行三个操作(打开工具箱、页面重新加载和关闭工具箱)。这是在 Firefox 启动后、任何其他测试之前首先运行的。此测试允许测量“冷启动”。当用户第一次与 DevTools 交互时,会加载和缓存许多资源,因此所有后续交互都会快得多。
以及许多其他较小的测试,专注于每个面板的一个特定功能或可能的缓慢。
如何在 try 上查看结果?¶
首先,打开 TreeHerder。在执行 ./mach try
时,控制台会显示一个链接。您还应该收到一封包含链接的邮件。
查找“T-e10s(+6)”,单击“+6”,然后单击“damp”:
在刚刚打开的底部面板上,单击“将结果与另一个修订版进行比较”。
您现在在 PerfHerder 上,单击“比较”。
在“Talos”选择菜单旁边,在筛选文本框中,键入“damp”。在“damp opt e10s”项下,将鼠标悬停在“linux64”行上,单击“子测试”链接。
在这里,您可以获得每个 DAMP 测试的结果:
在此页面上,您可以使用结果表顶部的筛选框按测试名称进行筛选。此表包含以下列
基准:在基准构建上运行测试的平均时间(默认情况下,mozilla-central 修订版上过去 2 天的 DAMP 运行)。
新版本:在新构建上运行测试的平均时间,即包含您的补丁的构建。“基准”和“新版本”都带有“± x.xx%”后缀,它告诉您时间的方差。即中位数时间与最慢和最快时间之间的平均百分比差异。
差异:基准运行和新版本运行之间的百分比差异。此差异的颜色可以是红色、橙色或绿色
红色表示“肯定存在回归”
橙色表示“可能存在回归”
绿色表示“肯定有改进”
无彩色背景表示“无法得出结论” 肯定和可能的差异由下一列解释。
置信度:如果两次运行之间存在显着差异,则说明结果是否可靠。
“低”表示两次运行之间没有显着差异,或者差异小于给定测试的典型方差。如果已知测试在两次相同构建的运行之间执行时间变化 2%,而您在基准构建和新构建之间得到 1% 的差异,则置信度将为低。您真的无法得出任何结论。
“中”表示中等置信度,并且差异约等于方差的大小。它可能突出显示了回归,但仍可以通过测试噪声来证明。
“高”表示这是一个高置信度差异。差异明显高于测试的典型方差。很可能检测到回归。
还有一个“仅显示重要更改”复选框,这有助于查看是否存在任何显着回归。它将仅显示具有中等或高置信度的回归和改进。
如何为 DAMP 做贡献?¶
DAMP 基于一个名为 Talos 的更通用的测试套件。Talos 是一个 Mozilla 测试套件,用于跟踪所有 Firefox 组件的性能。它使用 Python 编写,以下是 mozilla-central 中的 源代码。与其他测试套件相比,它不是在云端运行,而是在专用硬件上运行。这是为了确保性能指标随着时间的推移以及两次运行之间保持稳定。Talos 运行各种类型的测试。更具体地说,DAMP 是一个 页面加载器测试。DAMP 的 源代码 也在 mozilla-central 中。有关 DAMP 测试实现的更多信息,请参阅 编写新的性能测试。
如何查看性能趋势?¶
您可以在 http://firefox-dev.tools/performance-dashboard 找到 DevTools 的专用性能仪表板。您将找到指向各种工具趋势图表的链接
每个工具页面都会显示与给定面板相关的全部子测试的图表。
图表上的每个圆圈代表一次推送到 mozilla-central 的操作。您可以将鼠标悬停在圆圈上以查看有关推送的更多信息,例如日期、子测试的性能影响以及推送 ID。点击圆圈将带您跳转到推送日志。
彩色圆圈表示推送包含被识别为对性能有影响的更改。这些更改可以归类为:
硬件:用于运行 Talos 的机器的硬件更改
平台:影响 DevTools 性能的非 DevTools 更改
damp:DAMP 中的测试更改,影响测试结果
devtools:已识别的 DevTools 更改,引入了改进或回归
此数据与共享的 Google 文档同步。
每个图表上都有一个 PerfHerder 链接,它会将您带到与此子测试对应的 PerfHerder 页面。
如何使用 PerfHerder 图表¶
在 PerfHerder 图表上,每个圆圈代表 mozilla-central 上的一次推送。当您看到峰值或下降时,您可以尝试通过点击圆圈来识别相关的补丁。它将显示一个黑色弹出窗口。然后点击更改集哈希(例如“cb717386aec8”),您将获得一个 Mercurial 更改日志。然后,您可以阅读更改日志并查看哪些更改集可能影响了性能。
例如,打开此页面。它正在跟踪针对“简单”页面的检查器打开性能。
看到 12 月 31 日的性能下降了吗?现在,点击此峰值的第一个黄色圆圈。您将获得一个类似这样的黑色弹出窗口:
点击更改日志链接以查看在此运行期间添加了哪些更改集。在这里,您将看到性能下降来自以下补丁
Bug 1245921 - 将工具箱工具栏转换为 React 组件
Bug 1245921 - 为 XUL 修补 ReactDOM 事件系统