Skip to content

PR-L0 — S-98 interoperability design note#117

Draft
philliphoff wants to merge 1 commit into
mainfrom
philliphoff/pr-l0-s98-interoperability-design
Draft

PR-L0 — S-98 interoperability design note#117
philliphoff wants to merge 1 commit into
mainfrom
philliphoff/pr-l0-s98-interoperability-design

Conversation

@philliphoff
Copy link
Copy Markdown
Owner

Design / research only — no production code. Adds one markdown file and a one-line docs/toc.yml entry.

What

docs/design/s98-interoperability.md (~1000 lines) is the design contract that PR-L1 (plumbing) and PR-L2 (rule evaluation) will implement against. Sections cover:

  1. Spec reference — S-98 Edition 2.0.0, October 2025 (IHO CL 41/2025). PDFs were not committed in this PR; a follow-up should drop them in docs/specs/.
  2. Display-plane model — extends the existing intra-product DisplayPlane { UnderRadar, OverRadar } with a new outer S98DisplayPlane enum (9 canonical planes) used by the cross-dataset stacker. Within-plane priority continues to be driven by the existing per-instruction DrawingPriority.
  3. Five inter-product rules for v1 — R-101-102-A (S-102 on plane Bathymetry), R-101-102-B (Level 2: suppress S-101 DepthArea/DepthContour when S-102 loaded), R-101-124-A (S-124 warnings plane), R-104-A and R-111-A (on-demand surface stacking). Cites Annex A §§A-6.9.1, 8.4.1, B-3.1.2 and Main §9.2.1.
  4. Codebase impact mapEncDotNet.S100.Core additions (S98DisplayPlane, LayerStackEntry, IInteroperabilityAuthority), DatasetResult extension, per-processor plane defaults table, S-101 fill/linework split, LayerStackBuilder inserted between DatasetLoaderService.FlattenLayerOrder and MapsuiMapHost, PickService stack-order sort, bundled content/S98/Adapter/defaults.xml.
  5. Rule-table shape — XML conforming to the S-100 Part 16 IC schema (TBD-1: XSD not yet validated against), with a concrete in-memory S98Catalogue record graph, evaluated as a pure LayerStackEntry[] → LayerStackEntry[] function.
  6. Pick semanticsPickService.ResolveHits reorders Mapsui hits by descending layer-stack-order before the existing dedup; coverage pick fallback unaffected.
  7. Visual regression and rollout — PR-L1 ships with a Level-0 authority (no snapshot changes); a separate PR-L1.5 flips to L1 and rebaselines snapshots. Full PR sequence (L0 → L1 → L1.5 → L2 → L3 → L4) documented.
  8. Open questions / TBDs — 12 items, each actionable as a follow-up. Most important: TBD-1 (validate XML schema against Part 16 XSD), TBD-2 (S-104/S-111 surface stacking semantics), TBD-3 (S-101 split implementation choice), TBD-6 (safety-contour preservation).

What's deliberately not in scope of v1

S-98 Levels 3 (hybridization) and 4 (spatial operations) — Annex A §§4.4.4, 4.4.5 explicitly mark them as "should not be implemented" in this S-98 edition. Predefined-combination UX, alert wiring, colour set-aside arbitration, safety-contour synthesis from S-102+S-104 are all parked.

Reviewer guidance

Please focus on:

  • the §3 rule selection — are the right five rules for v1?
  • the §4.3.2 layer-stack-builder placement;
  • the open TBDs in §8 — which need to be resolved before PR-L1 opens?

Adds docs/design/s98-interoperability.md documenting the proposed
plumbing for S-98 ECDIS interoperability across the loaded
dataset stack: display-plane model, an initial five inter-product
rules covering S-101/S-102, S-101/S-124, S-101/S-104, and
S-101/S-111, a codebase impact map (S98DisplayPlane enum,
IInteroperabilityAuthority, LayerStackBuilder, processor plane
defaults, S-101 fill/linework split, stack-ordered pick), the
catalogue-driven rule-table shape, a snapshot rebaseline plan,
and twelve open TBDs to be resolved before PR-L1.

Spec cited: S-98 Edition 2.0.0 (October 2025), in particular
Annex A clauses 4.4 (levels), 8 (interop rules), A-3.2 (Level 1
schema), B-3.1.2 (predefined combinations), A-6.9.1 (gridded
bathymetry rule), and Main 9.2.1 (priority layers).

No production code touched; only a new design doc and a one-line
docs/toc.yml entry.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

Performance Gate

PASSED — no regressions.

Threshold: 10.0%, MAD multiplier (k): 3.0, retry-zone mult: 2.0×

Scenario summary

Scenario Status Δ median (%) z (Δ/MAD) Base median (ms) Samples (b/c)
exchange-set-open ✅ pass -1.6 -0.21 0.54 20/20
s101-portray-cold ✅ pass -0.7 -0.19 317.66 20/20
s101-portray-warm ✅ pass +0.3 +0.09 175.54 20/20
s101-render-warm ✅ pass +0.2 +0.07 162.04 20/20
s102-coverage ✅ pass -1.5 -0.84 1.53 20/20
s102-coverage-open ✅ pass -2.5 -0.96 3.01 20/20
s102-coverage-render-large ✅ pass +0.1 +0.06 132.29 20/20
s124-vector ✅ pass -1.6 -0.29 0.41 20/20
s201-vector ✅ pass +6.2 +0.63 0.31 20/20

exchange-set-open

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.54 0.53
Baseline MAD (ms) 0.04
Δ median -1.6%
z (Δ/MAD) -0.21

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.asset.read 13.74 10.87 -20.9%
s100.exchangeset.parse 40.17 40.72 +1.4% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.asset.read.duration 18.29 22.85 +24.9%

s101-portray-cold

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 317.66 315.33
Baseline MAD (ms) 12.18
Δ median -0.7%
z (Δ/MAD) -0.19

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 4254.69 4222.20 -0.8% ▫️
s100.lua.rule.invoke 3592.64 3560.93 -0.9% ▫️
s100.pipeline.vector.process 4324.64 4290.59 -0.8% ▫️
s100.pipeline.vector.stage.assemble 0.31 0.29 -6.8% ▫️
s100.pipeline.vector.stage.feature_xml 45.81 45.18 -1.4% ▫️
s100.pipeline.vector.stage.lua 4256.21 4223.60 -0.8% ▫️
s100.pipeline.vector.stage.rule_select 5.29 5.32 +0.6% ▫️
s100.pipeline.vector.stage.sort 1.96 1.90 -2.7% ▫️
s100.pipeline.vector.stage.viewing_groups 3.75 3.74 -0.3% ▫️
s100.pipeline.vector.stage.xslt 0.25 0.21 -15.3%
s100.render.frame 5228.58 5082.60 -2.8% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 7.00 7.00 +0.0% ▫️
s100.featurecatalogue.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.featurecatalogue.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.lua.execute.duration 1132.27 1066.40 -5.8% ▫️
s100.lua.features.count 700.00 700.00 +0.0% ▫️
s100.lua.instructions.emitted.count 735.00 735.00 +0.0% ▫️
s100.lua.rule.invoke.count 7.00 7.00 +0.0% ▫️
s100.lua.rule.invoke.count 77.00 77.00 +0.0% ▫️
s100.lua.rule.invoke.duration 876.65 817.12 -6.8% ▫️
s100.lua.rule.invoke.duration 5.48 5.13 -6.4% ▫️
s100.lua.source.cache.hit.count 292.00 292.00 +0.0% ▫️
s100.lua.source.cache.miss.count 23.00 23.00 +0.0% ▫️
s100.pattern.cache.hit.count 63.00 63.00 +0.0% ▫️
s100.pattern.cache.miss.count 28.00 28.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 735.00 735.00 +0.0% ▫️
s100.pipeline.duration 1161.98 1096.07 -5.7% ▫️
s100.pipeline.features.in 84.00 84.00 +0.0% ▫️
s100.pipeline.stage.duration 0.30 0.28 -7.7% ▫️
s100.pipeline.stage.duration 17.95 18.19 +1.3% ▫️
s100.pipeline.stage.duration 1133.68 1067.65 -5.8% ▫️
s100.pipeline.stage.duration 4.20 4.15 -1.2% ▫️
s100.pipeline.stage.duration 2.24 2.25 +0.3% ▫️
s100.pipeline.stage.duration 0.95 0.97 +2.8% ▫️
s100.pipeline.stage.duration 0.89 0.87 -2.0% ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.portrayal.cache.hit.count 24.00 24.00 +0.0% ▫️
s100.portrayal.cache.hit.count 292.00 292.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 36.00 36.00 +0.0% ▫️
s100.portrayal.cache.miss.count 4.00 4.00 +0.0% ▫️
s100.portrayal.cache.miss.count 23.00 23.00 +0.0% ▫️
s100.portrayal.cache.miss.count 6.00 6.00 +0.0% ▫️
s100.render.frame.duration 1385.20 1378.16 -0.5% ▫️
s100.render.instructions.processed.count 735.00 735.00 +0.0% ▫️
s100.render.styles.applied.count 693.00 693.00 +0.0% ▫️
s100.symbol.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.symbol.cache.miss.count 14.00 14.00 +0.0% ▫️
s100.symbol.resolve.duration 0.03 0.04 +11.3%
s100.symbol.resolve.duration 6.43 6.12 -4.7% ▫️

