perf(images): share compatible in-flight document requests by ldm0 · Pull Request #1834 · lexmount/moli · GitHub
Skip to content

perf(images): share compatible in-flight document requests - #1834

Open
ldm0 wants to merge 1 commit into
mainfrom
perf/document-image-request-sharing
Open

ldm0 wants to merge 1 commit into
mainfrom
perf/document-image-request-sharing

Conversation

@ldm0

@ldm0 ldm0 commented Oct 21, 2026

Copy link
Copy Markdown
Member

Concurrent compatible image consumers in one Document currently start duplicate HTTP transfers. Share pending transfers while preserving exact response bytes and network observations. Each consumer keeps independent cancellation; dropping the last consumer cancels the transport. Failed loads are not retained, and no-store/private response headers prevent later consumers from joining.

Keep request credentials, policy revisions, mode, referrer policy, integrity and cache bypasses separate. The registry holds bounded weak entries rather than owning completed responses. Gated HTTP regressions cover sharing, streaming, independent cancellation, last-consumer teardown, failures and policy boundaries.

The long Service Worker navigation test keeps each awaited navigation future on the heap to bound debug-build stack use. All navigation scenarios and assertions remain covered. Before this test-harness adaptation, the extracted change reproduced stack overflow in 3/3 isolated runs; the original integrated branch already contained the adaptation.

Extracted independently from window.chrome onto main 87527dec85.

Validation on this exact source tree:

  • cargo fmt --all
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • cargo nextest run --no-fail-fast --flaky-result fail --status-level fail: Summary [ 127.643s] 20522 tests run: 20522 passed (9 slow), 18 skipped. Automatic retries are disabled.
  • Navigation regression: 10 stress iterations; core runtime module: 2 stress iterations, with flaky results treated as failures.

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

CI Regression Report

Source CI run · source state at render: in_progress · artifacts: 6/6

Check Status Signal
Release regression ✅ HEAD/base failures 0/0; raw binary +0.081009%
Frontend differential ❌ 1,019/1,020 cases matched; 1 issues
Agent episodes ✅ 8/8 Moli episodes passed; 0 failures
Runtime/CDP contracts ✅ 26 contract cases; 0 failures
CDP smoke ✅ 52/52 groups passed; 622 scenarios
WebMainBench ✅ 545/545 completed; 0 unexpected failures
Release regression — ✅ HEAD/base failures 0/0; raw binary +0.081009%

Package and image size

Metric Base HEAD Delta Delta %
Raw binary 150.18 MiB 150.30 MiB +124.58 KiB +0.081009%
Stripped binary 103.26 MiB 103.34 MiB +88.00 KiB +0.083226%
gzip binary 51.57 MiB 51.62 MiB +52.54 KiB +0.099498%
Rootfs 157.08 MiB 157.21 MiB +130.00 KiB +0.080821%
gzip rootfs 60.48 MiB 60.53 MiB +54.49 KiB +0.087997%

Startup latency and PSS

Case Base p50 HEAD p50 Delta Base PSS HEAD PSS Delta
Serve ready 26.77 ms 26.88 ms +0.11 ms 4.67 MiB 4.35 MiB −329.00 KiB
CDP first page 47.89 ms 48.79 ms +0.90 ms 4.69 MiB 4.07 MiB −634.00 KiB
CDP warm page 12.14 ms 12.04 ms −0.09 ms 50.92 MiB 50.04 MiB −905.00 KiB
CLI about:blank 14.88 ms 15.34 ms +0.46 ms 4.51 MiB 4.72 MiB +216.50 KiB
CLI local JS 19.91 ms 19.80 ms −0.11 ms 2.56 MiB 2.96 MiB +410.50 KiB

Concurrency matrix

Concurrency Base p50 HEAD p50 Delta Base PSS HEAD PSS Delta HEAD failures Unstable B/H
1 18.18 ms 18.53 ms +0.35 ms 600.00 KiB 598.00 KiB −2.00 KiB 0 0/0
5 20.78 ms 21.23 ms +0.45 ms 28.12 MiB 27.64 MiB −491.00 KiB 0 0/0
10 21.88 ms 20.47 ms −1.42 ms 27.98 MiB 13.58 MiB −14.41 MiB 0 0/0
25 20.63 ms 20.17 ms −0.46 ms 18.68 MiB 13.81 MiB −4.87 MiB 0 0/0
100 20.49 ms 20.49 ms +0.01 ms 27.97 MiB 13.73 MiB −14.23 MiB 0 0/0
Frontend differential — ❌ 1,019/1,020 cases matched; 1 issues
Match DOM mismatch Diagnostic mismatch Moli error Reference error Infrastructure error Mismatched frames Duration
1,019 0 0 1 0 0 0 7m 41.99s

First failing cases

  • react/history-navigation-boundaries/fragment-anchor-target — moli_error · Moli error timed out waiting for Runtime.evaluate response after 32s
