Pass the caller's monotonic instant into deadline calculation. Production callers capture Instant::now() at the wait boundary; timeout validation retains existing range errors. Tests compare the 1ms deadline against the same captured anchor, avoiding a second clock read between calculation and the assertion.
Pin Parley and Fontique to the reviewed fork with clarified bidi contracts, a separate first-style line-height compatibility commit, and transparent-marker benchmarks. Update the same-source workspace crates in Cargo.lock without changing package versions or other dependencies.
Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (19,676 passed, 16 skipped).
Pin Parley and Fontique to 813c8c1120c6dee61f838f2cc2ec4efedc08b9ea on fix/inline-object-bidi-rebased. The fork contains the three inline-box bidi PR commits followed by the transparent marker, visual edge placement and host embolden extensions. Keep the original fix/inline-object-bidi branch intact.
Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (19676 passed, 16 skipped).
Check for pending parser post-step work before entering the default V8 context. Ordinary character tokens avoid constructing a scope when there are no runtime followups.
Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,490 passed, 16 skipped)
Handle empty CSP input in a small inline entry and delegate nonempty
batches to a separate function. The mutation finisher only checks
whether the DOM changed before invoking CSP followups.
Skip processing empty stylesheet owner changes at the mutation finisher.
Continue applying pending stylesheet CSS projections and slotchange events.
A/B against the previous caller-side CSP guard on the resulting branch
(fixed local WeChat HTML; release; JS/CSS/subframes disabled; 200 balanced
randomized pairs) measured 142.39 -> 141.29 ms.
Paired saving: 0.34 ms; 95% bootstrap CI:
[-0.87, 1.57] ms. The confidence interval includes zero; no resolved performance gain.
All 400 measured Markdown outputs were identical.
Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,490 passed, 16 skipped)
Resolve the document base URL only after a mutation produces meta-refresh candidates. Ordinary text mutations avoid repeating the URL query and clone.
Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,490 passed, 16 skipped)
Collect unique owner documents in a SmallVec with inline capacity one.
The common parser mutation avoids heap allocation, and batches retain
each document's first-occurrence notification order.
Follow-up A/B against the previous Option + Vec implementation on the
resulting branch (fixed local WeChat HTML; release; JS/CSS/subframes
disabled; 200 balanced randomized pairs) measured 141.49 -> 142.85 ms.
The paired increase was 1.22 ms, with a 95% bootstrap CI of
[-0.14, 3.11] ms: no measured speedup from this refactor.
Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,490 passed, 16 skipped)
Handle an ordinary single-node mutation inside the grouping function,
returning a SmallVec group that borrows the original effect slice. Keep
the entry small and inline, and use a batch helper for owned groups and
subtree splitting across documents. Iterate groups by reference.
The invalidation caller consumes one uniform grouping result; a single
node mutation avoids cloning effects and allocating grouping containers.
Record the isolated borrowing A/B conditions, timings, and confidence
intervals beside the single-effect fast path.
Validation of the resulting branch:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,490 passed, 16 skipped)
Return SmallVec<[StyleMutationEffect; 1]> from from_dom_mutation_effects.
Handle a pure single character-data update inside the converter before
constructing the deduplication set. Keep the notification call uniform;
batches preserve their existing order and deduplication.
Cover repeated text updates, :empty styles, and MutationObserver old values
in live and windowless documents.
Validation of the resulting branch:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,490 passed, 16 skipped)
Performance vs parent b75de5c66f (fixed local WeChat HTML, release,
JS/CSS/subframes disabled, 100 balanced randomized pairs):
Wall median 180.575 -> 165.316 ms (-8.45%). Paired median saving
13.885 ms; bootstrap 95% CI [12.364, 19.486] ms. The code tree matches
the previously validated and measured SmallVec version 84c5a81cca.