Source code

Revision control

Copy as Markdown

Other Tools

# Service Worker Performance Tests
Our performance tests are mochitests running in the [mozperftest](https://firefox-source-docs.mozilla.org/testing/perfdocs/mozperftest.html)
harness. Tests reside under {searchfox}`dom/serviceworkers/test/performance`,
itemized in perftest.toml. Beyond the standard mochitest machinery,
performance tests define a `perfMetadata` variable at the top level, and call:
`info("perfMetrics", JSON.stringify(metrics));`
to report their results, where *metrics* is a map from testpoint name to scalar
numeric value. See the [performance scripts documentation](https://firefox-source-docs.mozilla.org/testing/perfdocs/writing.html#mochitest)
for more.
They can be run via mach perftest, or as normal mochitests via mach test.
(Currently we can’t run the full manifest, see [bug 1865852](https://bugzilla.mozilla.org/show_bug.cgi?id=1865852).)
## Adding new tests
Add files to {searchfox}`perftest.toml <dom/serviceworkers/test/performance/perftest.toml>`
as usual for mochitests.
Modify linux.yml, macosx.yml, and windows11.yml under {searchfox}`taskcluster/kinds/perftest`.
Currently, each test needs to be added individually to the run command ({searchfox}`here <mozilla-central/rev/91cc8848427fdbbeb324e6ca56a0d08d32d3c308:taskcluster/ci/perftest/linux.yml#121-149>`,
for example). kind.yml can be ignored–it provides some defaults.
Add your new test to {searchfox}`perfdocs/config.yml <python/mozperftest/perfdocs/config.yml>`.
Modify the generated documentation using:
`$ ./mach lint -l perfdocs . --fix --warnings --outgoing`
which will likely cause the command to fail. Running it a second time should
succeed.
## Profiler Markers
Profiler markers can be used to collect timing data. Markers of known name can be inspected from the perftest. AUTO_PROFILER_MARKER_UNTYPED must be used, as we need both the start-time and end-time of the marker. For example:
```cpp
AUTO_PROFILER_MARKER_UNTYPED("interesting thing #1", DOM, {};
AUTO_PROFILER_MARKER_UNTYPED("interesting thing #2", DOM, {});
```
can be inspected from the perftest:
```js
await startProfiler();
interestingThings();
let pdata = await stopProfiler();
let duration_ms = inspectProfile(pdata, [
"interesting thing #1",
"interesting thing #2"
]);
```
## Staging tests in try jobs
`$ ./mach try fuzzy --full`
Look for `‘service-worker` to find things like:
perftest-windows-service-worker
perftest-macosx-service-worker
perftest-linux-service-worker
## Results
Results can be found in treeherder on [mozilla-central](https://treeherder.mozilla.org/jobs?repo=mozilla-central&searchStr=perftest)
These symbol names are defined in the .yml files under taskcluster/kinds/perftest.
## Contacts
DOM LWS
[Gregory Mierzwinski](https://people.mozilla.org/p/sparky)
(Performance Tools)