From 0830ab868d3e781a8cb20dd3dba94c0b77daac66 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Wed, 23 Aug 2023 15:53:21 -0700 Subject: [PATCH 1/3] Remove more setup overhead in RDG benchmarks --- .../RequestDelegateGeneratorBenchmarks.cs | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs b/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs index 3d7226bcb688..ac5c9653e89f 100644 --- a/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs +++ b/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs @@ -12,21 +12,35 @@ public class RequestDelegateGeneratorBenchmarks : RequestDelegateCreationTestBas [Params(10, 100, 1000, 10000)] public int EndpointCount { get; set; } - private string _source; + private GeneratorDriver _driver; + private Compilation _compilation; [GlobalSetup] - public void Setup() + public async Task Setup() { - _source = ""; + var project = CreateProject(); + var innerSource = ""; for (var i = 0; i < EndpointCount; i++) { - _source += $"""app.MapGet("/route{i}", (int? id) => "Hello World!");"""; + innerSource += $"""app.MapGet("/route{i}", (int? id) => "Hello World!");"""; } + var source = GetMapActionString(innerSource); + project = project.AddDocument("TestMapActions.cs", SourceText.From(source, Encoding.UTF8)).Project; + _compilation = await project.GetCompilationAsync(); + + var generator = new RequestDelegateGenerator.RequestDelegateGenerator().AsSourceGenerator(); + _driver = CSharpGeneratorDriver.Create(generators: new[] + { + generator + }, + driverOptions: new GeneratorDriverOptions(IncrementalGeneratorOutputKind.None, trackIncrementalGeneratorSteps: true), + parseOptions: ParseOptions); } [Benchmark] - public async Task CreateRequestDelegate() + public void CreateRequestDelegate() { - await RunGeneratorAsync(_source); + _driver.RunGeneratorsAndUpdateCompilation(_compilation, out var _, out var _); } } +} From a6d3190b7152bdd775ea9e35d0258c2a652402a8 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Wed, 23 Aug 2023 16:00:08 -0700 Subject: [PATCH 2/3] Fix typo --- .../perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs b/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs index ac5c9653e89f..9a0c55a2f6e8 100644 --- a/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs +++ b/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs @@ -43,4 +43,3 @@ public void CreateRequestDelegate() _driver.RunGeneratorsAndUpdateCompilation(_compilation, out var _, out var _); } } -} From e252d592c7585305d9f6bdbb43a48831346cdaa7 Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Wed, 23 Aug 2023 16:24:44 -0700 Subject: [PATCH 3/3] Add usings --- .../Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs b/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs index 9a0c55a2f6e8..cd94b967c1a7 100644 --- a/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs +++ b/src/Http/Http/perf/Microbenchmarks/RequestDelegateGeneratorBenchmarks.cs @@ -1,7 +1,11 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Text; using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Http.Generators.Tests; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.Text; namespace Microsoft.AspNetCore.Http.Microbenchmarks;