Skip to content

Cache S101FeatureXmlSource XName instances (perf-report P4)#162

Open
philliphoff wants to merge 1 commit into
mainfrom
philliphoff/p4-s101-xname-churn
Open

Cache S101FeatureXmlSource XName instances (perf-report P4)#162
philliphoff wants to merge 1 commit into
mainfrom
philliphoff/p4-s101-xname-churn

Conversation

@philliphoff
Copy link
Copy Markdown
Owner

Implements P4 from the optimisation plan / perf-report §3 finding #4.

Evidence

The perf-report flagged String.Concat(string, string, string) as 50% (cold) / 43% (warm) of all managed allocations during S-101 portrayal of the real UKHO trial cells. The driver was S101FeatureXmlSource constructing fresh XName instances for every geometry/attribute element of every feature — most fanning out into MakePointElement, which is called once per coordinate.

Change

Factored every S100Ns + "Foo" and string-typed attribute name in S101FeatureXmlSource into static XName fields (option (a) from the plan). Net diff: +41 / −16 in one file.

Why this should help even though XNamespace.GetName already memoises

XNamespace + string already routes through a hash-table cache, so the savings are smaller than a naive read of the report would suggest. But cached XName fields:

  • skip the per-call GetName hash lookup;
  • keep the names rooted by a Gen2 static field, so they never participate in GC promotion;
  • and, for XAttribute names, route through the XName-typed constructor instead of the string-typed one, avoiding an additional XNamespace.None.GetName(name) lookup per attribute.

Validation

Behaviourally identical — same namespace URI, same local names, same XML output.

  • tests/EncDotNet.S100.Pipelines.Tests — 49/49 pass.
  • tests/EncDotNet.S100.Datasets.S101.Tests — 29/29 pass.

The numerical impact belongs to a re-run of the perf-report s101-real-cold and s101-real-warm scenarios. Expectation: the String.Concat(string, string, string) row drops out of the allocation top-N. If it doesn't, the next candidate (per the plan's option (b)) is bypassing XLinq for FeatureXml construction entirely — but that's a much larger change and shouldn't be done speculatively.

Out of scope

Other allocation hot-spots from the same scenarios (e.g. P6 MetricStreamIdentity, P5 ClipPatternsByPriority) are deliberately deferred — each will get its own surgical PR with matching before/after measurement.

Per the perf report (s101-real-cold and s101-real-warm scenarios),
String.Concat(string, string, string) accounted for 50% / 43% of
all managed allocations during S-101 portrayal. The driver was
S101FeatureXmlSource constructing fresh XName instances for every
geometry/attribute element of every feature — most of which fan
out into MakePointElement, called once per coordinate.

XNamespace+string already memoises through XNamespace.GetName, so
the savings here are smaller than a naive read of the report would
suggest. But the cached XName fields:

  - skip the per-call GetName hash lookup;
  - keep the names rooted by a Gen2 static field, so they never
    participate in GC promotion;
  - and, for XAttribute names, route through the XName-typed ctor
    instead of the string-typed one, avoiding an extra
    XNamespace.None.GetName(name) lookup per attribute.

Behaviourally identical: same namespace, same local names, same
XML output. Existing pipeline + dataset tests pass (49 + 29).

This is option (a) from the optimisation plan. Validation belongs
to a re-run of s101-real-cold / s101-real-warm against this branch
(perf-report Track-A); we expect the String.Concat(s,s,s) row to
drop out of the top-N allocation table. If it doesn't, the next
candidate is option (b) — bypassing XLinq for the FeatureXml
construction entirely.

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

github-actions Bot commented Jun 1, 2026

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.0 -0.20 0.56 20/20
s101-portray-cold ✅ pass -1.5 -0.55 408.01 20/20
s101-portray-warm ✅ pass -1.6 -0.45 237.59 20/20
s101-real-cold ✅ pass +11.2 +1.75 0.22 5/5
s101-real-warm ✅ pass +7.5 +0.58 0.26 5/5
s101-render-warm ✅ pass -2.5 -0.98 232.84 20/20
s102-coverage ✅ pass -1.3 -0.27 1.14 20/20
s102-coverage-open ✅ pass +1.1 +0.83 2.93 20/20
s102-coverage-render-large ✅ pass +0.6 +0.94 130.79 20/20
s102-real-warm ✅ pass -4.7 -0.95 0.26 5/5
s111-real-warm ✅ pass -10.4 -1.40 0.23 5/5
s124-vector ✅ pass -12.5 -1.70 0.31 20/20
s201-vector ✅ pass -6.2 -1.79 0.34 20/20

exchange-set-open

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.56 0.55
Baseline MAD (ms) 0.03
Δ median -1.0%
z (Δ/MAD) -0.20

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.asset.read 10.56 10.48 -0.7% ▫️
s100.exchangeset.parse 39.19 39.77 +1.5% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.asset.read.duration 17.79 18.05 +1.4% ▫️

s101-portray-cold

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 408.01 401.88
Baseline MAD (ms) 11.13
Δ median -1.5%
z (Δ/MAD) -0.55

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 7630.59 7840.20 +2.7% ▫️
s100.lua.rule.invoke 6512.48 6779.56 +4.1% ▫️
s100.pipeline.vector.process 7869.62 8070.01 +2.5% ▫️
s100.pipeline.vector.stage.assemble 0.19 0.19 -2.1% ▫️
s100.pipeline.vector.stage.feature_xml 184.17 175.71 -4.6% ▫️
s100.pipeline.vector.stage.lua 7632.20 7841.75 +2.7% ▫️
s100.pipeline.vector.stage.rule_select 6.06 5.54 -8.6% ▫️
s100.pipeline.vector.stage.sort 14.47 14.28 -1.3% ▫️
s100.pipeline.vector.stage.viewing_groups 16.10 16.00 -0.7% ▫️
s100.pipeline.vector.stage.xslt 0.23 0.21 -10.0% ▫️
s100.render.frame 1887.10 1878.88 -0.4% ▫️

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 2509.75 2411.41 -3.9% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 63.00 63.00 +0.0% ▫️
s100.lua.feature.instructions.count 63.00 63.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 42.00 42.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 217.00 217.00 +0.0% ▫️
s100.lua.feature.instructions.count 840.00 840.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 21.00 21.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 840.00 840.00 +0.0% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.features.count 2478.00 2478.00 +0.0% ▫️
s100.lua.instructions.emitted.count 4004.00 4004.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 2110.32 2018.18 -4.4% ▫️
s100.lua.rule.invoke.duration 4.26 3.99 -6.4% ▫️
s100.lua.source.cache.hit.count 552.00 552.00 +0.0% ▫️
s100.lua.source.cache.miss.count 43.00 43.00 +0.0% ▫️
s100.pattern.cache.hit.count 210.00 210.00 +0.0% ▫️
s100.pattern.cache.miss.count 14.00 14.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 4004.00 4004.00 +0.0% ▫️
s100.pipeline.duration 2586.64 2484.05 -4.0% ▫️
s100.pipeline.features.in 217.00 217.00 +0.0% ▫️
s100.pipeline.stage.duration 0.30 0.33 +8.3%
s100.pipeline.stage.duration 61.81 57.73 -6.6% ▫️
s100.pipeline.stage.duration 2511.09 2412.71 -3.9% ▫️
s100.pipeline.stage.duration 4.67 4.52 -3.3% ▫️
s100.pipeline.stage.duration 5.19 5.22 +0.6% ▫️
s100.pipeline.stage.duration 0.98 1.03 +5.2%
s100.pipeline.stage.duration 0.90 0.84 -6.4% ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.portrayal.cache.hit.count 12.00 12.00 +0.0% ▫️
s100.portrayal.cache.hit.count 552.00 552.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 96.00 96.00 +0.0% ▫️
s100.portrayal.cache.miss.count 2.00 2.00 +0.0% ▫️
s100.portrayal.cache.miss.count 43.00 43.00 +0.0% ▫️
s100.portrayal.cache.miss.count 16.00 16.00 +0.0% ▫️
s100.render.frame.duration 726.57 710.42 -2.2% ▫️
s100.render.instructions.processed.count 4004.00 4004.00 +0.0% ▫️
s100.render.styles.applied.count 4256.00 4256.00 +0.0% ▫️
s100.symbol.cache.hit.count 364.00 364.00 +0.0% ▫️
s100.symbol.cache.miss.count 98.00 98.00 +0.0% ▫️
s100.symbol.resolve.duration 0.32 0.30 -5.3% ▫️
s100.symbol.resolve.duration 17.06 16.70 -2.1% ▫️

s101-portray-warm

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 237.59 233.84
Baseline MAD (ms) 8.32
Δ median -1.6%
z (Δ/MAD) -0.45

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 5799.39 5692.96 -1.8% ▫️
s100.lua.rule.invoke 5126.15 5056.35 -1.4% ▫️
s100.pipeline.vector.process 6110.42 5903.62 -3.4% ▫️
s100.pipeline.vector.stage.assemble 0.16 0.14 -8.9% ▫️
s100.pipeline.vector.stage.feature_xml 285.15 184.24 -35.4%
s100.pipeline.vector.stage.lua 5800.41 5693.94 -1.8% ▫️
s100.pipeline.vector.stage.rule_select 3.63 3.20 -11.8%
s100.pipeline.vector.stage.sort 16.61 17.72 +6.7%
s100.pipeline.vector.stage.viewing_groups 18.13 19.26 +6.2%
s100.pipeline.vector.stage.xslt 0.20 0.21 +3.5% ▫️
s100.render.frame 225.72 234.03 +3.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 1505.74 1507.60 +0.1% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 63.00 63.00 +0.0% ▫️
s100.lua.feature.instructions.count 63.00 63.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 42.00 42.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 217.00 217.00 +0.0% ▫️
s100.lua.feature.instructions.count 840.00 840.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 21.00 21.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 840.00 840.00 +0.0% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.features.count 2478.00 2478.00 +0.0% ▫️
s100.lua.instructions.emitted.count 4004.00 4004.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 1345.04 1342.67 -0.2% ▫️
s100.lua.rule.invoke.duration 1.82 2.00 +9.9%
s100.lua.source.cache.hit.count 595.00 595.00 +0.0% ▫️
s100.pattern.cache.hit.count 222.00 222.00 +0.0% ▫️
s100.pattern.cache.miss.count 2.00 2.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 4004.00 4004.00 +0.0% ▫️
s100.pipeline.duration 1580.85 1566.23 -0.9% ▫️
s100.pipeline.features.in 217.00 217.00 +0.0% ▫️
s100.pipeline.stage.duration 0.02 0.02 -10.3%
s100.pipeline.stage.duration 68.57 51.21 -25.3%
s100.pipeline.stage.duration 1506.00 1507.83 +0.1% ▫️
s100.pipeline.stage.duration 0.83 1.13 +36.6%
s100.pipeline.stage.duration 4.03 4.73 +17.4%
s100.pipeline.stage.duration 0.27 0.24 -10.6%
s100.pipeline.stage.duration 0.04 0.04 +0.7% ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.portrayal.cache.hit.count 2.00 2.00 +0.0% ▫️
s100.portrayal.cache.hit.count 595.00 595.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 16.00 16.00 +0.0% ▫️
s100.render.frame.duration 121.63 123.41 +1.5% ▫️
s100.render.instructions.processed.count 4004.00 4004.00 +0.0% ▫️
s100.render.styles.applied.count 4256.00 4256.00 +0.0% ▫️
s100.symbol.cache.hit.count 448.00 448.00 +0.0% ▫️
s100.symbol.cache.miss.count 14.00 14.00 +0.0% ▫️
s100.symbol.resolve.duration 0.21 0.34 +61.8%
s100.symbol.resolve.duration 1.90 1.91 +0.8% ▫️

s101-real-cold

Iteration statistics

Stat Baseline Candidate
Samples 5 5
Median (ms) 0.22 0.25
Baseline MAD (ms) 0.01
Δ median +11.2%
z (Δ/MAD) +1.75

s101-real-warm

Iteration statistics

Stat Baseline Candidate
Samples 5 5
Median (ms) 0.26 0.28
Baseline MAD (ms) 0.03
Δ median +7.5%
z (Δ/MAD) +0.58

