Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
},
"HtmlForgeX": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Transitive",
Expand Down Expand Up @@ -82,7 +82,7 @@
"type": "Project",
"dependencies": {
"EventViewerX": "[4.0.1, )",
"HtmlForgeX": "[1.1.0, )",
"HtmlForgeX": "[1.2.0, )",
"HtmlForgeX.Email": "[2.0.0, )",
"OfficeIMO.CSV": "[3.2.4, )",
"OfficeIMO.Excel": "[3.2.4, )"
Expand Down
46 changes: 41 additions & 5 deletions Benchmarks/EventReportRendering/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ The shared PowerForge runner uses one warmup, three measured iterations, rotated

The email change limits projection to the rows actually displayed. Its allocation stays approximately constant as the snapshot grows. The complete snapshot and source counts remain available in the report.

The HTML renderer still projects and renders every event. Its allocation improvement is small, and the 10,000-event output is about 16.6 MB. These measurements do not establish an HTML throughput improvement or a bound on large interactive reports. Timing results are observations from a potentially busy development host, not release performance guarantees.
The historical HTML measurements above precede the shared render buffer described below. Timing results are observations from a potentially busy development host, not release performance guarantees.

The before snapshot uses the unchanged renderer at commit `7793aa5997bf016b0f56c33e8ae01abd68846ccd`. The after snapshot includes bounded email projection, single-pass constant-column classification, and HtmlForgeX 1.1.0 for descriptive dashboard captions. The email dependency remains HtmlForgeX.Email 1.6.0 in both measurements.

## Current mobile email baseline
## Mobile email baseline

`after-mobile.json` records the same fixture with published HtmlForgeX.Email
2.0.0 and mobile stacked records at commit
Expand All @@ -41,7 +41,43 @@ with processor affinity `0xFFFF` and BelowNormal priority requested.
Email allocation stays approximately constant as the input grows because the
digest still displays 25 records. The newer dependency and stacked presentation
produce more markup and allocate more than the historical 1.6 fixture above.
Use this baseline when measuring the current presentation; the two dependency
Use this baseline when measuring the mobile email presentation; the two dependency
versions and output layouts do not form a comparison of projection changes alone.
Full-detail HTML still renders every retained record and needs explicit input
bounds for large investigations.

## Shared render buffer

HtmlForgeX 1.2.0 renders nested monitoring containers and deferred record JSON
into the owning buffer. It avoids copying complete child strings at each level
and reuses monitoring IDs that are already normalized. HTML retains every record;
email continues to display the first 25.

A comparison of unchanged HtmlForgeX source at
`6787b52211d1159bf0e9510451454bea79a4c967` with the shared-buffer implementation
uses the same fixture and readable assets on both sides:

| Case | Before allocated bytes | After allocated bytes | Reduction |
| --- | ---: | ---: | ---: |
| HTML, 1,000 events | 147,991,211 | 41,959,016 | 71.6% |
| HTML, 10,000 events | 1,158,312,323 | 223,370,648 | 80.7% |

The output has the same length and content apart from its generated timestamp.
Wide and compact browser checks retain all 10,000 records and can filter and
inspect the final record.

`after-render-buffer.json` records the signed 1.2.0 package with its release
assets, which are minified. All twelve measured samples pass with the same SDK,
affinity, priority, warmup, iteration count and case order as the mobile baseline.

| Case | Mean renderer allocated bytes | Output bytes |
| --- | ---: | ---: |
| Email, 1,000 events | 11,899,384 | 215,215 |
| Email, 10,000 events | 11,899,480 | 215,219 |
| HTML, 1,000 events | 38,704,584 | 2,827,233 |
| HTML, 10,000 events | 220,107,507 | 16,435,290 |

These are cumulative allocations during the warmed rendering operation, not peak
working-set measurements. The shared-buffer comparison isolates the renderer
change; the package baseline also reflects its minified assets. A large report
still projects every event and embeds its data, so callers should bound inputs
for large investigations. These fixtures do not establish an unlimited-report
memory bound or a release throughput guarantee.
53 changes: 53 additions & 0 deletions Benchmarks/EventReportRendering/after-render-buffer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"Contract": "Deterministic generic rows; fixture generation excluded; HTML retains all rows; email displays the first 25.",
"Phase": "HtmlForgeX 1.2.0 shared render buffer with release assets",
"HtmlForgeXSourceRevision": "b895ca47e524d1fc54685f434efab7da25efdd96",
"EventViewerXSourceRevision": "b5847b195815c416d14204c67a5c56acd06032e2",
"HtmlForgeXVersion": "1.2.0",
"HtmlForgeXEmailVersion": "2.0.0",
"ConfiguredSdkVersion": "10.0.112",
"Runtime": ".NET 10.0.12",
"OSArchitecture": "X64",
"ProcessArchitecture": "X64",
"ProcessorAffinityRequested": "0xFFFF",
"PriorityRequested": "BelowNormal",
"WarmupCount": 1,
"IterationCount": 3,
"RunOrder": "Rotated",
"SampleCount": 12,
"FailureCount": 0,
"Metrics": [
{
"Scenario": "Email-1000",
"Metrics": {
"RenderMs": 9.4758,
"RendererAllocatedBytes": 11899384.0,
"OutputBytes": 215215.0
}
},
{
"Scenario": "Email-10000",
"Metrics": {
"RenderMs": 17.6628,
"RendererAllocatedBytes": 11899480.0,
"OutputBytes": 215219.0
}
},
{
"Scenario": "Html-1000",
"Metrics": {
"RenderMs": 50.0924,
"RendererAllocatedBytes": 38704584.0,
"OutputBytes": 2827233.0
}
},
{
"Scenario": "Html-10000",
"Metrics": {
"RenderMs": 253.44226666666668,
"RendererAllocatedBytes": 220107506.66666666,
"OutputBytes": 16435290.0
}
}
]
}
6 changes: 3 additions & 3 deletions Benchmarks/EventReportRendering/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
},
"HtmlForgeX": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Transitive",
Expand Down Expand Up @@ -82,7 +82,7 @@
"type": "Project",
"dependencies": {
"EventViewerX": "[4.0.1, )",
"HtmlForgeX": "[1.1.0, )",
"HtmlForgeX": "[1.2.0, )",
"HtmlForgeX.Email": "[2.0.0, )",
"OfficeIMO.CSV": "[3.2.4, )",
"OfficeIMO.Excel": "[3.2.4, )"
Expand Down
6 changes: 3 additions & 3 deletions Benchmarks/EventStore/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
},
"HtmlForgeX": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Transitive",
Expand Down Expand Up @@ -88,7 +88,7 @@
"type": "Project",
"dependencies": {
"EventViewerX": "[4.0.1, )",
"HtmlForgeX": "[1.1.0, )",
"HtmlForgeX": "[1.2.0, )",
"HtmlForgeX.Email": "[2.0.0, )",
"OfficeIMO.CSV": "[3.2.4, )",
"OfficeIMO.Excel": "[3.2.4, )"
Expand Down
6 changes: 3 additions & 3 deletions Sources/EventViewerX.Cli/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@
},
"HtmlForgeX": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Transitive",
Expand Down Expand Up @@ -446,7 +446,7 @@
"type": "Project",
"dependencies": {
"EventViewerX": "[4.0.1, )",
"HtmlForgeX": "[1.1.0, )",
"HtmlForgeX": "[1.2.0, )",
"HtmlForgeX.Email": "[2.0.0, )",
"OfficeIMO.CSV": "[3.2.4, )",
"OfficeIMO.Excel": "[3.2.4, )"
Expand Down
6 changes: 3 additions & 3 deletions Sources/EventViewerX.Cli/packages.release.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@
},
"HtmlForgeX": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Transitive",
Expand Down Expand Up @@ -452,7 +452,7 @@
"type": "Project",
"dependencies": {
"EventViewerX": "[4.0.1, )",
"HtmlForgeX": "[1.1.0, )",
"HtmlForgeX": "[1.2.0, )",
"HtmlForgeX.Email": "[2.0.0, )",
"OfficeIMO.CSV": "[3.2.4, )",
"OfficeIMO.Excel": "[3.2.4, )"
Expand Down
6 changes: 3 additions & 3 deletions Sources/EventViewerX.Cli/packages.runtime.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@
},
"HtmlForgeX": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Transitive",
Expand Down Expand Up @@ -446,7 +446,7 @@
"type": "Project",
"dependencies": {
"EventViewerX": "[4.0.1, )",
"HtmlForgeX": "[1.1.0, )",
"HtmlForgeX": "[1.2.0, )",
"HtmlForgeX.Email": "[2.0.0, )",
"OfficeIMO.CSV": "[3.2.4, )",
"OfficeIMO.Excel": "[3.2.4, )"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EventViewerX\EventViewerX.csproj" />
<PackageReference Include="HtmlForgeX" Version="1.1.0" />
<PackageReference Include="HtmlForgeX" Version="1.2.0" />
<PackageReference Include="HtmlForgeX.Email" Version="2.0.0" />
<PackageReference Include="OfficeIMO.Excel" Version="3.2.4" />
<PackageReference Include="OfficeIMO.CSV" Version="3.2.4" />
Expand Down
24 changes: 12 additions & 12 deletions Sources/EventViewerX.Reporting/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
".NETFramework,Version=v4.7.2": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg==",
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA==",
"dependencies": {
"System.ComponentModel.Annotations": "5.0.0",
"System.Text.Json": "10.0.12"
Expand Down Expand Up @@ -233,9 +233,9 @@
".NETStandard,Version=v2.1": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg==",
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA==",
"dependencies": {
"System.ComponentModel.Annotations": "5.0.0",
"System.Text.Json": "10.0.12"
Expand Down Expand Up @@ -419,9 +419,9 @@
"net10.0-windows7.0": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Direct",
Expand Down Expand Up @@ -501,9 +501,9 @@
"net8.0-windows7.0": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Direct",
Expand Down
24 changes: 12 additions & 12 deletions Sources/EventViewerX.Reporting/packages.release.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
".NETFramework,Version=v4.7.2": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg==",
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA==",
"dependencies": {
"System.ComponentModel.Annotations": "5.0.0",
"System.Text.Json": "10.0.12"
Expand Down Expand Up @@ -377,9 +377,9 @@
".NETStandard,Version=v2.1": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg==",
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA==",
"dependencies": {
"System.ComponentModel.Annotations": "5.0.0",
"System.Text.Json": "10.0.12"
Expand Down Expand Up @@ -761,9 +761,9 @@
"net10.0-windows7.0": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Direct",
Expand Down Expand Up @@ -921,9 +921,9 @@
"net8.0-windows7.0": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Direct",
Expand Down
24 changes: 12 additions & 12 deletions Sources/EventViewerX.Reporting/packages.runtime.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
".NETFramework,Version=v4.7.2": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg==",
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA==",
"dependencies": {
"System.ComponentModel.Annotations": "5.0.0",
"System.Text.Json": "10.0.12"
Expand Down Expand Up @@ -377,9 +377,9 @@
".NETStandard,Version=v2.1": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg==",
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA==",
"dependencies": {
"System.ComponentModel.Annotations": "5.0.0",
"System.Text.Json": "10.0.12"
Expand Down Expand Up @@ -761,9 +761,9 @@
"net10.0-windows7.0": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Direct",
Expand Down Expand Up @@ -915,9 +915,9 @@
"net8.0-windows7.0": {
"HtmlForgeX": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "jSDGXPlzm7d5ZY+2YDYQ6TwlO352GnV230vnQBSIkKvfqD16QMbOSmNGNqCQSjI00C1TtoxU3BxFlz3okRiaVg=="
"requested": "[1.2.0, )",
"resolved": "1.2.0",
"contentHash": "rXmjplPb5sgpqsc+ta0m/myRkYPE+Ri5VMT7F11DqLXHXZhiEv5asLrTy93bGVaXhVJYB0jxnR8qNVC2KIxhQA=="
},
"HtmlForgeX.Email": {
"type": "Direct",
Expand Down
Loading
Loading