Agent episodes · Moli vs Chromium — ✅ 8/8 Moli episodes passed; 0 failures
Fast contract Episodes Passed Assertions Ready p50 Episode p50
Moli 8 8 47/47 2.61 ms 24.87 ms
Chromium 8 8 47/47 246.93 ms 80.09 ms
Operation p50 Chromium Moli Delta Delta %
navigate 43.35 ms 6.22 ms −37.13 ms −85.64%
observe 0.72 ms 0.99 ms +0.27 ms +37.72%
fill 3.32 ms 3.26 ms −0.06 ms −1.83%
click 4.80 ms 3.82 ms −0.98 ms −20.41%
Idle-resource episode Peak RSS Peak PSS Average CPU Peak CPU Peak processes Sampler
Moli 66.18 MiB 64.43 MiB 0.76% 8.04% 1 ✅
Chromium 1285.16 MiB 350.01 MiB 1.01% 74.50% 13 ⚠️ PSS partial
Runtime and CDP session contracts — ✅ 26 contract cases; 0 failures
Suite Cases Failures Median case p50 Median case p95 Median peak PSS p50
Synthetic fetch 13 0 18.28 ms 19.51 ms 808.00 KiB
Long-lived CDP session 13 0 17.72 ms 18.14 ms —
CDP smoke — ✅ 52/52 groups passed; 622 scenarios

Workers: 4 · cumulative group time: 197.14 s · failed groups: 0

Slowest group Scenarios Duration Status
scrollbar-visibility 22 28.08 s ✅
target-lifecycle 24 16.46 s ✅
dom-input 27 13.54 s ✅
chromium-cdp 56 11.14 s ✅
multi-page 45 10.99 s ✅
WebMainBench · 545 pages — ✅ 545/545 completed; 0 unexpected failures
Completed Successful Expected DNS failure Unexpected failures Panics Crashes Timeouts Empty output
545/545 544 1 0 0 0 0 0

Frozen HTML · Linux · --wait done · 45 seconds per page · no retries. Content quality is evaluated separately.

Diagnostics: webmainbench-results — every page's Markdown, stderr, and exit status. Source run and artifacts

All artifact fields are parsed by the trusted default-branch renderer; missing or invalid inputs remain visible as unavailable.

@github-actions

Copy link
Copy Markdown

Sequential Navigation Soak A/B

✅ HEAD completed the 200-navigation resilience and memory observation.

One browser process, one target, and one CDP session navigate CSDN → SegmentFault → Huaban → example.com repeatedly. This run issued 200 Page.navigate commands per binary.

Common ancestor 87527dec85 → HEAD 013a1b4518; benchmark order: base-first; workflow: success.

Session resilience

Metric Base HEAD
Attempted / planned 200 / 200 200 / 200
Direct observable pass 198 / 200 198 / 200
Failures / recovered 2 / 2 2 / 2
Recovery failures 0 0
Lifecycle order violations 0 0
Network order violations 4 0
Wall time 436.6 s 557.9 s

A public-page failure is reported separately from an unrecoverable session. The soak requires all navigation attempts, zero failed recovery, zero lifecycle/network ordering violations, and complete resource evidence.

Process-tree memory

Metric Base HEAD Δ
Boundary samples 200 200 0
Boundary RSS samples 200 200 0
Boundary PSS samples 200 200 0
Periodic peak RSS 219.0 MiB 244.0 MiB +25.1 MiB
Periodic peak PSS 215.9 MiB 240.3 MiB +24.5 MiB
RSS · first 10 avg 150.3 MiB 153.8 MiB +3.6 MiB
RSS · last 10 avg 147.7 MiB 189.3 MiB +41.6 MiB
RSS · last − first window -2.6 MiB +35.4 MiB +38.0 MiB
RSS · warm slope / 100 nav +3.1 MiB +4.3 MiB +1.2 MiB
PSS · first 10 avg 147.1 MiB 150.4 MiB +3.3 MiB
PSS · last 10 avg 144.2 MiB 185.4 MiB +41.2 MiB
PSS · last − first window -2.9 MiB +35.0 MiB +37.9 MiB
PSS · warm slope / 100 nav +3.1 MiB +4.1 MiB +1.0 MiB
Peak file descriptors 55 59 4
Peak threads 28 29 1

HEAD memory by 50-navigation quarter

HEAD range Avg RSS Final RSS Peak RSS Avg PSS Final PSS Peak FD
1–50 178.0 MiB 156.3 MiB 222.9 MiB 174.4 MiB 152.6 MiB 53
51–100 183.2 MiB 216.8 MiB 227.1 MiB 179.7 MiB 213.3 MiB 54
101–150 189.4 MiB 158.2 MiB 230.8 MiB 185.7 MiB 154.5 MiB 54
151–200 188.3 MiB 190.0 MiB 227.6 MiB 184.5 MiB 186.2 MiB 54

Raw reports and per-navigation boundary samples: workflow run and full sequential-navigation-soak-results artifact.

Public-site timing and memory are observational. Use the A/B deltas and trend shape as evidence, not as a deterministic performance threshold.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant