Skip to content

Enable runtime-async for System.IO.Compression, System.IO.Compression.Brotli, and System.Net.WebSockets#124397

Draft
Copilot wants to merge 3 commits intomainfrom
copilot/enable-runtime-async-compression
Draft

Enable runtime-async for System.IO.Compression, System.IO.Compression.Brotli, and System.Net.WebSockets#124397
Copilot wants to merge 3 commits intomainfrom
copilot/enable-runtime-async-compression

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

Description

Enables the runtime-async compiler feature on the System.IO.Compression, System.IO.Compression.Brotli, and System.Net.WebSockets source libraries to allow performance testing of runtime-async with compression and WebSocket workloads.

  • Adds <Features>$(Features);runtime-async=on</Features> with NoWarn CA2252 suppression to all three library csproj files
  • Guards enablement with conditions matching eng/testing/tests.targets: excluded for browser, wasi, and Mono targets where runtime-async is unsupported
  • Uses NoWarn CA2252 instead of EnablePreviewFeatures to avoid propagating [assembly: RequiresPreviewFeatures] to downstream type-forwarding shim assemblies (e.g., the System shim)

All existing tests pass (1400 System.IO.Compression, 328 Brotli, 570 System.Net.WebSockets). Full clr+libs build succeeds with 0 warnings and 0 errors.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@github-actions github-actions bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Feb 13, 2026
Copilot AI changed the title [WIP] Enable runtime async for System.Compression performance testing Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli Feb 13, 2026
Copilot AI requested a review from agocke February 13, 2026 19:17
@github-actions github-actions bot added area-System.IO.Compression and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Feb 13, 2026
@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to this area: @karelz, @dotnet/area-system-io-compression
See info in area-owners.md if you want to be subscribed.

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-ampere: Ampere/Linux 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-perf-win: Intel/Windows 12 Cores
  • aspnet-citrine-win: Intel/Windows 28 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-win-ampere: Ampere/Windows 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark micro

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-perf-win: Intel/Windows 12 Cores
  • aspnet-citrine-win: Intel/Windows 28 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-win-ampere: Ampere/Windows 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-citrine-lin: Intel/Linux 28 Cores
  • aspnet-perf-lin: Intel/Linux 12 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-ampere: Ampere/Linux 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark micro libs

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-citrine-lin: Intel/Linux 28 Cores
  • aspnet-perf-lin: Intel/Linux 12 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-ampere: Ampere/Linux 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-perf-win: Intel/Windows 12 Cores
  • aspnet-citrine-win: Intel/Windows 28 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-win-ampere: Ampere/Windows 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark micro aspnet-perf-lin libs

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Benchmark started for micro on aspnet-perf-lin with libs. Logs: link

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

An error occurred, please check the logs

@agocke
Copy link
Member

agocke commented Feb 13, 2026

@copilot please also enable preview features for System.Net.WebSockets

…ropagation for all three libraries

Co-authored-by: agocke <[email protected]>
Copy link
Contributor Author

Copilot AI commented Feb 14, 2026

@copilot please also enable preview features for System.Net.WebSockets

Done in 06236ed. Also fixed all three libraries to use NoWarn CA2252 instead of EnablePreviewFeatures — the latter was generating [assembly: RequiresPreviewFeatures] which broke the System type-forwarding shim. All 570 WebSockets tests pass.

Copilot AI changed the title Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli Enable runtime-async for System.IO.Compression, System.IO.Compression.Brotli, and System.Net.WebSockets Feb 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants