Commit 1e4aeff
committed
feat: name the region that would not settle, and what the waiting cost (#271)
Stabilisation failures printed a bare list of attempt paths. Diagnosing one
meant opening N PNGs and eyeballing them -- so `sleep 2` won, and suites got
SLOWER as a consequence of diagnosis being hard. A maintainer reported a
10-minute suite dominated by stabilisation waiting, with sleeps adopted
deliberately "to avoid debugging as much as possible".
The information was already here and thrown away: AttemptsReporter compares
every consecutive pair of attempts, and that comparison knows the region that
changed. Print it, with the escape hatch:
Could not get stable screenshot for 'index-with-ticker' within 1.2s (5 attempts).
The page kept changing in 1 area, over 4 attempt pairs:
[67,50,213,68] (left,top,right,bottom edges) -- 0.55% of the 800x600 image, changed in 4 of 4 pairs
Always the same area, in every pair: that is an animation, clock, carousel or live counter.
Exclude it and the page is stable without waiting:
assert_matches_screenshot "index-with-ticker", skip_area: [67,50,213,68]
<attempt paths>
Animation vs churn is decided by count, not by shape: regions are clustered by
overlap, and a cluster present in EVERY attempt pair is animating -- skip_area
fixes it. Anything less is the page still rendering, where masking would hide
real content, so the message says so and suggests nothing to mask.
The suggested coordinates are the ones just measured. Guarded by following the
advice on a real browser and a really unstable page (test/fixtures/app/
index-with-ticker.html): the failing run's own suggestion, pasted back in,
makes the page stable. Fabricating the coordinate reds that test -- which is
the check this gem lacked when it shipped RECORD_SCREENSHOTS=1 in its own
error message for years while nothing read it.
Success path: the run-level summary now reports the worst stabilisation it
saw. A user who set `stability_time_limit: 2` had no way to learn their pages
settle on the first retry, and without evidence tuning it down is guesswork.
Run-level rather than per-assertion (per-test noise is the last thing a slow
suite needs) and silent when nothing waited -- the same rule as the
never-matched-selector line. It rides the fork-parallel fragment, since a
run-level line that vanishes under Rails' default parallelize is #269 again;
counts add, worst cases max.
Pairs with #272 (masking is instant) and #279 (dead selectors are surfaced):
"here is the region, mask it" is finally a complete workflow.1 parent 7809756 commit 1e4aeff
12 files changed
Lines changed: 535 additions & 10 deletions
File tree
- docs
- lib/snap_diff
- reporters
- test
- fixtures/app
- integration
- support
- unit
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
356 | 356 | | |
357 | 357 | | |
358 | 358 | | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
359 | 406 | | |
360 | 407 | | |
361 | 408 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
| 7 | + | |
6 | 8 | | |
7 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
8 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
9 | 27 | | |
10 | 28 | | |
11 | 29 | | |
12 | 30 | | |
13 | 31 | | |
14 | 32 | | |
15 | 33 | | |
16 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
17 | 37 | | |
18 | | - | |
| 38 | + | |
19 | 39 | | |
20 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
21 | 46 | | |
22 | 47 | | |
23 | 48 | | |
| |||
26 | 51 | | |
27 | 52 | | |
28 | 53 | | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
29 | 59 | | |
| 60 | + | |
| 61 | + | |
30 | 62 | | |
| 63 | + | |
31 | 64 | | |
32 | 65 | | |
33 | 66 | | |
34 | 67 | | |
35 | 68 | | |
36 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
37 | 73 | | |
38 | 74 | | |
39 | 75 | | |
| |||
45 | 81 | | |
46 | 82 | | |
47 | 83 | | |
48 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
49 | 179 | | |
50 | 180 | | |
51 | 181 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
64 | 72 | | |
65 | 73 | | |
66 | 74 | | |
| |||
146 | 154 | | |
147 | 155 | | |
148 | 156 | | |
149 | | - | |
150 | | - | |
| 157 | + | |
151 | 158 | | |
152 | 159 | | |
153 | 160 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
26 | 29 | | |
27 | 30 | | |
28 | 31 | | |
| |||
74 | 77 | | |
75 | 78 | | |
76 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
77 | 93 | | |
78 | 94 | | |
79 | 95 | | |
| |||
86 | 102 | | |
87 | 103 | | |
88 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
89 | 108 | | |
90 | 109 | | |
91 | 110 | | |
| |||
222 | 241 | | |
223 | 242 | | |
224 | 243 | | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
225 | 248 | | |
226 | 249 | | |
227 | 250 | | |
| |||
279 | 302 | | |
280 | 303 | | |
281 | 304 | | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
282 | 308 | | |
283 | 309 | | |
284 | 310 | | |
| |||
315 | 341 | | |
316 | 342 | | |
317 | 343 | | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
318 | 349 | | |
319 | 350 | | |
320 | 351 | | |
| |||
383 | 414 | | |
384 | 415 | | |
385 | 416 | | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
386 | 456 | | |
387 | 457 | | |
388 | 458 | | |
0 commit comments