s101-render-warm

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 232.84 227.04
Baseline MAD (ms) 5.90
Δ median -2.5%
z (Δ/MAD) -0.98

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 5497.20 5734.47 +4.3% ▫️
s100.lua.rule.invoke 4879.36 5128.83 +5.1%
s100.pipeline.vector.process 5610.78 5842.61 +4.1% ▫️
s100.pipeline.vector.stage.assemble 0.12 0.12 +0.6% ▫️
s100.pipeline.vector.stage.feature_xml 96.73 92.12 -4.8% ▫️
s100.pipeline.vector.stage.lua 5498.05 5735.32 +4.3% ▫️
s100.pipeline.vector.stage.rule_select 2.38 2.53 +6.3%
s100.pipeline.vector.stage.sort 10.04 8.96 -10.7%
s100.pipeline.vector.stage.viewing_groups 11.47 10.41 -9.3% ▫️
s100.pipeline.vector.stage.xslt 0.16 0.21 +37.2%
s100.render.frame 148.98 137.29 -7.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 1534.02 1536.64 +0.2% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 63.00 63.00 +0.0% ▫️
s100.lua.feature.instructions.count 63.00 63.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 42.00 42.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 217.00 217.00 +0.0% ▫️
s100.lua.feature.instructions.count 840.00 840.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 21.00 21.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 49.00 49.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 840.00 840.00 +0.0% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 7.00 7.00 +0.0% ▫️
s100.lua.feature.instructions.count 28.00 28.00 +0.0% ▫️
s100.lua.feature.instructions.count 14.00 14.00 +0.0% ▫️
s100.lua.features.count 2478.00 2478.00 +0.0% ▫️
s100.lua.instructions.emitted.count 4004.00 4004.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 1353.74 1352.04 -0.1% ▫️
s100.lua.rule.invoke.duration 1.73 1.74 +0.4% ▫️
s100.lua.source.cache.hit.count 595.00 595.00 +0.0% ▫️
s100.pattern.cache.hit.count 222.00 222.00 +0.0% ▫️
s100.pattern.cache.miss.count 2.00 2.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 4004.00 4004.00 +0.0% ▫️
s100.pipeline.duration 1563.57 1572.60 +0.6% ▫️
s100.pipeline.features.in 217.00 217.00 +0.0% ▫️
s100.pipeline.stage.duration 0.02 0.02 -3.8% ▫️
s100.pipeline.stage.duration 24.71 31.30 +26.6%
s100.pipeline.stage.duration 1534.25 1536.82 +0.2% ▫️
s100.pipeline.stage.duration 0.75 0.78 +4.9% ▫️
s100.pipeline.stage.duration 2.68 2.59 -3.3% ▫️
s100.pipeline.stage.duration 0.28 0.26 -8.4% ▫️
s100.pipeline.stage.duration 0.03 0.05 +39.2%
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.portrayal.cache.hit.count 2.00 2.00 +0.0% ▫️
s100.portrayal.cache.hit.count 595.00 595.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 16.00 16.00 +0.0% ▫️
s100.render.frame.duration 108.10 106.97 -1.0% ▫️
s100.render.instructions.processed.count 4004.00 4004.00 +0.0% ▫️
s100.render.styles.applied.count 4256.00 4256.00 +0.0% ▫️
s100.symbol.cache.hit.count 448.00 448.00 +0.0% ▫️
s100.symbol.cache.miss.count 14.00 14.00 +0.0% ▫️
s100.symbol.resolve.duration 0.23 0.20 -12.1%
s100.symbol.resolve.duration 1.29 1.74 +35.6%

s102-coverage

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 1.14 1.12
Baseline MAD (ms) 0.05
Δ median -1.3%
z (Δ/MAD) -0.27

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.coverage.process 58.02 57.38 -1.1% ▫️
s100.pipeline.coverage.stage.read 4.50 4.52 +0.3% ▫️
s100.pipeline.coverage.stage.resolve 50.72 49.96 -1.5% ▫️
s100.render.coverage.build 76.08 75.86 -0.3% ▫️

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 20.83 20.81 -0.1% ▫️
s100.hdf5.read.duration 28.72 28.73 +0.0% ▫️
s100.hdf5.read.duration 7.09 7.15 +1.0% ▫️
s100.pipeline.duration 10.85 10.99 +1.2% ▫️
s100.pipeline.stage.duration 0.91 0.84 -7.0% ▫️
s100.pipeline.stage.duration 9.53 9.68 +1.6% ▫️
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.93 2.96
Baseline MAD (ms) 0.04
Δ median +1.1%
z (Δ/MAD) +0.83

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.dataset.open 81.40 82.84 +1.8% ▫️
s100.hdf5.dataset.read 11.77 12.35 +4.9% ▫️
s100.hdf5.file.open 20.02 19.92 -0.5% ▫️
s100.hdf5.open 21.13 21.08 -0.3% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.hdf5.read.bytes 36456.00 36456.00 +0.0% ▫️
s100.hdf5.read.duration 7.04 6.57 -6.7% ▫️
s100.hdf5.read.duration 2.49 2.32 -6.8% ▫️
s100.hdf5.read.duration 4.93 4.73 -4.0% ▫️

