diff --git a/src/BenchmarkDotNet/Loggers/SynchronousProcessOutputLoggerWithDiagnoser.cs b/src/BenchmarkDotNet/Loggers/SynchronousProcessOutputLoggerWithDiagnoser.cs index e9a9235f56..6ce058d9d6 100644 --- a/src/BenchmarkDotNet/Loggers/SynchronousProcessOutputLoggerWithDiagnoser.cs +++ b/src/BenchmarkDotNet/Loggers/SynchronousProcessOutputLoggerWithDiagnoser.cs @@ -15,11 +15,12 @@ internal class SynchronousProcessOutputLoggerWithDiagnoser private readonly IDiagnoser diagnoser; private readonly DiagnoserActionParameters diagnoserActionParameters; - public SynchronousProcessOutputLoggerWithDiagnoser(ILogger logger, Process process, IDiagnoser diagnoser, BenchmarkCase benchmarkCase, BenchmarkId benchmarkId) + public SynchronousProcessOutputLoggerWithDiagnoser(ILogger logger, Process process, IDiagnoser diagnoser, + BenchmarkCase benchmarkCase, BenchmarkId benchmarkId, bool noAcknowledgments) { if (!process.StartInfo.RedirectStandardOutput) throw new NotSupportedException("set RedirectStandardOutput to true first"); - if (!(process.StartInfo.RedirectStandardInput || benchmarkCase.GetRuntime() is WasmRuntime)) + if (!(process.StartInfo.RedirectStandardInput || benchmarkCase.GetRuntime() is WasmRuntime || noAcknowledgments)) throw new NotSupportedException("set RedirectStandardInput to true first"); this.logger = logger; diff --git a/src/BenchmarkDotNet/Toolchains/DotNetCli/DotNetCliExecutor.cs b/src/BenchmarkDotNet/Toolchains/DotNetCli/DotNetCliExecutor.cs index 1983bef312..282075db8e 100644 --- a/src/BenchmarkDotNet/Toolchains/DotNetCli/DotNetCliExecutor.cs +++ b/src/BenchmarkDotNet/Toolchains/DotNetCli/DotNetCliExecutor.cs @@ -43,7 +43,8 @@ public ExecuteResult Execute(ExecuteParameters executeParameters) executeParameters.Diagnoser, Path.GetFileName(executeParameters.BuildResult.ArtifactsPaths.ExecutablePath), executeParameters.Resolver, - executeParameters.LaunchIndex); + executeParameters.LaunchIndex, + executeParameters.BuildResult.NoAcknowledgments); } finally { @@ -60,13 +61,14 @@ private ExecuteResult Execute(BenchmarkCase benchmarkCase, IDiagnoser diagnoser, string executableName, IResolver resolver, - int launchIndex) + int launchIndex, + bool noAcknowledgments) { var startInfo = DotNetCliCommandExecutor.BuildStartInfo( CustomDotNetCliPath, artifactsPaths.BinariesDirectoryPath, $"{executableName.Escape()} {benchmarkId.ToArguments()}", - redirectStandardInput: true, + redirectStandardInput: !noAcknowledgments, redirectStandardError: false); // #1629 startInfo.SetEnvironmentVariables(benchmarkCase, resolver); @@ -74,7 +76,7 @@ private ExecuteResult Execute(BenchmarkCase benchmarkCase, using (var process = new Process { StartInfo = startInfo }) using (var consoleExitHandler = new ConsoleExitHandler(process, logger)) { - var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId); + var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId, noAcknowledgments); logger.WriteLineInfo($"// Execute: {process.StartInfo.FileName} {process.StartInfo.Arguments} in {process.StartInfo.WorkingDirectory}"); diff --git a/src/BenchmarkDotNet/Toolchains/Executor.cs b/src/BenchmarkDotNet/Toolchains/Executor.cs index 44b321929f..f88bc995dd 100644 --- a/src/BenchmarkDotNet/Toolchains/Executor.cs +++ b/src/BenchmarkDotNet/Toolchains/Executor.cs @@ -32,18 +32,18 @@ public ExecuteResult Execute(ExecuteParameters executeParameters) } return Execute(executeParameters.BenchmarkCase, executeParameters.BenchmarkId, executeParameters.Logger, executeParameters.BuildResult.ArtifactsPaths, - args, executeParameters.Diagnoser, executeParameters.Resolver, executeParameters.LaunchIndex); + args, executeParameters.Diagnoser, executeParameters.Resolver, executeParameters.LaunchIndex, executeParameters.BuildResult.NoAcknowledgments); } private ExecuteResult Execute(BenchmarkCase benchmarkCase, BenchmarkId benchmarkId, ILogger logger, ArtifactsPaths artifactsPaths, - string args, IDiagnoser diagnoser, IResolver resolver, int launchIndex) + string args, IDiagnoser diagnoser, IResolver resolver, int launchIndex, bool noAcknowledgments) { try { - using (var process = new Process { StartInfo = CreateStartInfo(benchmarkCase, artifactsPaths, args, resolver) }) + using (var process = new Process { StartInfo = CreateStartInfo(benchmarkCase, artifactsPaths, args, resolver, noAcknowledgments) }) using (var consoleExitHandler = new ConsoleExitHandler(process, logger)) { - var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId); + var loggerWithDiagnoser = new SynchronousProcessOutputLoggerWithDiagnoser(logger, process, diagnoser, benchmarkCase, benchmarkId, noAcknowledgments); diagnoser?.Handle(HostSignal.BeforeProcessStart, new DiagnoserActionParameters(process, benchmarkCase, benchmarkId)); @@ -89,13 +89,14 @@ private ExecuteResult Execute(Process process, BenchmarkCase benchmarkCase, Sync launchIndex); } - private ProcessStartInfo CreateStartInfo(BenchmarkCase benchmarkCase, ArtifactsPaths artifactsPaths, string args, IResolver resolver) + private ProcessStartInfo CreateStartInfo(BenchmarkCase benchmarkCase, ArtifactsPaths artifactsPaths, + string args, IResolver resolver, bool noAcknowledgments) { var start = new ProcessStartInfo { UseShellExecute = false, RedirectStandardOutput = true, - RedirectStandardInput = true, + RedirectStandardInput = !noAcknowledgments, RedirectStandardError = false, // #1629 CreateNoWindow = true, StandardOutputEncoding = Encoding.UTF8, // #1713 diff --git a/src/BenchmarkDotNet/Toolchains/GeneratorBase.cs b/src/BenchmarkDotNet/Toolchains/GeneratorBase.cs index 0d7ab30d7d..81ebf2100a 100644 --- a/src/BenchmarkDotNet/Toolchains/GeneratorBase.cs +++ b/src/BenchmarkDotNet/Toolchains/GeneratorBase.cs @@ -29,7 +29,7 @@ public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger log GenerateProject(buildPartition, artifactsPaths, logger); GenerateBuildScript(buildPartition, artifactsPaths); - return GenerateResult.Success(artifactsPaths, GetArtifactsToCleanup(artifactsPaths)); + return GenerateResult.Success(artifactsPaths, GetArtifactsToCleanup(artifactsPaths), buildPartition.NoAcknowledgments); } catch (Exception ex) { diff --git a/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitBuilder.cs b/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitBuilder.cs index f46f5c99b6..6381f709f7 100644 --- a/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitBuilder.cs +++ b/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitBuilder.cs @@ -29,7 +29,8 @@ public BuildResult Build(GenerateResult generateResult, BuildPartition buildPart return BuildResult.Success( GenerateResult.Success( new InProcessEmitArtifactsPath(assembly, generateResult.ArtifactsPaths), - generateResult.ArtifactsToCleanup)); + generateResult.ArtifactsToCleanup, + generateResult.NoAcknowledgments)); } } } \ No newline at end of file diff --git a/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitGenerator.cs b/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitGenerator.cs index c169c91903..8035f7854d 100644 --- a/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitGenerator.cs +++ b/src/BenchmarkDotNet/Toolchains/InProcess.Emit/InProcessEmitGenerator.cs @@ -20,7 +20,7 @@ public GenerateResult GenerateProject( { artifactsPaths = GetArtifactsPaths(buildPartition, rootArtifactsFolderPath); - return GenerateResult.Success(artifactsPaths, new List()); + return GenerateResult.Success(artifactsPaths, new List(), buildPartition.NoAcknowledgments); } catch (Exception ex) { diff --git a/src/BenchmarkDotNet/Toolchains/InProcess.NoEmit/InProcessNoEmitGenerator.cs b/src/BenchmarkDotNet/Toolchains/InProcess.NoEmit/InProcessNoEmitGenerator.cs index cd1b24dbf8..91ec5b89fe 100644 --- a/src/BenchmarkDotNet/Toolchains/InProcess.NoEmit/InProcessNoEmitGenerator.cs +++ b/src/BenchmarkDotNet/Toolchains/InProcess.NoEmit/InProcessNoEmitGenerator.cs @@ -13,6 +13,6 @@ public class InProcessNoEmitGenerator : IGenerator { /// returns a success public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger logger, string rootArtifactsFolderPath) - => GenerateResult.Success(null, Array.Empty()); + => GenerateResult.Success(null, Array.Empty(), buildPartition.NoAcknowledgments); } } \ No newline at end of file diff --git a/src/BenchmarkDotNet/Toolchains/InProcess/InProcessGenerator.cs b/src/BenchmarkDotNet/Toolchains/InProcess/InProcessGenerator.cs index ca9803df55..8a062e5ab7 100644 --- a/src/BenchmarkDotNet/Toolchains/InProcess/InProcessGenerator.cs +++ b/src/BenchmarkDotNet/Toolchains/InProcess/InProcessGenerator.cs @@ -13,6 +13,6 @@ public class InProcessGenerator : IGenerator { /// returns a success public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger logger, string rootArtifactsFolderPath) - => GenerateResult.Success(null, Array.Empty()); + => GenerateResult.Success(null, Array.Empty(), buildPartition.NoAcknowledgments); } } \ No newline at end of file diff --git a/src/BenchmarkDotNet/Toolchains/Results/BuildResult.cs b/src/BenchmarkDotNet/Toolchains/Results/BuildResult.cs index cf2b5729e5..ac1a460b3c 100644 --- a/src/BenchmarkDotNet/Toolchains/Results/BuildResult.cs +++ b/src/BenchmarkDotNet/Toolchains/Results/BuildResult.cs @@ -11,7 +11,7 @@ public class BuildResult : GenerateResult public string ErrorMessage { get; } private BuildResult(GenerateResult generateResult, bool isBuildSuccess, string errorMessage) - : base(generateResult.ArtifactsPaths, generateResult.IsGenerateSuccess, generateResult.GenerateException, generateResult.ArtifactsToCleanup) + : base(generateResult.ArtifactsPaths, generateResult.IsGenerateSuccess, generateResult.GenerateException, generateResult.ArtifactsToCleanup, generateResult.NoAcknowledgments) { IsBuildSuccess = isBuildSuccess; ErrorMessage = errorMessage; diff --git a/src/BenchmarkDotNet/Toolchains/Results/GenerateResult.cs b/src/BenchmarkDotNet/Toolchains/Results/GenerateResult.cs index 8222e5c491..23d4affa06 100644 --- a/src/BenchmarkDotNet/Toolchains/Results/GenerateResult.cs +++ b/src/BenchmarkDotNet/Toolchains/Results/GenerateResult.cs @@ -9,20 +9,23 @@ public class GenerateResult public bool IsGenerateSuccess { get; } public Exception GenerateException { get; } public IReadOnlyCollection ArtifactsToCleanup { get; } + public bool NoAcknowledgments { get; } - public GenerateResult(ArtifactsPaths artifactsPaths, bool isGenerateSuccess, Exception generateException, IReadOnlyCollection artifactsToCleanup) + public GenerateResult(ArtifactsPaths artifactsPaths, bool isGenerateSuccess, Exception generateException, + IReadOnlyCollection artifactsToCleanup, bool noAcknowledgments) { ArtifactsPaths = artifactsPaths; IsGenerateSuccess = isGenerateSuccess; GenerateException = generateException; ArtifactsToCleanup = artifactsToCleanup; + NoAcknowledgments = noAcknowledgments; } - public static GenerateResult Success(ArtifactsPaths artifactsPaths, IReadOnlyCollection artifactsToCleanup) - => new GenerateResult(artifactsPaths, true, null, artifactsToCleanup); + public static GenerateResult Success(ArtifactsPaths artifactsPaths, IReadOnlyCollection artifactsToCleanup, bool noAcknowledgments) + => new GenerateResult(artifactsPaths, true, null, artifactsToCleanup, noAcknowledgments); public static GenerateResult Failure(ArtifactsPaths artifactsPaths, IReadOnlyCollection artifactsToCleanup, Exception exception = null) - => new GenerateResult(artifactsPaths, false, exception, artifactsToCleanup); + => new GenerateResult(artifactsPaths, false, exception, artifactsToCleanup, false); public override string ToString() => "GenerateResult: " + (IsGenerateSuccess ? "Success" : "Fail"); } diff --git a/tests/BenchmarkDotNet.IntegrationTests/ToolchainTest.cs b/tests/BenchmarkDotNet.IntegrationTests/ToolchainTest.cs index 38cac6dfb5..262b0facac 100644 --- a/tests/BenchmarkDotNet.IntegrationTests/ToolchainTest.cs +++ b/tests/BenchmarkDotNet.IntegrationTests/ToolchainTest.cs @@ -25,7 +25,7 @@ public GenerateResult GenerateProject(BuildPartition buildPartition, ILogger log { logger.WriteLine("Generating"); Done = true; - return new GenerateResult(null, true, null, Array.Empty()); + return new GenerateResult(null, true, null, Array.Empty(), false); } } diff --git a/tests/BenchmarkDotNet.Tests/BuildResultTests.cs b/tests/BenchmarkDotNet.Tests/BuildResultTests.cs index a3e829fa75..c90467a645 100644 --- a/tests/BenchmarkDotNet.Tests/BuildResultTests.cs +++ b/tests/BenchmarkDotNet.Tests/BuildResultTests.cs @@ -54,7 +54,7 @@ public void UnknownMSBuildErrorsAreNotTranslatedToMoreUserFriendlyVersions() [AssertionMethod] private void Verify(string msbuildError, bool expectedResult, string expectedReason) { - var sut = BuildResult.Failure(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty()), msbuildError); + var sut = BuildResult.Failure(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty(), false), msbuildError); Assert.Equal(expectedResult, sut.TryToExplainFailureReason(out string reason)); Assert.Equal(expectedReason, reason); diff --git a/tests/BenchmarkDotNet.Tests/Mocks/MockFactory.cs b/tests/BenchmarkDotNet.Tests/Mocks/MockFactory.cs index c0b8d4df9a..db5df48da2 100644 --- a/tests/BenchmarkDotNet.Tests/Mocks/MockFactory.cs +++ b/tests/BenchmarkDotNet.Tests/Mocks/MockFactory.cs @@ -63,7 +63,7 @@ private static BenchmarkCase[] CreateBenchmarks(IConfig config) private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int n, double nanoseconds) { - var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty())); + var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty(), false)); var measurements = Enumerable.Range(0, n) .Select(index => new Measurement(1, IterationMode.Workload, IterationStage.Result, index + 1, 1, nanoseconds + index).ToString()) .ToList(); @@ -73,7 +73,7 @@ private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int n, private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, bool hugeSd, Metric[] metrics) { - var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty())); + var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty(), false)); bool isFoo = benchmarkCase.Descriptor.WorkloadMethodDisplayInfo == "Foo"; bool isBar = benchmarkCase.Descriptor.WorkloadMethodDisplayInfo == "Bar"; var measurements = new List diff --git a/tests/BenchmarkDotNet.Tests/Reports/RatioPrecisionTests.cs b/tests/BenchmarkDotNet.Tests/Reports/RatioPrecisionTests.cs index 3f17980a2b..d2c7d3e289 100644 --- a/tests/BenchmarkDotNet.Tests/Reports/RatioPrecisionTests.cs +++ b/tests/BenchmarkDotNet.Tests/Reports/RatioPrecisionTests.cs @@ -80,7 +80,7 @@ private Summary CreateSummary(int[] values) private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int measurementValue) { - var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty())); + var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty(), false)); var measurements = new List { new Measurement(1, IterationMode.Workload, IterationStage.Result, 1, 1, measurementValue), diff --git a/tests/BenchmarkDotNet.Tests/Reports/RatioStyleTests.cs b/tests/BenchmarkDotNet.Tests/Reports/RatioStyleTests.cs index 05ddf703bd..ecc62a2a0c 100644 --- a/tests/BenchmarkDotNet.Tests/Reports/RatioStyleTests.cs +++ b/tests/BenchmarkDotNet.Tests/Reports/RatioStyleTests.cs @@ -101,7 +101,7 @@ private Summary CreateSummary(int[] values, RatioStyle ratioStyle, int noise) private static BenchmarkReport CreateReport(BenchmarkCase benchmarkCase, int measurementValue, int noise) { - var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty())); + var buildResult = BuildResult.Success(GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty(), false)); var measurements = new List { new Measurement(1, IterationMode.Workload, IterationStage.Result, 1, 1, measurementValue), diff --git a/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs b/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs index b70618f20a..336d9286d6 100644 --- a/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs +++ b/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs @@ -64,7 +64,7 @@ private static BenchmarkReport CreateFailureReport(BenchmarkCase benchmark) private static BenchmarkReport CreateSuccessReport(BenchmarkCase benchmark) { - GenerateResult generateResult = GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty()); + GenerateResult generateResult = GenerateResult.Success(ArtifactsPaths.Empty, Array.Empty(), false); BuildResult buildResult = BuildResult.Success(generateResult); var metrics = new[] { new Metric(new FakeMetricDescriptor(), Math.E) }; return new BenchmarkReport(true, benchmark, generateResult, buildResult, Array.Empty(), metrics);