Repository navigation
Conversation
Spider Bench A/B✅ All benchmark browser service runs completed; results are informational. Public HEAD: 184 / 240 rows; 38 / 48 sites produced rows; 10 unexpected empty sites. ✅ Deterministic fixture contract is clean. Common ancestor Public 48-site run · informational
Public-site content, timing, and memory are noisy. This single A/B run reports evidence only; site outcome counts explain missing rows without treating them as a deterministic regression. CPU and memory timelinesThese are bounded 40-point views of the same complete process-tree samples used by the HTML report. CPU uses 100% per occupied logical core; memory lines are RSS first and PSS second when complete PSS samples are available. Basexychart-beta
title "Base CPU"
x-axis "Elapsed seconds" [1.536, 2.537, 3.037, 4.54, 5.542, 7.044, 8.546, 10.048, 11.551, 13.053, 14.055, 15.557, 17.059, 17.56, 18.561, 20.063, 21.565, 22.566, 24.068, 25.57, 27.073, 28.576, 29.077, 30.079, 31.08, 32.581, 34.084, 35.586, 37.088, 38.588, 39.59, 41.092, 42.592, 44.095, 45.596, 47.097, 48.097, 49.599]
y-axis "CPU percent" 0 --> 500
line [25.98, 131.98, 123.91, 103.92, 203.42, 157.83, 123.76, 167.66, 117.77, 51.91, 117.81, 41.95, 7.98, 0, 87.95, 125.91, 11.97, 0, 143.78, 81.91, 113.83, 99.87, 109.76, 101.83, 110.02, 121.88, 137.73, 49.98, 81.94, 109.85, 13.97, 101.95, 77.98, 3.99, 13.98, 114, 173.95, 145.85]
xychart-beta
title "Base memory: RSS then PSS"
x-axis "Elapsed seconds" [0.035, 1.536, 2.537, 3.037, 4.54, 5.542, 7.044, 8.546, 10.048, 11.551, 13.053, 14.055, 15.557, 17.059, 17.56, 18.561, 20.063, 21.565, 22.566, 24.068, 25.57, 27.073, 28.576, 29.077, 30.079, 31.08, 32.581, 34.084, 35.586, 37.088, 38.588, 39.59, 41.092, 42.592, 44.095, 45.596, 47.097, 48.097, 49.599, 51.056]
y-axis "Memory MiB" 0 --> 500
line [12.3, 82.26, 126.5, 135.68, 125.57, 150.61, 182.34, 156.58, 185.28, 166.21, 179.87, 191.36, 164.93, 150.81, 150.65, 176.66, 162.17, 147.49, 145.42, 162.23, 148.73, 164.01, 199.65, 251.59, 204.39, 188.83, 148.7, 179.75, 152.38, 154.05, 156.41, 149.76, 173.61, 163.72, 169.62, 158.03, 200.04, 170.55, 192.49, 0]
line [9, 78.62, 122.82, 132, 122.05, 146.91, 178.64, 152.88, 181.48, 160.89, 176.2, 187.98, 161.16, 147.07, 146.91, 172.93, 158.43, 143.75, 141.68, 158.94, 145.01, 160.3, 196.17, 247.9, 200.66, 185.08, 144.85, 175.89, 148.64, 150.41, 152.82, 146.02, 168.61, 159.98, 165.88, 154.29, 198.48, 166.82, 189.05, 0]
HEADxychart-beta
title "HEAD CPU"
x-axis "Elapsed seconds" [1.035, 1.536, 2.538, 4.04, 5.04, 6.542, 8.043, 9.044, 10.546, 12.048, 13.049, 14.552, 15.553, 17.055, 18.557, 19.559, 21.061, 22.062, 23.564, 24.565, 25.065, 26.067, 27.568, 28.568, 30.07, 31.572, 32.573, 34.075, 35.577, 36.578, 38.08, 39.081, 40.583, 42.085, 43.086, 43.586, 44.588, 45.589]
y-axis "CPU percent" 0 --> 500
line [4, 43.88, 133.74, 144.04, 148.03, 159.82, 129.89, 139.86, 153.79, 83.95, 139.81, 87.81, 71.94, 87.89, 0, 53.95, 53.94, 139.91, 137.79, 115.94, 125.82, 151.96, 142.02, 123.86, 135.69, 161.78, 99.86, 129.9, 87.79, 123.83, 85.9, 73.89, 15.98, 109.87, 109.84, 201.69, 99.89, 135.82]
xychart-beta
title "HEAD memory: RSS then PSS"
x-axis "Elapsed seconds" [0.036, 1.035, 1.536, 2.538, 4.04, 5.04, 6.542, 8.043, 9.044, 10.546, 12.048, 13.049, 14.552, 15.553, 17.055, 18.557, 19.559, 21.061, 22.062, 23.564, 24.565, 25.065, 26.067, 27.568, 28.568, 30.07, 31.572, 32.573, 34.075, 35.577, 36.578, 38.08, 39.081, 40.583, 42.085, 43.086, 43.586, 44.588, 45.589, 46.921]
y-axis "Memory MiB" 0 --> 500
line [12.39, 62.42, 93.48, 127.42, 131.07, 165.89, 180.07, 170.34, 191.24, 182.33, 171.89, 176.63, 172.18, 163.25, 164.3, 151.16, 158.72, 147.93, 161.2, 187.22, 280.56, 197.48, 204.72, 221.39, 157.75, 196.68, 171.82, 158.68, 160.16, 156.58, 230.69, 171.66, 190.13, 164.82, 182.73, 185.97, 171.29, 156.56, 198.86, 0]
line [9.02, 58.7, 89.8, 123.68, 127.4, 160.96, 176.38, 166.19, 187.51, 178.65, 168.14, 173.03, 168.43, 159.5, 160.88, 147.41, 154.97, 144.18, 157.56, 183.49, 277.02, 193.73, 200.97, 217.92, 154, 192.9, 168.06, 154.9, 156.46, 152.83, 227.24, 167.91, 186.38, 161.07, 178.95, 182.33, 167.97, 152.85, 195.12, 0]
Deterministic fixture · required contractThe fixture exercises 15 routes: 8 are expected to emit rows and 7 intentionally exercise empty, loading, or timeout behavior.
Full HTML, JSON, CSV, logs, and page snapshots: workflow run and full The public-web A/B is informational. The exact HEAD fixture contract runs as a separate required CI check; timing and public-site content deltas remain non-blocking. |
Cross-origin child realms used caller-local top projections while following parent reached the actual top WindowProxy. Ancestor searches could then loop on the real top's self-parent until the watchdog terminated execution. Use the stable top WindowProxy throughout the ancestor chain and message endpoint resolution. Add a bounded nested-frame regression for the Adform ancestor search observed on personalshop.ch.
CI Regression ReportSource CI run · source state at render:
Release regression — ✅ HEAD/base failures 0/0; raw binary +0.004406%Package and image size
Startup latency and PSS
Concurrency matrix
Frontend differential — ✅ 1,020/1,020 cases matched; 0 issues
Agent episodes · Moli vs Chromium — ✅ 8/8 Moli episodes passed; 0 failures
Runtime and CDP session contracts — ✅ 26 contract cases; 0 failures
CDP smoke — ✅ 52/52 groups passed; 621 scenariosWorkers: 4 · cumulative group time: 192.90 s · failed groups: 0
WebMainBench · 545 pages — ✅ 545/545 completed; 0 unexpected failures
Frozen HTML · Linux · Diagnostics: All artifact fields are parsed by the trusted default-branch renderer; missing or invalid inputs remain visible as unavailable. |
Generate stateless method and accessor tables with receiver checks and native value callbacks. Cache FunctionTemplates per isolate and use V8's per-context function instances, without retaining target Windows or observer realms. Cover function identity, realm prototypes, descriptors, receiver validation, exception and termination propagation, and context collection.
Replace WeakMap-backed Window surfaces with native access-check dispatch. Keep per-Window Location identity and resolve dynamic children from the current frame tree. Reuse the ordinary Window accessor value helpers. Apply cross-origin descriptor and fallback rules, preserve borrowed receiver behavior, and cover navigation, named collisions, removal, and realm teardown.
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 Common ancestor Session resilience
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
HEAD memory by 50-navigation quarter
Raw reports and per-navigation boundary samples: workflow run and full Public-site timing and memory are observational. Use the A/B deltas and trend shape as evidence, not as a deterministic performance threshold. |
806e853 to
817e17d
Compare
Continued in #1594 on the original
panic-fix39192branch. That PR contains the same three commits and validated final tree; this duplicate PR is closed to keep review in one place.Cross-origin Window access builds JavaScript surfaces and calls captured WeakMap intrinsics. Watchdog termination can fail those calls and panic. On personalshop.ch, Adform's ancestor search also loops because
topis a caller-local projection while followingparentreaches the actual top WindowProxy.This change fixes the ancestor identity bug and dispatches cross-origin access-check handlers through generated native member tables. It replaces the earlier WeakMap termination fix by removing that cache entirely.
The three commits separate the behavior fix, reusable binding infrastructure, and Window/Location migration:
WebApiCrossOrigindeclarations. Cache stateless FunctionTemplates per isolate and let V8 provide each accessing Context's function instances. Callbacks resolve their actual receiver without capturing a target or observer.The migration also applies cross-origin descriptor/fallback rules: configurable, non-enumerable descriptors; undefined symbol fallbacks; SecurityError for unsupported descriptors; named child windows precede fallbacks and may shadow names such as document. Tests cover removal, navigation, borrowed receivers, function realms/identity, termination, and garbage collection.
The design follows Blink's native cross-origin member support and the HTML WindowProxy rules. The controlled Chromium comparison also checked receiver errors, mutation restrictions, Location identity, and named collisions.
Validation (24 Cargo build jobs, each commit checked separately):
cargo fmt --allcargo clippy --workspace --all-targets --all-features -- -D warningscargo nextest run --no-fail-fast: 20,221 passed, 18 skipped at the final commit.cargo build -p moliand the three-origin differential fixture.