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
…ion.Brotli

Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
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 <515774+agocke@users.noreply.github.com>
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
@agocke
Copy link
Member

agocke commented Feb 17, 2026

/benchmark micro aspnet-perf-lin libs

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 17, 2026

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

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 17, 2026

An error occurred, please check the logs

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