s101-portray-warm

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 175.54 176.14
Baseline MAD (ms) 6.80
Δ median +0.3%
z (Δ/MAD) +0.09

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 5197.58 5130.32 -1.3% ▫️
s100.lua.rule.invoke 4352.84 4308.11 -1.0% ▫️
s100.pipeline.vector.process 5298.07 5230.28 -1.3% ▫️
s100.pipeline.vector.stage.assemble 0.24 0.25 +3.8% ▫️
s100.pipeline.vector.stage.feature_xml 77.60 73.90 -4.8% ▫️
s100.pipeline.vector.stage.lua 5198.75 5131.50 -1.3% ▫️
s100.pipeline.vector.stage.rule_select 4.20 4.70 +11.8%
s100.pipeline.vector.stage.sort 2.82 2.68 -5.1% ▫️
s100.pipeline.vector.stage.viewing_groups 4.50 4.26 -5.2% ▫️
s100.pipeline.vector.stage.xslt 0.20 0.20 +0.2% ▫️
s100.render.frame 71.75 67.86 -5.4% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 1.00 1.00 +0.0% ▫️
s100.featurecatalogue.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.lua.execute.duration 1225.27 1182.14 -3.5% ▫️
s100.lua.features.count 700.00 700.00 +0.0% ▫️
s100.lua.instructions.emitted.count 735.00 735.00 +0.0% ▫️
s100.lua.rule.invoke.count 7.00 7.00 +0.0% ▫️
s100.lua.rule.invoke.count 77.00 77.00 +0.0% ▫️
s100.lua.rule.invoke.duration 1030.87 991.00 -3.9% ▫️
s100.lua.rule.invoke.duration 5.24 5.14 -1.9% ▫️
s100.lua.source.cache.hit.count 315.00 315.00 +0.0% ▫️
s100.pattern.cache.hit.count 87.00 87.00 +0.0% ▫️
s100.pattern.cache.miss.count 4.00 4.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 735.00 735.00 +0.0% ▫️
s100.pipeline.duration 1248.74 1203.75 -3.6% ▫️
s100.pipeline.features.in 84.00 84.00 +0.0% ▫️
s100.pipeline.stage.duration 0.03 0.03 +5.6%
s100.pipeline.stage.duration 19.93 18.14 -9.0% ▫️
s100.pipeline.stage.duration 1225.49 1182.36 -3.5% ▫️
s100.pipeline.stage.duration 1.16 1.08 -6.7% ▫️
s100.pipeline.stage.duration 0.65 0.72 +12.3%
s100.pipeline.stage.duration 0.22 0.23 +1.0% ▫️
s100.pipeline.stage.duration 0.03 0.03 -4.8% ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.portrayal.cache.hit.count 4.00 4.00 +0.0% ▫️
s100.portrayal.cache.hit.count 315.00 315.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.render.frame.duration 185.83 178.39 -4.0% ▫️
s100.render.instructions.processed.count 735.00 735.00 +0.0% ▫️
s100.render.styles.applied.count 693.00 693.00 +0.0% ▫️
s100.symbol.cache.hit.count 19.00 19.00 +0.0% ▫️
s100.symbol.cache.miss.count 2.00 2.00 +0.0% ▫️
s100.symbol.resolve.duration 0.04 0.07 +49.6%
s100.symbol.resolve.duration 0.46 0.28 -40.0%

