Skip to content

add render options and revamped url builder#8

Merged
jsneedles merged 5 commits into
mainfrom
render_options
Jul 19, 2026
Merged

add render options and revamped url builder#8
jsneedles merged 5 commits into
mainfrom
render_options

Conversation

@jsneedles

Copy link
Copy Markdown
Member

Adds new ImageRenderOptions that support render-time image operations like resizing & cropping.

Also a new UrlStringBuilder to better encapsulate url building + query string behavior (and more tests + benchmarks)

@github-actions

Copy link
Copy Markdown

Test results

0 tests   0 ✅  0s ⏱️
0 suites  0 💤
0 files    0 ❌

Results for commit be5e562.

@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown

Test results

131 tests   131 ✅  0s ⏱️
  1 suites    0 💤
  1 files      0 ❌

Results for commit 742494f.

♻️ This comment has been updated with latest results.

@github-actions

Copy link
Copy Markdown

Benchmark Results

HtmlCssToImage.Benchmarks.Benchmarks.HmacBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.74GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method Mean Error StdDev Ratio Gen0 Allocated Alloc Ratio
Hmac_Standard_Instance 2.005 μs 0.0128 μs 0.0113 μs 1.00 0.0648 696 B 1.00
HCTI_HmacToken_Optimized 1.852 μs 0.0047 μs 0.0042 μs 0.92 0.0134 152 B 0.22

HtmlCssToImage.Benchmarks.Benchmarks.MakeAuthHeaderBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method Mean Error StdDev Ratio RatioSD Gen0 Allocated Alloc Ratio
AuthHeader_Standard_StringFormat 92.35 ns 1.042 ns 0.923 ns 1.00 0.01 0.0368 376 B 1.00
HCTI_AuthHeader_Optimized 76.34 ns 1.299 ns 1.215 ns 0.83 0.02 0.0221 168 B 0.45

HtmlCssToImage.Benchmarks.Benchmarks.QueryStringBuilderBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method Mean Error StdDev Ratio RatioSD Gen0 Allocated Alloc Ratio
BuiltInHttpUtility 1,153.5 ns 17.15 ns 16.05 ns 1.00 0.02 0.3853 2976 B 1.00
BuiltInUri 1,128.5 ns 15.98 ns 14.95 ns 0.98 0.02 0.2728 2760 B 0.93
HctiQueryStringBuilder 753.4 ns 2.46 ns 2.05 ns 0.65 0.01 0.1459 744 B 0.25
HctiQueryStringBuilderDirect 737.2 ns 6.42 ns 5.69 ns 0.64 0.01 0.1459 744 B 0.25

HtmlCssToImage.Benchmarks.Benchmarks.TemplateListUrlBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method templateId nextPageStart Mean Error StdDev Ratio Gen0 Allocated Alloc Ratio
Basic ? ? 63.47 ns 0.413 ns 0.345 ns 1.00 0.0168 128 B 1.00
Optimized ? ? 23.45 ns 0.068 ns 0.060 ns 0.37 0.0084 64 B 0.50
Basic t-daa(...)2efe6 [38] ? 87.43 ns 0.223 ns 0.198 ns 1.00 0.0306 312 B 1.00
Optimized t-daa(...)2efe6 [38] ? 26.44 ns 0.178 ns 0.166 ns 0.30 0.0138 144 B 0.46
Basic t-daa(...)2efe6 [38] 1735689600 81.15 ns 0.265 ns 0.235 ns 1.00 0.0291 296 B 1.00
Optimized t-daa(...)2efe6 [38] 1735689600 43.40 ns 0.115 ns 0.096 ns 0.53 0.0187 192 B 0.65

@github-actions

Copy link
Copy Markdown

Benchmark Results

HtmlCssToImage.Benchmarks.Benchmarks.HmacBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.61GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method Mean Error StdDev Ratio Gen0 Gen1 Gen2 Allocated Alloc Ratio
Hmac_Standard_Instance 1.970 μs 0.0167 μs 0.0156 μs 1.00 0.0877 - - 696 B 1.00
HCTI_HmacToken_Optimized 1.855 μs 0.0061 μs 0.0051 μs 0.94 0.0172 0.0019 0.0019 - 0.00

HtmlCssToImage.Benchmarks.Benchmarks.MakeAuthHeaderBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method Mean Error StdDev Ratio RatioSD Gen0 Allocated Alloc Ratio
AuthHeader_Standard_StringFormat 94.76 ns 1.877 ns 1.755 ns 1.00 0.03 0.0362 376 B 1.00
HCTI_AuthHeader_Optimized 75.15 ns 0.851 ns 0.796 ns 0.79 0.02 0.0221 168 B 0.45

HtmlCssToImage.Benchmarks.Benchmarks.TemplateListUrlBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method templateId nextPageStart Mean Error StdDev Ratio Gen0 Allocated Alloc Ratio
Basic ? ? 64.47 ns 0.562 ns 0.469 ns 1.00 0.0250 128 B 1.00
Optimized ? ? 23.85 ns 0.073 ns 0.069 ns 0.37 0.0084 64 B 0.50
Basic t-daa(...)2efe6 [38] ? 87.49 ns 0.314 ns 0.293 ns 1.00 0.0308 312 B 1.00
Optimized t-daa(...)2efe6 [38] ? 27.58 ns 0.145 ns 0.136 ns 0.32 0.0141 144 B 0.46
Basic t-daa(...)2efe6 [38] 1735689600 78.28 ns 0.436 ns 0.408 ns 1.00 0.0290 296 B 1.00
Optimized t-daa(...)2efe6 [38] 1735689600 40.01 ns 0.208 ns 0.194 ns 0.51 0.0186 192 B 0.65

HtmlCssToImage.Benchmarks.Benchmarks.UrlStringBuilderBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Intel Xeon Platinum 8370C CPU 2.80GHz (Max: 2.79GHz), 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]  : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v4
  .NET 10 : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v4

Job=.NET 10  EnvironmentVariables=DOTNET_TieredPGO=0  Runtime=.NET 10.0  
Server=True  MaxIterationCount=20  MaxWarmupIterationCount=5  
MinWarmupIterationCount=2  

Method Mean Error StdDev Ratio RatioSD Gen0 Allocated Alloc Ratio
BuiltInHttpUtility 1,188.8 ns 22.57 ns 25.09 ns 1.00 0.03 0.2937 2976 B 1.00
BuiltInUri 1,139.6 ns 19.24 ns 17.99 ns 0.96 0.02 0.2728 2760 B 0.93
HctiQueryStringBuilder 798.8 ns 3.73 ns 3.11 ns 0.67 0.01 0.1459 744 B 0.25
HctiQueryStringBuilderDirect 785.4 ns 3.96 ns 3.31 ns 0.66 0.01 0.1459 744 B 0.25

@jsneedles
jsneedles merged commit 9303b1d into main Jul 19, 2026
9 checks passed
@jsneedles
jsneedles deleted the render_options branch July 19, 2026 17:08
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