愿景

mozperftest 项目的创建初衷是替换 Mozilla Central 源码树中现有的所有性能测试框架,使其成为一个统一的框架,并将性能测试标准化,使其与 mochitests 和 xpcshell 测试一样成为一等公民。

我们希望任何开发者都能在其组件中编写性能测试,无论是在本地还是在 CI 中,就像他们使用 xpcshell 测试和 mochitests 一样。

历史上,我们有 Talos,它提供了许多不同的测试,从微基准测试到页面加载测试。然后我们有了 Raptor,它是 Talos 的一个分支,只专注于页面加载。之后添加了 mach browsertime,它是 browsertime 工具的包装器。

除了 mach browsertime 之外,所有这些框架主要都专注于在 CI 中良好运行,并且在本地难以使用。 mach browsertime 可以在本地运行,但并非在所有平台上都能运行,并且特定于 browsertime 框架。

mozperftest 目前提供了 mach perftest 命令,它将扫描在 ini 文件(例如 https://searchfox.org/mozilla-central/source/netwerk/test/perf/perftest.toml)中声明的所有测试,并在 moz.build 文件(例如 https://searchfox.org/mozilla-central/source/netwerk/test/moz.build#17)的 PERFTESTS_MANIFESTS 下注册。

如果您在没有任何参数的情况下启动 ./mach perftest,您将获得所有可用测试的完整列表,并且可以选择并运行其中一个。添加 –push-to-try 将在 try 上运行它。

该框架加载性能测试并读取其元数据,这些元数据可以在测试中声明。我们有一个解析器,目前能够识别和加载 xpcshell 测试和 browsertime 测试,以及每个测试的运行器。

但该框架可以扩展以支持更多格式。我们希望添加对 jsshell 和 m-c 中其他任何格式的支持。

性能测试是一个 perftest 运行的脚本,并返回我们可以使用的指标。现在,我们在控制台和 perfherder 中直接使用这些指标,但可以添加其他格式。例如,添加了一个新的 influxdb 输出,用于将数据推送到 influxdb 时间序列数据库。

重要的是确保性能测试属于其在源代码树中测试的组件。我们从 Talos 中吸取教训,将所有性能测试都放在一个地方是有问题的,因为一旦添加,开发人员就没有所有权意识。它变成了性能团队的问题。如果测试与 mochitests 和 xpcshell 测试一起保留在每个组件中,则组件维护人员将拥有和维护它。

后续步骤

我们希望将所有 Talos 和 Raptor 测试重写为 perftest。对于 Raptor,我们需要能够使用代理记录,这是一项正在进行的工作。从那里开始,运行 raptor 测试将是一个简单的、单行的 browsertime 脚本。

对于 Talos,我们需要将现有的微基准测试重构为 xpchsell 测试,如果这还不够,则创建一个新的运行器。

对于 JS 基准测试,一旦 jsshell 运行器添加到 perftest 中,它将变得非常简单。