1
1
using BenchmarkDotNet . Configs ;
2
+ using BenchmarkDotNet . Loggers ;
2
3
using BenchmarkDotNet . Running ;
3
4
using BenchmarkDotNet . TestAdapter . Remoting ;
4
5
using Microsoft . VisualStudio . TestPlatform . ObjectModel ;
5
6
using System ;
6
7
using System . Collections . Generic ;
8
+ using System . Collections . Immutable ;
7
9
using System . Linq ;
10
+ using System . Reflection ;
8
11
using System . Threading ;
9
12
10
13
namespace BenchmarkDotNet . TestAdapter
@@ -14,6 +17,9 @@ namespace BenchmarkDotNet.TestAdapter
14
17
/// </summary>
15
18
internal class BenchmarkExecutor
16
19
{
20
+ // Gets FieldInfo of ImmutableConfig's loggers.
21
+ private static readonly FieldInfo ? loggersField = typeof ( ImmutableConfig ) . GetField ( "loggers" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
22
+
17
23
private readonly CancellationTokenSource cts = new ( ) ;
18
24
19
25
/// <summary>
@@ -64,10 +70,21 @@ public void RunBenchmarks(string assemblyPath, TestExecutionRecorderWrapper reco
64
70
65
71
// Modify all the benchmarks so that the event process and logger is added.
66
72
benchmarks = benchmarks
67
- . Select ( b => new BenchmarkRunInfo (
68
- b . BenchmarksCases ,
69
- b . Type ,
70
- b . Config . AddEventProcessor ( eventProcessor ) . AddLogger ( logger ) . CreateImmutableConfig ( ) ) )
73
+ . Select ( b =>
74
+ {
75
+ ImmutableConfig config = b . Config . AddEventProcessor ( eventProcessor ) . AddLogger ( logger ) . CreateImmutableConfig ( ) ;
76
+
77
+ // Remove console logger from ImmutableCofig to fix duplicated console logs are outputted issue.
78
+ if ( loggersField != null && loggersField . DeclaringType == typeof ( ImmutableHashSet ) )
79
+ {
80
+ var loggers = config . GetLoggers ( )
81
+ . Where ( x => x is not ConsoleLogger )
82
+ . ToImmutableHashSet ( ) ;
83
+ loggersField . SetValue ( config , loggers ) ;
84
+ }
85
+
86
+ return new BenchmarkRunInfo ( b . BenchmarksCases , b . Type , config ) ;
87
+ } )
71
88
. ToArray ( ) ;
72
89
73
90
// Run all the benchmarks, and ensure that any tests that don't have a result yet are sent.
0 commit comments