From 818e226c190e152284f3e3566b6d3f2b13c8098e Mon Sep 17 00:00:00 2001 From: filzrev <103790468+filzrev@users.noreply.github.com> Date: Sun, 22 Jun 2025 11:43:44 +0900 Subject: [PATCH 1/2] chore: fix issue that console logs are outputted twice when using testadapter --- src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs | 6 +++++- src/BenchmarkDotNet/Configs/ManualConfig.cs | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs b/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs index f1cd64f34e..ce343c72a2 100644 --- a/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs +++ b/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs @@ -1,4 +1,5 @@ using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Loggers; using BenchmarkDotNet.Running; using BenchmarkDotNet.TestAdapter.Remoting; using Microsoft.VisualStudio.TestPlatform.ObjectModel; @@ -67,7 +68,10 @@ public void RunBenchmarks(string assemblyPath, TestExecutionRecorderWrapper reco .Select(b => new BenchmarkRunInfo( b.BenchmarksCases, b.Type, - b.Config.AddEventProcessor(eventProcessor).AddLogger(logger).CreateImmutableConfig())) + b.Config.AddEventProcessor(eventProcessor) + .AddLogger(logger) + .RemoveLogger() // Console logs are also outputted by VSTestLogger. + .CreateImmutableConfig())) .ToArray(); // Run all the benchmarks, and ensure that any tests that don't have a result yet are sent. diff --git a/src/BenchmarkDotNet/Configs/ManualConfig.cs b/src/BenchmarkDotNet/Configs/ManualConfig.cs index cdfb64a234..4c9d944327 100644 --- a/src/BenchmarkDotNet/Configs/ManualConfig.cs +++ b/src/BenchmarkDotNet/Configs/ManualConfig.cs @@ -327,6 +327,14 @@ public static ManualConfig Union(IConfig globalConfig, IConfig localConfig) return manualConfig; } + internal ManualConfig RemoveLogger() + { + var filterdLoggers = loggers.Where(logger => logger is not T).ToArray(); + loggers.Clear(); + loggers.AddRange(filterdLoggers); + return this; + } + internal void RemoveAllJobs() => jobs.Clear(); internal void RemoveAllDiagnosers() => diagnosers.Clear(); From d68a7795bd9820287f3ce7367bbe3b6fa12f80dc Mon Sep 17 00:00:00 2001 From: filzrev <103790468+filzrev@users.noreply.github.com> Date: Sun, 22 Jun 2025 12:18:30 +0900 Subject: [PATCH 2/2] chore: fix code that are pointed out by code review --- src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs | 2 +- src/BenchmarkDotNet/Configs/ManualConfig.cs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs b/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs index ce343c72a2..dc3e7ee832 100644 --- a/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs +++ b/src/BenchmarkDotNet.TestAdapter/BenchmarkExecutor.cs @@ -70,7 +70,7 @@ public void RunBenchmarks(string assemblyPath, TestExecutionRecorderWrapper reco b.Type, b.Config.AddEventProcessor(eventProcessor) .AddLogger(logger) - .RemoveLogger() // Console logs are also outputted by VSTestLogger. + .RemoveLoggersOfType() // Console logs are also outputted by VSTestLogger. .CreateImmutableConfig())) .ToArray(); diff --git a/src/BenchmarkDotNet/Configs/ManualConfig.cs b/src/BenchmarkDotNet/Configs/ManualConfig.cs index 4c9d944327..4ececd28f1 100644 --- a/src/BenchmarkDotNet/Configs/ManualConfig.cs +++ b/src/BenchmarkDotNet/Configs/ManualConfig.cs @@ -327,11 +327,9 @@ public static ManualConfig Union(IConfig globalConfig, IConfig localConfig) return manualConfig; } - internal ManualConfig RemoveLogger() + internal ManualConfig RemoveLoggersOfType() { - var filterdLoggers = loggers.Where(logger => logger is not T).ToArray(); - loggers.Clear(); - loggers.AddRange(filterdLoggers); + loggers.RemoveAll(logger => logger is T); return this; }