Skip to content

Commit 975a0e0

Browse files
Fix crash when using HardwareCounter.NotSet (#2124)
* Skip HardwareCounter.NotSet * Add test
1 parent b846d57 commit 975a0e0

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/BenchmarkDotNet/Configs/ImmutableConfigBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static ImmutableConfig Create(IConfig source)
4040
var uniqueLoggers = source.GetLoggers().ToImmutableHashSet();
4141
var configAnalyse = new List<Conclusion>();
4242

43-
var uniqueHardwareCounters = source.GetHardwareCounters().ToImmutableHashSet();
43+
var uniqueHardwareCounters = source.GetHardwareCounters().Where(counter => counter != HardwareCounter.NotSet).ToImmutableHashSet();
4444
var uniqueDiagnosers = GetDiagnosers(source.GetDiagnosers(), uniqueHardwareCounters);
4545
var uniqueExporters = GetExporters(source.GetExporters(), uniqueDiagnosers, configAnalyse);
4646
var uniqueAnalyzers = GetAnalysers(source.GetAnalysers(), uniqueDiagnosers);

tests/BenchmarkDotNet.Tests/Configs/ImmutableConfigTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,20 @@ public void DuplicateHardwareCountersAreExcluded()
7171
Assert.Equal(HardwareCounter.CacheMisses, final.GetHardwareCounters().Single());
7272
}
7373

74+
[Fact]
75+
public void NoSetHardwareCounterIsExcluded()
76+
{
77+
var mutable = ManualConfig.CreateEmpty();
78+
79+
mutable.AddHardwareCounters(HardwareCounter.NotSet);
80+
mutable.AddHardwareCounters(HardwareCounter.CacheMisses);
81+
82+
var final = ImmutableConfigBuilder.Create(mutable);
83+
84+
Assert.Single(final.GetHardwareCounters());
85+
Assert.Equal(HardwareCounter.CacheMisses, final.GetHardwareCounters().Single());
86+
}
87+
7488
[FactClassicDotNetOnly(skipReason: "We have hardware counters diagnosers only for Windows. This test is disabled for .NET Core because NativeAOT compiler goes crazy when some dependency has reference to TraceEvent...")]
7589
public void WhenUserDefinesHardwareCountersWeChooseTheRightDiagnoser()
7690
{

0 commit comments

Comments
 (0)