@@ -14,6 +14,7 @@ namespace BenchmarkDotNet.IntegrationTests.Diagnosers;
1414public abstract class BaseMockInProcessDiagnoser : IInProcessDiagnoser
1515{
1616 public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
17+ public Dictionary < BenchmarkCase , List < BenchmarkSignal > > HandlerSignals { get ; } = [ ] ;
1718
1819 public abstract string DiagnoserName { get ; }
1920 public abstract RunMode DiagnoserRunMode { get ; }
@@ -42,17 +43,29 @@ public void Handle(HostSignal signal, DiagnoserActionParameters parameters) { }
4243 var ( handlerType , serializedConfig ) = GetSeparateProcessHandlerTypeAndSerializedConfig ( benchmarkCase ) ;
4344 if ( handlerType == null )
4445 return null ;
45- var handler = ( IInProcessDiagnoserHandler ) Activator . CreateInstance ( handlerType ) ;
46+ var handler = ( BaseMockInProcessDiagnoserHandler ) Activator . CreateInstance ( handlerType ) ;
4647 handler . Initialize ( serializedConfig ) ;
48+ handler . SetDiagnoser ( this , benchmarkCase ) ;
4749 return handler ;
4850 }
4951
5052 public void DeserializeResults ( BenchmarkCase benchmarkCase , string results ) => Results . Add ( benchmarkCase , results ) ;
53+
54+ internal void RecordSignal ( BenchmarkCase benchmarkCase , BenchmarkSignal signal )
55+ {
56+ if ( ! HandlerSignals . ContainsKey ( benchmarkCase ) )
57+ {
58+ HandlerSignals [ benchmarkCase ] = [ ] ;
59+ }
60+ HandlerSignals [ benchmarkCase ] . Add ( signal ) ;
61+ }
5162}
5263
5364public abstract class BaseMockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
5465{
5566 private string _result ;
67+ private BaseMockInProcessDiagnoser _diagnoser ;
68+ private BenchmarkCase _benchmarkCase ;
5669
5770 protected BaseMockInProcessDiagnoserHandler ( ) { }
5871
@@ -61,7 +74,16 @@ public void Initialize(string? serializedConfig)
6174 _result = serializedConfig ?? string . Empty ;
6275 }
6376
64- public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args ) { }
77+ internal void SetDiagnoser ( BaseMockInProcessDiagnoser diagnoser , BenchmarkCase benchmarkCase )
78+ {
79+ _diagnoser = diagnoser ;
80+ _benchmarkCase = benchmarkCase ;
81+ }
82+
83+ public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args )
84+ {
85+ _diagnoser ? . RecordSignal ( _benchmarkCase , signal ) ;
86+ }
6587
6688 public string SerializeResults ( ) => _result ;
6789}
0 commit comments