s101-render-warm

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 162.04 162.40
Baseline MAD (ms) 5.25
Δ median +0.2%
z (Δ/MAD) +0.07

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 4868.49 4886.22 +0.4% ▫️
s100.lua.rule.invoke 4028.18 4031.71 +0.1% ▫️
s100.pipeline.vector.process 4944.77 4961.61 +0.3% ▫️
s100.pipeline.vector.stage.assemble 0.28 0.24 -12.9%
s100.pipeline.vector.stage.feature_xml 53.21 51.40 -3.4% ▫️
s100.pipeline.vector.stage.lua 4869.50 4887.26 +0.4% ▫️
s100.pipeline.vector.stage.rule_select 3.98 3.94 -1.1% ▫️
s100.pipeline.vector.stage.sort 4.86 3.82 -21.3%
s100.pipeline.vector.stage.viewing_groups 6.25 5.27 -15.8%
s100.pipeline.vector.stage.xslt 0.20 0.20 +0.9% ▫️
s100.render.frame 69.39 74.03 +6.7%

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 1.00 1.00 +0.0% ▫️
s100.featurecatalogue.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.lua.execute.duration 1139.21 1108.92 -2.7% ▫️
s100.lua.features.count 700.00 700.00 +0.0% ▫️
s100.lua.instructions.emitted.count 735.00 735.00 +0.0% ▫️
s100.lua.rule.invoke.count 7.00 7.00 +0.0% ▫️
s100.lua.rule.invoke.count 77.00 77.00 +0.0% ▫️
s100.lua.rule.invoke.duration 947.78 917.99 -3.1% ▫️
s100.lua.rule.invoke.duration 4.86 5.46 +12.4%
s100.lua.source.cache.hit.count 315.00 315.00 +0.0% ▫️
s100.pattern.cache.hit.count 87.00 87.00 +0.0% ▫️
s100.pattern.cache.miss.count 4.00 4.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 735.00 735.00 +0.0% ▫️
s100.pipeline.duration 1156.58 1125.85 -2.7% ▫️
s100.pipeline.features.in 84.00 84.00 +0.0% ▫️
s100.pipeline.stage.duration 0.02 0.03 +2.7% ▫️
s100.pipeline.stage.duration 14.24 13.78 -3.2% ▫️
s100.pipeline.stage.duration 1139.39 1109.10 -2.7% ▫️
s100.pipeline.stage.duration 1.00 0.90 -9.9% ▫️
s100.pipeline.stage.duration 0.84 0.96 +13.8%
s100.pipeline.stage.duration 0.20 0.18 -9.7% ▫️
s100.pipeline.stage.duration 0.03 0.04 +22.2%
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 735.00 735.00 +0.0% ▫️
s100.portrayal.cache.hit.count 4.00 4.00 +0.0% ▫️
s100.portrayal.cache.hit.count 315.00 315.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.render.frame.duration 179.39 176.26 -1.7% ▫️
s100.render.instructions.processed.count 735.00 735.00 +0.0% ▫️
s100.render.styles.applied.count 693.00 693.00 +0.0% ▫️
s100.symbol.cache.hit.count 19.00 19.00 +0.0% ▫️
s100.symbol.cache.miss.count 2.00 2.00 +0.0% ▫️
s100.symbol.resolve.duration 0.05 0.04 -7.1% ▫️
s100.symbol.resolve.duration 0.30 0.24 -20.1%

s102-coverage

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 1.53 1.51
Baseline MAD (ms) 0.03
Δ median -1.5%
z (Δ/MAD) -0.84

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.coverage.process 58.91 59.23 +0.5% ▫️
s100.pipeline.coverage.stage.read 4.55 4.55 +0.0% ▫️
s100.pipeline.coverage.stage.resolve 51.21 51.41 +0.4% ▫️
s100.render.coverage.build 77.71 77.53 -0.2% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 1.00 1.00 +0.0% ▫️
s100.coverage.cells 4557.00 4557.00 +0.0% ▫️
s100.hdf5.read.bytes 5208.00 5208.00 +0.0% ▫️
s100.hdf5.read.duration 21.01 21.04 +0.2% ▫️
s100.hdf5.read.duration 29.07 29.03 -0.1% ▫️
s100.hdf5.read.duration 7.33 7.28 -0.7% ▫️
s100.pipeline.duration 11.50 11.47 -0.3% ▫️
s100.pipeline.stage.duration 0.89 0.87 -1.9% ▫️
s100.pipeline.stage.duration 9.94 9.92 -0.3% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️

s102-coverage-open

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 3.01 2.94
Baseline MAD (ms) 0.08
Δ median -2.5%
z (Δ/MAD) -0.96

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.dataset.open 89.17 86.98 -2.5% ▫️
s100.hdf5.dataset.read 13.10 14.38 +9.8%
s100.hdf5.file.open 20.39 20.22 -0.8% ▫️
s100.hdf5.open 21.41 21.06 -1.6% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.hdf5.read.bytes 36456.00 36456.00 +0.0% ▫️
s100.hdf5.read.duration 6.74 8.47 +25.6%
s100.hdf5.read.duration 2.46 2.57 +4.4% ▫️
s100.hdf5.read.duration 4.91 4.95 +0.9% ▫️

s102-coverage-render-large

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 132.29 132.47
Baseline MAD (ms) 3.11
Δ median +0.1%
z (Δ/MAD) +0.06

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.coverage.process 191.48 212.34 +10.9%
s100.pipeline.coverage.stage.read 120.21 125.70 +4.6% ▫️
s100.pipeline.coverage.stage.resolve 67.72 82.98 +22.5%
s100.render.coverage.build 4753.12 4597.32 -3.3% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 1.00 1.00 +0.0% ▫️
s100.coverage.cells 7000000.00 7000000.00 +0.0% ▫️
s100.hdf5.read.bytes 8000000.00 8000000.00 +0.0% ▫️
s100.hdf5.read.duration 0.15 0.10 -37.0%
s100.hdf5.read.duration 2.00 5.92 +196.5%
s100.hdf5.read.duration 1.34 1.25 -7.1% ▫️
s100.pipeline.duration 37.50 38.14 +1.7% ▫️
s100.pipeline.stage.duration 24.98 23.14 -7.4% ▫️
s100.pipeline.stage.duration 11.83 14.32 +21.0%
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️

s124-vector

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.41 0.41
Baseline MAD (ms) 0.02
Δ median -1.6%
z (Δ/MAD) -0.29

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.vector.process 8.66 9.16 +5.8%
s100.pipeline.vector.stage.assemble 0.27 0.34 +25.7%
s100.pipeline.vector.stage.feature_xml 1.43 1.45 +1.2% ▫️
s100.pipeline.vector.stage.rule_select 0.29 0.29 +0.7% ▫️
s100.pipeline.vector.stage.sort 0.25 0.30 +23.1%
s100.pipeline.vector.stage.viewing_groups 0.53 0.66 +25.5%
s100.pipeline.vector.stage.xslt 4.11 4.27 +3.9% ▫️
s100.render.frame 1.04 0.92 -12.0%
s100.xslt.transform 1.65 1.73 +4.6% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 1.00 1.00 +0.0% ▫️
s100.featurecatalogue.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 14.00 14.00 +0.0% ▫️
s100.pipeline.duration 55.07 55.82 +1.4% ▫️
s100.pipeline.features.in 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.duration 1.01 1.05 +3.8% ▫️
s100.pipeline.stage.duration 3.11 3.17 +1.8% ▫️
s100.pipeline.stage.duration 1.08 1.10 +1.8% ▫️
s100.pipeline.stage.duration 0.07 0.08 +4.5% ▫️
s100.pipeline.stage.duration 0.08 0.10 +24.7%
s100.pipeline.stage.duration 49.20 49.69 +1.0% ▫️
s100.pipeline.stage.instructions.count 14.00 14.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 14.00 14.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 14.00 14.00 +0.0% ▫️
s100.portrayal.cache.hit.count 13.00 13.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.portrayal.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.portrayal.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.render.frame.duration 2.26 2.21 -2.3% ▫️
s100.render.instructions.processed.count 14.00 14.00 +0.0% ▫️
s100.render.styles.applied.count 14.00 14.00 +0.0% ▫️
s100.xslt.transform.duration 10.37 10.45 +0.8% ▫️

s201-vector

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.31 0.33
Baseline MAD (ms) 0.03
Δ median +6.2%
z (Δ/MAD) +0.63

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.vector.process 6.75 7.22 +6.9%
s100.pipeline.vector.stage.assemble 0.10 0.12 +13.2%
s100.pipeline.vector.stage.feature_xml 0.86 0.94 +10.0%
s100.pipeline.vector.stage.rule_select 0.27 0.29 +6.5%
s100.pipeline.vector.stage.sort 0.13 0.14 +8.0%
s100.pipeline.vector.stage.viewing_groups 0.44 0.47 +7.7%
s100.pipeline.vector.stage.xslt 3.40 3.64 +7.1%
s100.render.frame 0.43 0.44 +2.9% ▫️
s100.xslt.transform 2.06 2.12 +3.0% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 1.00 1.00 +0.0% ▫️
s100.featurecatalogue.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 0.00 0.00 N/A ▫️
s100.pipeline.duration 149.30 159.17 +6.6%
s100.pipeline.features.in 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.duration 0.01 0.01 +1.9% ▫️
s100.pipeline.stage.duration 7.13 6.93 -2.8% ▫️
s100.pipeline.stage.duration 0.12 0.14 +19.6%
s100.pipeline.stage.duration 0.06 0.06 +2.5% ▫️
s100.pipeline.stage.duration 0.05 0.05 +0.4% ▫️
s100.pipeline.stage.duration 141.53 151.53 +7.1%
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.portrayal.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.render.frame.duration 0.11 0.10 -8.5% ▫️
s100.render.instructions.processed.count 0.00 0.00 N/A ▫️
s100.render.styles.applied.count 0.00 0.00 N/A ▫️
s100.xslt.transform.duration 21.13 21.93 +3.8% ▫️

Generated by EncDotNet.S100.PerfReport gate command

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