Skip to content

Commit f9f7ce3

Browse files
jdmdelan
andauthored
This Month in Servo 4/25 (#235)
* Initial commit triage for april TMiS post. * Generate outline. * Write about servoshell. * More sections. * Add webdriver note. * Add webview PRs. * More change descriptions. Signed-off-by: Josh Matthews <[email protected]> * More descriptions and copyediting. * Initial draft for April with donations * Add WPT dashboard data * Try `tac` but fall back to `tail -r` if unavailable * Fix list-commits-between.sh when run without a pulls.json * Add note to README about list-commits-by-nightly.sh * Add commits.txt for 1 April through 29 April * Triage 59 commits * Add tip about triaging commits * Triage 62/239 of the remaining commits * Triage 86/239 of the remaining commits * Triage 98/239 of the remaining commits * Triage 143/239 of the remaining commits * Triage 163/239 of the remaining commits * Replace email addresses with GitHub handles * Triage 186/239 of the remaining commits * Triage 212/239 of the remaining commits * Triage all 239 remaining commits * Generate outline for April * More writeups. Signed-off-by: Josh Matthews <[email protected]> * Finish initial writeups for commits. Signed-off-by: Josh Matthews <[email protected]> * Copyediting and screenshots. Signed-off-by: Josh Matthews <[email protected]> * Temper expectations. Signed-off-by: Josh Matthews <[email protected]> * Fix screenshots. Signed-off-by: Josh Matthews <[email protected]> * Fix dangling markup. Signed-off-by: Josh Matthews <[email protected]> * Write about 26 commits * Write about devtools * Write about editing * Write about forms * Write about script * Add wpt dashboard stats. Signed-off-by: Josh Matthews <[email protected]> * Write about HTML features * Write about about:memory * Write about servoshell * Rework text about new API features * Write about testing * Add about:memory figure * One sentence per line, to make diffs easier to read * Remove finished commits from April post * Write about shadow DOM (with March) * Figure filenames * Copy big news across * Merge in `script` split * Merge in --enable-experimental-web-platform-features * Move --enable-experimental-web-platform-features * Merge in new features * Write about conference talks * Merge merge * Merge in perf and stability * Merge in embedding * Merge in keyword sizes * Add another figure * Add gc patches from April * Minor fixes * Write about incremental layout * Write about crashes * Write about embedding * Write about legacy layout * Linkify libservo items * Swap sections * Merge in bulk changes * Write about more crashes * Merge in servoshell * Merge in remaining March text * Write about Outreachy interns * Write about AI policy * Write about WPT scores * Move flexbox improvements * Remove notes * s/GMail/Gmail/ * Title and summary * Linkify everything * Tweak devtools wording * Copyediting --------- Signed-off-by: Josh Matthews <[email protected]> Co-authored-by: Delan Azabani <[email protected]>
1 parent f56e93e commit f9f7ce3

11 files changed

+241
-37
lines changed

README.md

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ To copy the output to your clipboard for a specific calendar month only:
3434
$ tools/list-commits-by-nightly.sh ~/code/servo 2>&1 | tee /dev/stderr | sed '/^>>> 2025-01-/,/^>>> 2025-02-/!d' | xclip -sel clip
3535
```
3636

37+
**NOTE:** this will display the squash commit message of each commit, which has historically been less useful than the pull request description. To display pull request descriptions instead, pass in a pulls.json as documented in [§ Triaging commits in nightlies for monthly updates](#triaging-commits-in-nightlies-for-monthly-updates).
38+
3739
## How to list this year’s pull request contributors
3840

3941
```sh
@@ -58,51 +60,46 @@ $ > tools/pull-requests.json tools/list-pull-requests.sh servo/servo 2023-03-16
5860

5961
```js
6062
((data, ...dates) => {
61-
const stride = data.area_keys.length;
63+
const focusAreaCount = data.focus_areas.length;
6264
const rows = dates.map(expectedDate => data.scores.find(([date]) => date == expectedDate));
6365
rows.forEach((row, i) => {
66+
console.log(i, row);
6467
if (row == null) throw `no results for ${dates[i]}!`;
65-
if (row.length != 3 + stride + 2 + stride) throw "schema change? bad length";
68+
if (row.length != 3 + focusAreaCount) throw "schema change? bad length";
6669
if (row[0] != dates[i]) throw "unreachable! incorrect date in [0]";
6770
if (!/^[0-9a-f]{9}$/.test(row[1])) throw "schema change? expected commit hash in [1]";
68-
if (!/^0[.]0[.]1-[0-9a-f]{7}$/.test(row[2])) throw "schema change? expected version in [2]";
69-
if (!/^[0-9a-f]{9}$/.test(row[3+stride])) throw "schema change? expected commit hash in [3+stride]";
70-
if (!/^0[.]0[.]1-[0-9a-f]{7}$/.test(row[4+stride])) throw "schema change? expected version in [4+stride]";
71+
if (!/^0[.]0[.]1-[0-9a-f]{7,9}$/.test(row[2])) throw "schema change? expected version in [2]";
7172
});
72-
const areas = data.area_keys.map((key, i) => ({key, results: rows.map((row, j) => ({
73+
const areas = data.focus_areas.map((focusAreaName, i) => ({focusAreaName, results: rows.map((row, j) => ({
7374
date: dates[j],
74-
legacy: row[3+i],
75-
servo: row[5+stride+i],
75+
score: row[3+i].total_score / row[3+i].total_tests,
76+
subtests: row[3+i].total_subtests_passed / row[3+i].total_subtests,
7677
}))}));
7778
console.log(">>> areas", areas);
7879
const analysis = areas
79-
.map(({key, results: [p, q]}) => ({
80-
key,
81-
regressionWas: p.legacy - p.servo,
82-
regressionNow: q.legacy - q.servo,
83-
legacyWas: p.legacy,
84-
legacyNow: q.legacy,
85-
servoWas: p.servo,
86-
servoNow: q.servo,
80+
.map(({focusAreaName, results: [p, q]}) => ({
81+
focusAreaName,
82+
scoreWas: p.score,
83+
scoreNow: q.score,
84+
subtestsWas: p.subtests,
85+
subtestsNow: q.subtests,
8786
}))
88-
.map(({key, regressionWas, regressionNow, legacyWas, legacyNow, servoWas, servoNow}) => ({
89-
key, regressionWas, regressionNow, legacyWas, legacyNow, servoWas, servoNow,
90-
legacyDelta: delta(legacyWas, legacyNow),
91-
servoDelta: delta(servoWas, servoNow),
92-
regressionDelta: delta(regressionWas, regressionNow),
87+
.map(({focusAreaName, scoreWas, scoreNow, subtestsWas, subtestsNow}) => ({
88+
focusAreaName, scoreWas, scoreNow, subtestsWas, subtestsNow,
89+
scoreDelta: delta(scoreWas, scoreNow),
90+
subtestsDelta: delta(subtestsWas, subtestsNow),
9391
}));
9492
console.log(">>> analysis", analysis);
95-
const deltaAnalysisText = analysis
96-
.sort((p,q) => q.servoDelta.pp - p.servoDelta.pp)
97-
.map(({key, servoDelta, servoNow}) => `${key} (${servoDelta.pp.toFixed(1)}pp to ${(servoNow/10).toFixed(1)}%)\n`);
98-
console.log(`>>> top deltas (servo, pp):\n${deltaAnalysisText.join("")}`);
99-
const regressionAnalysisText = analysis
100-
.filter(({regressionWas}) => regressionWas >= 0)
101-
.sort((p,q) => p.regressionDelta.percent - q.regressionDelta.percent)
102-
.map(({key, regressionDelta, regressionWas, regressionNow}) => `${key} (${regressionDelta.percent.toFixed(1)}% from ${(regressionWas/10).toFixed(1)}pp to ${(regressionNow/10).toFixed(1)}pp)\n`);
103-
console.log(`>>> top cuts in legacy regression (%):\n${regressionAnalysisText.join("")}`);
104-
function delta(p,q) { return {pp: (q-p)/10, percent: 100*(q-p)/p}; }
105-
})(await (await fetch("scores.json")).json(), fromDate, toDate)
93+
const scoreAnalysisText = analysis
94+
.sort((p,q) => q.scoreDelta.pp - p.scoreDelta.pp)
95+
.map(({focusAreaName, scoreDelta, scoreNow}) => `${focusAreaName} (${scoreDelta.pp.toFixed(1)}pp to ${(scoreNow*100).toFixed(1)}%)\n`);
96+
console.log(`>>> top deltas (score, pp):\n${scoreAnalysisText.join("")}`);
97+
const subtestsAnalysisText = analysis
98+
.sort((p,q) => q.subtestsDelta.pp - p.subtestsDelta.pp)
99+
.map(({focusAreaName, subtestsDelta, subtestsNow}) => `${focusAreaName} (${subtestsDelta.pp.toFixed(1)}pp to ${(subtestsNow*100).toFixed(1)}%)\n`);
100+
console.log(`>>> top deltas (subtests, pp):\n${subtestsAnalysisText.join("")}`);
101+
function delta(p,q) { return {pp: (q-p)*100, percent: 100*(q-p)/p}; }
102+
})(await (await fetch("https://wpt.servo.org/scores.json")).json(), fromDate, toDate)
106103
```
107104

108105
## How to analyse [wpt.fyi](https://wpt.fyi) pass rate improvements
@@ -347,7 +344,7 @@ Generally we want to include...
347344
And generally we want to exclude...
348345

349346
- dependabot updates (“build(deps)”)
350-
- WPT imports (“Update web-platform-tests”)
347+
- WPT imports (“Update web-platform-tests” or “Sync WPT with upstream”)
351348
- lint and warning fixes
352349
- other CI changes
353350
- refactors (unless large-scale)
@@ -375,6 +372,8 @@ $ tools/list-commits-by-nightly.sh ~/code/servo tools/pulls-2025-01-2025-02.json
375372
- To write some notes or additional context, append `; your notes` to that new tags line
376373
- Generate the outline: `tools/generate-outline.sh commits.txt`
377374

375+
**TIP:** if you’re faced with hundreds of commits and it’s a real slog, try triaging the commits of one author at a time. Each author probably only works on a few things each month, so it’s a lot easier to keep the context of their work in your head.
376+
378377
## Hints for writing about changes
379378

380379
**Always check the correct names of people and API features.** People like it when their names are spelled correctly, of course, but sometimes authors refer to API features by incorrect names. When in doubt, check the spec. For example, [servo#32642](https://github.com/servo/servo/pull/32642) says “ShaderCompilationInfo” in the title, but the interface is actually [GPUCompilationInfo](https://developer.mozilla.org/en-US/docs/Web/API/GPUCompilationInfo), returned by the [getCompilationInfo() method on GPUShaderModule](https://developer.mozilla.org/en-US/docs/Web/API/GPUShaderModule/getCompilationInfo) ([July 2024](https://servo.org/blog/2024/07/31/this-month-in-servo/)).

0 commit comments

Comments
 (0)