s102-coverage-render-large

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 130.79 131.64
Baseline MAD (ms) 0.90
Δ median +0.6%
z (Δ/MAD) +0.94

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.coverage.process 188.96 190.63 +0.9% ▫️
s100.pipeline.coverage.stage.read 146.50 145.84 -0.4% ▫️
s100.pipeline.coverage.stage.resolve 39.75 42.05 +5.8%
s100.render.coverage.build 4632.31 4848.84 +4.7% ▫️

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.06 0.06 -2.3% ▫️
s100.hdf5.read.duration 2.39 2.43 +1.6% ▫️
s100.hdf5.read.duration 1.42 1.24 -12.4%
s100.pipeline.duration 31.09 39.96 +28.5%
s100.pipeline.stage.duration 23.06 31.77 +37.8%
s100.pipeline.stage.duration 7.56 7.70 +1.9% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️

s102-real-warm

Iteration statistics

Stat Baseline Candidate
Samples 5 5
Median (ms) 0.26 0.25
Baseline MAD (ms) 0.01
Δ median -4.7%
z (Δ/MAD) -0.95

s111-real-warm

Iteration statistics

Stat Baseline Candidate
Samples 5 5
Median (ms) 0.23 0.20
Baseline MAD (ms) 0.02
Δ median -10.4%
z (Δ/MAD) -1.40

s124-vector

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.31 0.27
Baseline MAD (ms) 0.02
Δ median -12.5%
z (Δ/MAD) -1.70

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.vector.process 6.48 5.85 -9.7% ▫️
s100.pipeline.vector.stage.assemble 0.23 0.21 -9.7% ▫️
s100.pipeline.vector.stage.feature_xml 0.91 0.85 -7.3% ▫️
s100.pipeline.vector.stage.rule_select 0.22 0.20 -8.7% ▫️
s100.pipeline.vector.stage.sort 0.15 0.14 -7.7% ▫️
s100.pipeline.vector.stage.viewing_groups 0.37 0.35 -4.7% ▫️
s100.pipeline.vector.stage.xslt 3.33 2.98 -10.5%
s100.render.frame 0.89 0.78 -12.9%
s100.xslt.transform 1.44 1.30 -9.8% ▫️

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 52.48 52.17 -0.6% ▫️
s100.pipeline.features.in 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.duration 0.98 1.05 +7.3%
s100.pipeline.stage.duration 3.10 3.09 -0.2% ▫️
s100.pipeline.stage.duration 1.11 1.04 -6.4% ▫️
s100.pipeline.stage.duration 0.05 0.04 -11.4%
s100.pipeline.stage.duration 0.08 0.08 +2.2% ▫️
s100.pipeline.stage.duration 46.75 46.46 -0.6% ▫️
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.13 2.26 +6.5%
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.08 10.21 +1.3% ▫️

s201-vector

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 0.34 0.32
Baseline MAD (ms) 0.01
Δ median -6.2%
z (Δ/MAD) -1.79

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.pipeline.vector.process 7.50 7.04 -6.2% ▫️
s100.pipeline.vector.stage.assemble 0.20 0.17 -15.8%
s100.pipeline.vector.stage.feature_xml 0.84 0.81 -3.0% ▫️
s100.pipeline.vector.stage.rule_select 0.26 0.24 -6.9% ▫️
s100.pipeline.vector.stage.sort 0.09 0.10 +13.8%
s100.pipeline.vector.stage.viewing_groups 0.35 0.34 -3.4% ▫️
s100.pipeline.vector.stage.xslt 3.30 3.14 -4.8% ▫️
s100.render.frame 0.74 0.66 -10.1%
s100.xslt.transform 2.20 2.18 -1.2% ▫️

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 7.00 7.00 +0.0% ▫️
s100.pipeline.duration 138.83 138.67 -0.1% ▫️
s100.pipeline.features.in 21.00 21.00 +0.0% ▫️
s100.pipeline.stage.duration 0.56 0.60 +7.2%
s100.pipeline.stage.duration 6.79 7.04 +3.6% ▫️
s100.pipeline.stage.duration 0.13 0.12 -13.0%
s100.pipeline.stage.duration 0.02 0.02 +7.4%
s100.pipeline.stage.duration 0.04 0.06 +56.6%
s100.pipeline.stage.duration 130.92 130.44 -0.4% ▫️
s100.pipeline.stage.instructions.count 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 7.00 7.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 7.00 7.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 1.11 1.07 -3.9% ▫️
s100.render.instructions.processed.count 7.00 7.00 +0.0% ▫️
s100.render.styles.applied.count 14.00 14.00 +0.0% ▫️
s100.symbol.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.symbol.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.symbol.resolve.duration 0.01 0.01 +1.2% ▫️
s100.symbol.resolve.duration 0.83 0.79 -5.3% ▫️
s100.xslt.transform.duration 25.67 25.68 +0.0% ▫️

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