Skip to content

Commit 010ac21

Browse files
authored
don't redirect standard input and don't write Acknowledgment to it if acknowledgments are not needed (#1958)
1 parent 6fa3339 commit 010ac21

File tree

16 files changed

+37
-29
lines changed

16 files changed

+37
-29
lines changed

src/BenchmarkDotNet/Loggers/SynchronousProcessOutputLoggerWithDiagnoser.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ internal class SynchronousProcessOutputLoggerWithDiagnoser
1515
private readonly IDiagnoser diagnoser;
1616
private readonly DiagnoserActionParameters diagnoserActionParameters;
1717

18-
public SynchronousProcessOutputLoggerWithDiagnoser(ILogger logger, Process process, IDiagnoser diagnoser, BenchmarkCase benchmarkCase, BenchmarkId benchmarkId)
18+
public SynchronousProcessOutputLoggerWithDiagnoser(ILogger logger, Process process, IDiagnoser diagnoser,
19+
BenchmarkCase benchmarkCase, BenchmarkId benchmarkId, bool noAcknowledgments)
1920
{
2021
if (!process.StartInfo.RedirectStandardOutput)
2122
throw new NotSupportedException("set RedirectStandardOutput to true first");
22-
if (!(process.StartInfo.RedirectStandardInput || benchmarkCase.GetRuntime() is WasmRuntime))
23+
if (!(process.StartInfo.RedirectStandardInput || benchmarkCase.GetRuntime() is WasmRuntime || noAcknowledgments))
2324
throw new NotSupportedException("set RedirectStandardInput to true first");
2425

2526
this.logger = logger;

src/BenchmarkDotNet/Toolchains/DotNetCli/DotNetCliExecutor.cs

+6-4
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ public ExecuteResult Execute(ExecuteParameters executeParameters)
4343
executeParameters.Diagnoser,
4444
Path.GetFileName(executeParameters.BuildResult.ArtifactsPaths.ExecutablePath),
4545
executeParameters.Resolver,
46-
executeParameters.LaunchIndex);
46+
executeParameters.LaunchIndex,
47+
executeParameters.BuildResult.NoAcknowledgments);
4748
}
4849
finally
4950
{
@@ -60,21 +61,22 @@ private ExecuteResult Execute(BenchmarkCase benchmarkCase,
6061
IDiagnoser diagnoser,
6162
string executableName,
6263
IResolver resolver,
63-
int launchIndex)
64+
int launchIndex,
65+
bool noAcknowledgments)
6466
{
6567
var startInfo = DotNetCliCommandExecutor.BuildStartInfo(
6668
CustomDotNetCliPath,
6769
artifactsPaths.BinariesDirectoryPath,
6870
$"{executableName.Escape()} {benchmarkId.ToArguments()}",
69-
redirectStandardInput: true,
71+
redirectStandardInput: !noAcknowledgments,
7072
redirectStandardError: false); // #1629
7173

7274
startInfo.SetEnvironmentVariables(benchmarkCase, resolver);
7375

7476
using (var process = new Process { StartInfo = startInfo })
7577
using (var consoleExitHandler = new ConsoleExitHandler(process, logger))
7678
{
77-
var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId);
79+
var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId, noAcknowledgments);
7880

7981
logger.WriteLineInfo($"// Execute: {process.StartInfo.FileName} {process.StartInfo.Arguments} in {process.StartInfo.WorkingDirectory}");
8082

src/BenchmarkDotNet/Toolchains/Executor.cs

+7-6
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@ public ExecuteResult Execute(ExecuteParameters executeParameters)
3232
}
3333

3434
return Execute(executeParameters.BenchmarkCase, executeParameters.BenchmarkId, executeParameters.Logger, executeParameters.BuildResult.ArtifactsPaths,
35-
args, executeParameters.Diagnoser, executeParameters.Resolver, executeParameters.LaunchIndex);
35+
args, executeParameters.Diagnoser, executeParameters.Resolver, executeParameters.LaunchIndex, executeParameters.BuildResult.NoAcknowledgments);
3636
}
3737

3838
private ExecuteResult Execute(BenchmarkCase benchmarkCase, BenchmarkId benchmarkId, ILogger logger, ArtifactsPaths artifactsPaths,
39-
string args, IDiagnoser diagnoser, IResolver resolver, int launchIndex)
39+
string args, IDiagnoser diagnoser, IResolver resolver, int launchIndex, bool noAcknowledgments)
4040
{
4141
try
4242
{
43-
using (var process = new Process { StartInfo = CreateStartInfo(benchmarkCase, artifactsPaths, args, resolver) })
43+
using (var process = new Process { StartInfo = CreateStartInfo(benchmarkCase, artifactsPaths, args, resolver, noAcknowledgments) })
4444
using (var consoleExitHandler = new ConsoleExitHandler(process, logger))
4545
{
46-
var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId);
46+
var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId, noAcknowledgments);
4747

4848
diagnoser?.Handle(HostSignal.BeforeProcessStart, new DiagnoserActionParameters(process, benchmarkCase, benchmarkId));
4949

@@ -89,13 +89,14 @@ private ExecuteResult Execute(Process process, BenchmarkCase benchmarkCase, Sync
8989
launchIndex);
9090
}
9191

92-
private ProcessStartInfo CreateStartInfo(BenchmarkCase benchmarkCase, ArtifactsPaths artifactsPaths, string args, IResolver resolver)
92+
private ProcessStartInfo CreateStartInfo(BenchmarkCase benchmarkCase, ArtifactsPaths artifactsPaths,
93+
string args, IResolver resolver, bool noAcknowledgments)
9394
{
9495
var start = new ProcessStartInfo
9596
{
9697
UseShellExecute = false,
9798
RedirectStandardOutput = true,
98-
RedirectStandardInput = true,
99+
RedirectStandardInput = !noAcknowledgments,
99100
RedirectStandardError = false, // #1629
100101
CreateNoWindow = true,
101102
StandardOutputEncoding = Encoding.UTF8, // #1713

src/BenchmarkDotNet/Toolchains/GeneratorBase.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger log
2929
GenerateProject(buildPartition, artifactsPaths, logger);
3030
GenerateBuildScript(buildPartition, artifactsPaths);
3131

32-
return GenerateResult.Success(artifactsPaths, GetArtifactsToCleanup(artifactsPaths));
32+
return GenerateResult.Success(artifactsPaths, GetArtifactsToCleanup(artifactsPaths), buildPartition.NoAcknowledgments);
3333
}
3434
catch (Exception ex)
3535
{

src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitBuilder.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public BuildResult Build(GenerateResult generateResult, BuildPartition buildPart
2929
return BuildResult.Success(
3030
GenerateResult.Success(
3131
new InProcessEmitArtifactsPath(assembly, generateResult.ArtifactsPaths),
32-
generateResult.ArtifactsToCleanup));
32+
generateResult.ArtifactsToCleanup,
33+
generateResult.NoAcknowledgments));
3334
}
3435
}
3536
}

src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitGenerator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public GenerateResult GenerateProject(
2020
{
2121
artifactsPaths = GetArtifactsPaths(buildPartition, rootArtifactsFolderPath);
2222

23-
return GenerateResult.Success(artifactsPaths, new List<string>());
23+
return GenerateResult.Success(artifactsPaths, new List<string>(), buildPartition.NoAcknowledgments);
2424
}
2525
catch (Exception ex)
2626
{

src/BenchmarkDotNet/Toolchains/InProcess.NoEmit/InProcessNoEmitGenerator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public class InProcessNoEmitGenerator : IGenerator
1313
{
1414
/// <summary>returns a success</summary>
1515
public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger logger, string rootArtifactsFolderPath)
16-
=> GenerateResult.Success(null, Array.Empty<string>());
16+
=> GenerateResult.Success(null, Array.Empty<string>(), buildPartition.NoAcknowledgments);
1717
}
1818
}

src/BenchmarkDotNet/Toolchains/InProcess/InProcessGenerator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public class InProcessGenerator : IGenerator
1313
{
1414
/// <summary>returns a success</summary>
1515
public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger logger, string rootArtifactsFolderPath)
16-
=> GenerateResult.Success(null, Array.Empty<string>());
16+
=> GenerateResult.Success(null, Array.Empty<string>(), buildPartition.NoAcknowledgments);
1717
}
1818
}

src/BenchmarkDotNet/Toolchains/Results/BuildResult.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class BuildResult : GenerateResult
1111
public string ErrorMessage { get; }
1212

1313
private BuildResult(GenerateResult generateResult, bool isBuildSuccess, string errorMessage)
14-
: base(generateResult.ArtifactsPaths, generateResult.IsGenerateSuccess, generateResult.GenerateException, generateResult.ArtifactsToCleanup)
14+
: base(generateResult.ArtifactsPaths, generateResult.IsGenerateSuccess, generateResult.GenerateException, generateResult.ArtifactsToCleanup, generateResult.NoAcknowledgments)
1515
{
1616
IsBuildSuccess = isBuildSuccess;
1717
ErrorMessage = errorMessage;

src/BenchmarkDotNet/Toolchains/Results/GenerateResult.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,23 @@ public class GenerateResult
99
public bool IsGenerateSuccess { get; }
1010
public Exception GenerateException { get; }
1111
public IReadOnlyCollection<string> ArtifactsToCleanup { get; }
12+
public bool NoAcknowledgments { get; }
1213

13-
public GenerateResult(ArtifactsPaths artifactsPaths, bool isGenerateSuccess, Exception generateException, IReadOnlyCollection<string> artifactsToCleanup)
14+
public GenerateResult(ArtifactsPaths artifactsPaths, bool isGenerateSuccess, Exception generateException,
15+
IReadOnlyCollection<string> artifactsToCleanup, bool noAcknowledgments)
1416
{
1517
ArtifactsPaths = artifactsPaths;
1618
IsGenerateSuccess = isGenerateSuccess;
1719
GenerateException = generateException;
1820
ArtifactsToCleanup = artifactsToCleanup;
21+
NoAcknowledgments = noAcknowledgments;
1922
}
2023

21-
public static GenerateResult Success(ArtifactsPaths artifactsPaths, IReadOnlyCollection<string> artifactsToCleanup)
22-
=> new GenerateResult(artifactsPaths, true, null, artifactsToCleanup);
24+
public static GenerateResult Success(ArtifactsPaths artifactsPaths, IReadOnlyCollection<string> artifactsToCleanup, bool noAcknowledgments)
25+
=> new GenerateResult(artifactsPaths, true, null, artifactsToCleanup, noAcknowledgments);
2326

2427
public static GenerateResult Failure(ArtifactsPaths artifactsPaths, IReadOnlyCollection<string> artifactsToCleanup, Exception exception = null)
25-
=> new GenerateResult(artifactsPaths, false, exception, artifactsToCleanup);
28+
=> new GenerateResult(artifactsPaths, false, exception, artifactsToCleanup, false);
2629

2730
public override string ToString() => "GenerateResult: " + (IsGenerateSuccess ? "Success" : "Fail");
2831
}

tests/BenchmarkDotNet.IntegrationTests/ToolchainTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger log
2525
{
2626
logger.WriteLine("Generating");
2727
Done = true;
28-
return new GenerateResult(null, true, null, Array.Empty<string>());
28+
return new GenerateResult(null, true, null, Array.Empty<string>(), false);
2929
}
3030
}
3131

tests/BenchmarkDotNet.Tests/BuildResultTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void UnknownMSBuildErrorsAreNotTranslatedToMoreUserFriendlyVersions()
5454
[AssertionMethod]
5555
private void Verify(string msbuildError, bool expectedResult, string expectedReason)
5656
{
57-
var sut = BuildResult.Failure(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>()), msbuildError);
57+
var sut = BuildResult.Failure(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>(), false), msbuildError);
5858

5959
Assert.Equal(expectedResult, sut.TryToExplainFailureReason(out string reason));
6060
Assert.Equal(expectedReason, reason);

tests/BenchmarkDotNet.Tests/Mocks/MockFactory.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private static BenchmarkCase[] CreateBenchmarks<TBenchmarks>(IConfig config)
6363

6464
private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int n, double nanoseconds)
6565
{
66-
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>()));
66+
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>(), false));
6767
var measurements = Enumerable.Range(0, n)
6868
.Select(index => new Measurement(1, IterationMode.Workload, IterationStage.Result, index + 1, 1, nanoseconds + index).ToString())
6969
.ToList();
@@ -73,7 +73,7 @@ private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int n,
7373

7474
private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, bool hugeSd, Metric[] metrics)
7575
{
76-
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>()));
76+
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>(), false));
7777
bool isFoo = benchmarkCase.Descriptor.WorkloadMethodDisplayInfo == "Foo";
7878
bool isBar = benchmarkCase.Descriptor.WorkloadMethodDisplayInfo == "Bar";
7979
var measurements = new List<Measurement>

tests/BenchmarkDotNet.Tests/Reports/RatioPrecisionTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private Summary CreateSummary(int[] values)
8080

8181
private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int measurementValue)
8282
{
83-
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>()));
83+
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>(), false));
8484
var measurements = new List<Measurement>
8585
{
8686
new Measurement(1, IterationMode.Workload, IterationStage.Result, 1, 1, measurementValue),

tests/BenchmarkDotNet.Tests/Reports/RatioStyleTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ private Summary CreateSummary(int[] values, RatioStyle ratioStyle, int noise)
101101

102102
private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int measurementValue, int noise)
103103
{
104-
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>()));
104+
var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>(), false));
105105
var measurements = new List<Measurement>
106106
{
107107
new Measurement(1, IterationMode.Workload, IterationStage.Result, 1, 1, measurementValue),

tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private static BenchmarkReport CreateFailureReport(BenchmarkCase benchmark)
6464

6565
private static BenchmarkReport CreateSuccessReport(BenchmarkCase benchmark)
6666
{
67-
GenerateResult generateResult = GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>());
67+
GenerateResult generateResult = GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty<string>(), false);
6868
BuildResult buildResult = BuildResult.Success(generateResult);
6969
var metrics = new[] { new Metric(new FakeMetricDescriptor(), Math.E) };
7070
return new BenchmarkReport(true, benchmark, generateResult, buildResult, Array.Empty<ExecuteResult>(), metrics);

0 commit comments

Comments
 (0)