Skip to content

Add S-201 validation rule pack#121

Merged
philliphoff merged 1 commit into
mainfrom
philliphoff/s201-validation-rules
May 22, 2026
Merged

Add S-201 validation rule pack#121
philliphoff merged 1 commit into
mainfrom
philliphoff/s201-validation-rules

Conversation

@philliphoff
Copy link
Copy Markdown
Owner

Summary

S-201 was the last GML product spec returning null from its processor's Validate() method, so the viewer's new Validation tab (PR #115) showed "Validation rules not yet defined for S-201". This PR closes that gap with a ten-rule pack modelled on S125AtonRules, tuned for the IALA authority-to-authority exchange audience (tight conformance, inventory integrity, lifecycle correctness).

The rules consume the typed S201AtonInventory projection (no new model fields), and the processor wires them through the shared ValidationRunner.Run pattern used by the nine sibling packs. Once this lands, opening an S-201 dataset in the viewer automatically populates the Validation tab — no viewer changes required.

Rules

ID Severity Concern
S201-R-1.1 CoordinatesInWgs84Range Error Lat/lon bounds on every AtoN point (S-100 Part 10b §6.2)
S201-R-1.2 GmlIdsUnique Error gml:id uniqueness across AtoNs, aggregations, associations, info types
S201-R-1.3 NavigableAtoNHasGeometry Warning Physical AtoNs carry at least one fix; exempts Virtual AIS
S201-R-2.1 PhysicalAisHasMmsi Error Physical/Synthetic AIS-AtoN has a 9-digit MMSI
S201-R-2.2 VirtualAisMmsiFormat Warning When present on Virtual AIS, MMSI is 9 digits
S201-R-3.1 ChangeTypesInEnumeration Error Status change-type codes ∈ {1,2,3,4}
S201-R-4.1 DateRangeOrdered Warning Fixed + periodic date ranges have start ≤ end
S201-R-5.1 EquipmentHasHostStructure Warning Every S201Equipment resolves to a host structure
S201-R-6.1 AggregationHasMembers Warning Aggregations carry ≥ 2 peers
S201-R-6.2 AggregationMembersResolved Error Every peer xlink in the source feature resolves

Notes / deviations from the kickoff

A few candidates in the kickoff didn't fit the typed model and were dropped or replaced:

  • The S-201 typed model has no S201AtonStatusIndication (that's S-125 only), so the status-indication position rule is omitted.
  • Status date ranges live on S201AtonObject itself (FixedDateRange / PeriodicDateRange), not on S201AtonStatusInformation, so the "lifecycle vs removal" rule is reframed as S201-R-4.1 against those properties.
  • ChangeTypes is a 4-value codelist in S-201 (vs 5 in S-125) — easy trap if mirroring S-125 verbatim.
  • S201Equipment.HostStructure is type-system-locked to S201StructureObject? and structures have no host, so host-of-host cycles are impossible. The slot is repurposed as S201-R-6.2 (aggregation xlink resolution), reconstructed by comparing typed Peers.Length against the raw peer-role FeatureReferences to surface dropped references.

Spec alignment

  • S-100 framework (s100-framework)
  • S-101 ENC (s101-enc)
  • S-102 bathymetry (s102-bathymetry)
  • S-104 water level (s104-water-level)
  • S-111 surface currents (s111-surface-currents)
  • S-124 navigational warnings (s124-nav-warnings)
  • S-129 under keel clearance (s129-ukc)
  • N/A — change is purely infrastructural (build, CI, docs, tooling)

S-201 (no checkbox in the template, but the s201-aton-information skill was consulted).

Spec section references cited in code/docs:

  • S-100 Part 10b §6.2 (coordinate order / WGS-84 bounds) — S201-R-1.1
  • S-100 Part 10b §6.4 (gml:id uniqueness) — S201-R-1.2
  • S-201 Ed 2.0.0 codelist for ChangeTypesS201-R-3.1

Tests

  • Added/updated xunit tests under tests/
  • Tests requiring real data files use SkippableFact
  • dotnet test --configuration Release passes locally

64 new tests in tests/EncDotNet.S100.Datasets.S201.Tests/Validation/S201AtonRulesTests.cs (pass + fail per rule, plus two Default smoke tests). S-201 test suite: 64 passed / 1 skipped (real-dataset gate) / 0 failed. Pipelines suite: 340 passed.

Documentation

  • Updated the affected project's src/<project>/README.md
  • Updated conceptual docs under docs/ if user-facing behaviour changed
  • New public APIs have XML doc comments

S201AtonRules is public with full XML docs. No user-facing behaviour change beyond the Validation tab automatically populating.

Dependencies

  • No new NuGet dependencies, OR versions added to Directory.Packages.props (not in the .csproj)
  • gh-advisory-database security check run for any new dependency

None added.

Breaking changes

None.

Implements the tenth and final GML-spec validation rule pack, closing the
gap left after PRs #100–109. S-201 datasets opened in the viewer now
populate the Validation tab (PR #115) automatically.

Rules (all targeting S201AtonInventory):

- S201-R-1.1 CoordinatesInWgs84Range (Error) — S-100 Part 10b §6.2
- S201-R-1.2 GmlIdsUnique (Error) — S-100 Part 10b §6.4
- S201-R-1.3 NavigableAtoNHasGeometry (Warning) — exempts Virtual AIS
- S201-R-2.1 PhysicalAisHasMmsi (Error) — 9-digit MMSI required
- S201-R-2.2 VirtualAisMmsiFormat (Warning) — when present, 9 digits
- S201-R-3.1 ChangeTypesInEnumeration (Error) — codelist 1–4
- S201-R-4.1 DateRangeOrdered (Warning) — fixed/periodic range bounds
- S201-R-5.1 EquipmentHasHostStructure (Warning) — StructureEquipment
- S201-R-6.1 AggregationHasMembers (Warning) — ≥ 2 peers
- S201-R-6.2 AggregationMembersResolved (Error) — peer xlink resolution

Wires the rule pack into S201DatasetProcessor.Validate() via the shared
ValidationRunner pattern, and adds 64 unit tests (in-memory inventory
builders, pass+fail per rule, plus Default-rule-set smoke tests).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@philliphoff philliphoff merged commit 5d3fba7 into main May 22, 2026
9 checks passed
@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.5 +0.17 0.58 20/20
s101-portray-cold ✅ pass +2.0 +0.98 343.67 20/20
s101-portray-warm ✅ pass -2.1 -0.45 186.14 20/20
s101-render-warm ✅ pass -2.1 -0.42 176.19 20/20
s102-coverage ✅ pass -23.2 -3.97 1.45 20/20
s102-coverage-open ✅ pass +3.6 +3.38 2.70 20/20
s102-coverage-render-large ✅ pass -0.8 -1.26 139.68 20/20
s124-vector ✅ pass +5.1 +0.69 0.42 20/20
s201-vector ✅ pass -2.1 -0.23 0.35 20/20

exchange-set-open

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.58 0.59
Baseline MAD (ms) 0.05
Δ median +1.5%
z (Δ/MAD) +0.17

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.asset.read 10.69 10.99 +2.8% ▫️
s100.exchangeset.parse 41.99 42.30 +0.7% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.asset.read.duration 18.53 18.33 -1.1% ▫️

s101-portray-cold

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 343.67 350.65
Baseline MAD (ms) 7.14
Δ median +2.0%
z (Δ/MAD) +0.98

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 5022.15 5358.50 +6.7%
s100.lua.rule.invoke 4232.68 4538.94 +7.2%
s100.pipeline.vector.process 5108.43 5444.24 +6.6%
s100.pipeline.vector.stage.assemble 0.28 0.33 +15.3%
s100.pipeline.vector.stage.feature_xml 57.11 58.30 +2.1% ▫️
s100.pipeline.vector.stage.lua 5023.85 5360.14 +6.7%
s100.pipeline.vector.stage.rule_select 5.99 5.92 -1.2% ▫️
s100.pipeline.vector.stage.sort 2.27 2.37 +4.6% ▫️
s100.pipeline.vector.stage.viewing_groups 7.06 4.17 -40.9%
s100.pipeline.vector.stage.xslt 0.29 0.32 +9.2%
s100.render.frame 5020.80 5150.89 +2.6% ▫️

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 1345.35 1220.81 -9.3% ▫️
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 1055.02 930.97 -11.8%
s100.lua.rule.invoke.duration 7.09 5.93 -16.3%
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 1380.46 1251.12 -9.4% ▫️
s100.pipeline.features.in 84.00 84.00 +0.0% ▫️
s100.pipeline.stage.duration 0.38 0.27 -27.6%
s100.pipeline.stage.duration 21.62 18.97 -12.3%
s100.pipeline.stage.duration 1346.61 1221.97 -9.3% ▫️
s100.pipeline.stage.duration 4.30 4.08 -5.1% ▫️
s100.pipeline.stage.duration 2.44 2.46 +0.7% ▫️
s100.pipeline.stage.duration 2.42 0.85 -64.7%
s100.pipeline.stage.duration 0.83 0.84 +1.4% ▫️
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 1368.03 1331.01 -2.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 7.00 7.00 +0.0% ▫️
s100.symbol.cache.miss.count 14.00 14.00 +0.0% ▫️
s100.symbol.resolve.duration 0.04 0.03 -4.3% ▫️
s100.symbol.resolve.duration 5.95 8.71 +46.3%

s101-portray-warm

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 186.14 182.31
Baseline MAD (ms) 8.45
Δ median -2.1%
z (Δ/MAD) -0.45

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 5308.16 5385.86 +1.5% ▫️
s100.lua.rule.invoke 4419.97 4514.56 +2.1% ▫️
s100.pipeline.vector.process 5396.06 5463.57 +1.3% ▫️
s100.pipeline.vector.stage.assemble 0.30 0.23 -22.2%
s100.pipeline.vector.stage.feature_xml 74.50 63.92 -14.2%
s100.pipeline.vector.stage.lua 5309.57 5387.20 +1.5% ▫️
s100.pipeline.vector.stage.rule_select 3.68 3.76 +2.2% ▫️
s100.pipeline.vector.stage.sort 2.85 2.96 +4.0% ▫️
s100.pipeline.vector.stage.viewing_groups 4.38 4.61 +5.3%
s100.pipeline.vector.stage.xslt 0.22 0.27 +20.1%
s100.render.frame 77.27 74.25 -3.9% ▫️

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 1302.93 879.92 -32.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 1085.95 733.58 -32.4%
s100.lua.rule.invoke.duration 6.41 16.21 +152.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 1321.91 898.71 -32.0%
s100.pipeline.features.in 84.00 84.00 +0.0% ▫️
s100.pipeline.stage.duration 0.02 0.02 -2.5% ▫️
s100.pipeline.stage.duration 15.97 15.63 -2.2% ▫️
s100.pipeline.stage.duration 1303.22 880.18 -32.5%
s100.pipeline.stage.duration 0.84 0.76 -9.9% ▫️
s100.pipeline.stage.duration 0.58 0.77 +33.9%
s100.pipeline.stage.duration 0.15 0.14 -4.8% ▫️
s100.pipeline.stage.duration 0.02 0.03 +13.9%
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 178.62 187.64 +5.1%
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.06 +11.9%
s100.symbol.resolve.duration 0.41 0.39 -3.4% ▫️

s101-render-warm

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 176.19 172.46
Baseline MAD (ms) 8.84
Δ median -2.1%
z (Δ/MAD) -0.42

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 4923.60 4839.14 -1.7% ▫️
s100.lua.rule.invoke 4090.77 4068.76 -0.5% ▫️
s100.pipeline.vector.process 4987.30 4902.56 -1.7% ▫️
s100.pipeline.vector.stage.assemble 0.20 0.23 +14.5%
s100.pipeline.vector.stage.feature_xml 51.50 51.13 -0.7% ▫️
s100.pipeline.vector.stage.lua 4924.76 4840.32 -1.7% ▫️
s100.pipeline.vector.stage.rule_select 3.16 3.12 -1.3% ▫️
s100.pipeline.vector.stage.sort 3.25 3.15 -3.0% ▫️
s100.pipeline.vector.stage.viewing_groups 4.62 4.57 -1.0% ▫️
s100.pipeline.vector.stage.xslt 0.22 0.22 -0.1% ▫️
s100.render.frame 71.50 76.39 +6.8%

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 1234.12 572.04 -53.6%
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 1035.79 462.35 -55.4%
s100.lua.rule.invoke.duration 5.75 2.76 -51.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.40 593.16 -52.5%
s100.pipeline.features.in 84.00 84.00 +0.0% ▫️
s100.pipeline.stage.duration 0.02 0.02 -5.1% ▫️
s100.pipeline.stage.duration 11.58 17.89 +54.4%
s100.pipeline.stage.duration 1234.33 572.30 -53.6%
s100.pipeline.stage.duration 0.75 0.83 +10.8%
s100.pipeline.stage.duration 0.61 0.64 +5.4%
s100.pipeline.stage.duration 0.15 0.14 -5.2% ▫️
s100.pipeline.stage.duration 0.03 0.03 +22.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 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 175.81 179.88 +2.3% ▫️
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.06 0.06 +0.5% ▫️
s100.symbol.resolve.duration 0.21 0.36 +76.2%

s102-coverage

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 1.45 1.11
Baseline MAD (ms) 0.08
Δ median -23.2%
z (Δ/MAD) -3.97

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.coverage.process 52.03 46.66 -10.3%
s100.pipeline.coverage.stage.read 4.85 4.83 -0.3% ▫️
s100.pipeline.coverage.stage.resolve 43.64 38.43 -11.9%
s100.render.coverage.build 79.11 78.49 -0.8% ▫️

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.30 21.27 -0.2% ▫️
s100.hdf5.read.duration 29.67 29.40 -0.9% ▫️
s100.hdf5.read.duration 7.62 7.46 -2.1% ▫️
s100.pipeline.duration 11.38 9.87 -13.3%
s100.pipeline.stage.duration 0.88 0.83 -4.9% ▫️
s100.pipeline.stage.duration 9.95 8.39 -15.7%
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️

s102-coverage-open

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 2.70 2.79
Baseline MAD (ms) 0.03
Δ median +3.6%
z (Δ/MAD) +3.38

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.dataset.open 82.77 85.94 +3.8% ▫️
s100.hdf5.dataset.read 14.56 14.01 -3.8% ▫️
s100.hdf5.file.open 18.70 19.10 +2.1% ▫️
s100.hdf5.open 18.70 19.84 +6.1%

Metrics

Metric Baseline Candidate Delta Status
s100.hdf5.read.bytes 36456.00 36456.00 +0.0% ▫️
s100.hdf5.read.duration 7.22 6.11 -15.5%
s100.hdf5.read.duration 2.17 2.13 -1.6% ▫️
s100.hdf5.read.duration 4.23 4.34 +2.8% ▫️

s102-coverage-render-large

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 139.68 138.56
Baseline MAD (ms) 0.89
Δ median -0.8%
z (Δ/MAD) -1.26

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.coverage.process 176.76 179.55 +1.6% ▫️
s100.pipeline.coverage.stage.read 110.04 116.73 +6.1%
s100.pipeline.coverage.stage.resolve 63.39 59.84 -5.6% ▫️
s100.render.coverage.build 4862.53 5022.71 +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.10 0.10 -1.8% ▫️
s100.hdf5.read.duration 5.21 2.23 -57.2%
s100.hdf5.read.duration 1.18 1.28 +8.6%
s100.pipeline.duration 32.63 39.94 +22.4%
s100.pipeline.stage.duration 20.86 24.04 +15.3%
s100.pipeline.stage.duration 11.12 15.22 +36.8%
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️

s124-vector

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.42 0.44
Baseline MAD (ms) 0.03
Δ median +5.1%
z (Δ/MAD) +0.69

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.vector.process 9.07 8.79 -3.1% ▫️
s100.pipeline.vector.stage.assemble 0.31 0.31 +0.2% ▫️
s100.pipeline.vector.stage.feature_xml 1.37 1.35 -1.6% ▫️
s100.pipeline.vector.stage.rule_select 0.36 0.32 -10.3%
s100.pipeline.vector.stage.sort 0.25 0.20 -21.4%
s100.pipeline.vector.stage.viewing_groups 0.60 0.52 -13.6%
s100.pipeline.vector.stage.xslt 4.24 4.18 -1.4% ▫️
s100.render.frame 1.11 1.18 +6.3%
s100.xslt.transform 1.63 1.60 -1.7% ▫️

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 54.49 55.37 +1.6% ▫️
s100.pipeline.features.in 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.duration 0.99 0.98 -1.3% ▫️
s100.pipeline.stage.duration 3.22 3.32 +3.3% ▫️
s100.pipeline.stage.duration 1.09 1.15 +5.6%
s100.pipeline.stage.duration 0.06 0.06 -1.6% ▫️
s100.pipeline.stage.duration 0.09 0.09 +5.3%
s100.pipeline.stage.duration 48.47 49.05 +1.2% ▫️
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.42 2.40 -0.8% ▫️
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.17 10.82 +6.4%

s201-vector

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.35 0.34
Baseline MAD (ms) 0.03
Δ median -2.1%
z (Δ/MAD) -0.23

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.vector.process 7.73 7.30 -5.7% ▫️
s100.pipeline.vector.stage.assemble 0.14 0.12 -9.2% ▫️
s100.pipeline.vector.stage.feature_xml 0.88 0.80 -8.8% ▫️
s100.pipeline.vector.stage.rule_select 0.33 0.31 -6.0% ▫️
s100.pipeline.vector.stage.sort 0.15 0.13 -15.6%
s100.pipeline.vector.stage.viewing_groups 0.55 0.49 -10.5%
s100.pipeline.vector.stage.xslt 3.90 3.74 -4.1% ▫️
s100.render.frame 0.44 0.33 -23.7%
s100.xslt.transform 2.19 2.04 -6.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 0.00 0.00 N/A ▫️
s100.pipeline.duration 147.74 147.53 -0.1% ▫️
s100.pipeline.features.in 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.duration 0.01 0.01 +22.3%
s100.pipeline.stage.duration 7.68 8.04 +4.7% ▫️
s100.pipeline.stage.duration 0.12 0.14 +20.2%
s100.pipeline.stage.duration 0.05 0.06 +7.4%
s100.pipeline.stage.duration 0.04 0.05 +15.8%
s100.pipeline.stage.duration 139.39 138.63 -0.5% ▫️
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.07 0.07 +4.6% ▫️
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 20.73 21.05 +1.6% ▫️

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