Skip to content

Commit f1aefb5

Browse files
Display correct default InvocationCount in SummaryTable, fixes #1929 (#1930)
1 parent c303ad1 commit f1aefb5

File tree

6 files changed

+65
-4
lines changed

6 files changed

+65
-4
lines changed

src/BenchmarkDotNet/Characteristics/CharacteristicObject.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,21 @@ public T ResolveValue<T>(Characteristic<T> characteristic, IResolver resolver)
159159
return resolver.Resolve(this, characteristic);
160160
}
161161

162+
public T ResolveValue<T>(Characteristic<T> characteristic, IResolver resolver, T defaultValue)
163+
{
164+
return resolver.Resolve(this, characteristic, defaultValue);
165+
}
166+
162167
public object ResolveValue(Characteristic characteristic, IResolver resolver)
163168
{
164169
return resolver.Resolve(this, characteristic);
165170
}
166171

172+
public object ResolveValue(Characteristic characteristic, IResolver resolver, object defaultValue)
173+
{
174+
return resolver.Resolve(this, characteristic, defaultValue);
175+
}
176+
167177
public T ResolveValue<T>(Characteristic<T> characteristic, T defaultValue)
168178
{
169179
return HasValue(characteristic) ? GetValue(characteristic) : (T)characteristic.ResolveValueCore(this, defaultValue);

src/BenchmarkDotNet/Characteristics/CompositeResolver.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public CompositeResolver(params IResolver[] resolvers)
1616

1717
public object Resolve(CharacteristicObject obj, Characteristic characteristic)
1818
{
19+
if (obj.HasValue(characteristic))
20+
return characteristic[obj];
21+
1922
var resolver = resolvers.FirstOrDefault(r => r.CanResolve(characteristic));
2023
if (resolver != null)
2124
return resolver.Resolve(obj, characteristic);
@@ -24,10 +27,35 @@ public object Resolve(CharacteristicObject obj, Characteristic characteristic)
2427

2528
public T Resolve<T>(CharacteristicObject obj, Characteristic<T> characteristic)
2629
{
30+
if (obj.HasValue(characteristic))
31+
return characteristic[obj];
32+
2733
var resolver = resolvers.FirstOrDefault(r => r.CanResolve(characteristic));
2834
if (resolver != null)
2935
return resolver.Resolve(obj, characteristic);
3036
throw new InvalidOperationException($"There is no default resolver for {characteristic.FullId}");
3137
}
38+
39+
public object Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue)
40+
{
41+
if (obj.HasValue(characteristic))
42+
return characteristic[obj];
43+
44+
var resolver = resolvers.FirstOrDefault(r => r.CanResolve(characteristic));
45+
if (resolver != null)
46+
return resolver.Resolve(obj, characteristic, defaultValue);
47+
return defaultValue;
48+
}
49+
50+
public T Resolve<T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue)
51+
{
52+
if (obj.HasValue(characteristic))
53+
return characteristic[obj];
54+
55+
var resolver = resolvers.FirstOrDefault(r => r.CanResolve(characteristic));
56+
if (resolver != null)
57+
return resolver.Resolve(obj, characteristic, defaultValue);
58+
return defaultValue;
59+
}
3260
}
3361
}

src/BenchmarkDotNet/Characteristics/IResolver.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@ public interface IResolver
1010
object Resolve(CharacteristicObject obj, Characteristic characteristic);
1111

1212
T Resolve<T>(CharacteristicObject obj, Characteristic<T> characteristic);
13+
14+
object Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue);
15+
16+
T Resolve<T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue);
1317
}
1418
}

src/BenchmarkDotNet/Characteristics/Resolver.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,27 @@ public T Resolve<T>(CharacteristicObject obj, Characteristic<T> characteristic)
3434
return (T)resolver(obj);
3535
throw new InvalidOperationException($"There is no default resolver for {characteristic.FullId}");
3636
}
37+
38+
public object Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue)
39+
{
40+
if (obj.HasValue(characteristic))
41+
return characteristic[obj];
42+
43+
if (resolvers.TryGetValue(characteristic, out var resolver))
44+
return resolver(obj);
45+
46+
return defaultValue;
47+
}
48+
49+
public T Resolve<T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue)
50+
{
51+
if (obj.HasValue(characteristic))
52+
return characteristic[obj];
53+
54+
if (resolvers.TryGetValue(characteristic, out var resolver))
55+
return (T)resolver(obj);
56+
57+
return defaultValue;
58+
}
3759
}
3860
}

src/BenchmarkDotNet/Engines/Engine.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ public class Engine : IEngine
3939
private int UnrollFactor { get; }
4040
private RunStrategy Strategy { get; }
4141
private bool EvaluateOverhead { get; }
42-
private int InvocationCount { get; }
4342
private bool MemoryRandomization { get; }
4443

4544
private readonly EnginePilotStage pilotStage;
@@ -78,7 +77,6 @@ internal Engine(
7877
UnrollFactor = targetJob.ResolveValue(RunMode.UnrollFactorCharacteristic, Resolver);
7978
Strategy = targetJob.ResolveValue(RunMode.RunStrategyCharacteristic, Resolver);
8079
EvaluateOverhead = targetJob.ResolveValue(AccuracyMode.EvaluateOverheadCharacteristic, Resolver);
81-
InvocationCount = targetJob.ResolveValue(RunMode.InvocationCountCharacteristic, Resolver);
8280
MemoryRandomization = targetJob.ResolveValue(RunMode.MemoryRandomizationCharacteristic, Resolver);
8381

8482
warmupStage = new EngineWarmupStage(this);
@@ -106,7 +104,7 @@ public void Dispose()
106104

107105
public RunResults Run()
108106
{
109-
long invokeCount = InvocationCount;
107+
long invokeCount = TargetJob.ResolveValue(RunMode.InvocationCountCharacteristic, Resolver, 1);
110108
IReadOnlyList<Measurement> idle = null;
111109

112110
if (EngineEventSource.Log.IsEnabled())

src/BenchmarkDotNet/Environments/EnvironmentResolver.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ private EnvironmentResolver()
3939
throw new NotSupportedException($"Unknown runStrategy: {strategy}");
4040
}
4141
});
42-
Register(RunMode.InvocationCountCharacteristic, () => 1);
4342
}
4443
}
4544
}

0 commit comments

Comments
 (0)