Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ bld/

# Visual Studio 2017 auto generated files
Generated\ Files/
**/*.Properties/launchSettings.json

# scenario intermediate directories
src/scenarios/*/pub
Expand Down
3 changes: 2 additions & 1 deletion src/benchmarks/micro/MicroBenchmarks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
<DebugSymbols>true</DebugSymbols>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<EnableXlfLocalization>false</EnableXlfLocalization>
<DefineConstants Condition=" '$(MSBuildFileVersion)' > '17.2.0.10401' AND $(NETCoreSdkVersion.StartsWith(7.0.100-preview))">$(DefineConstants);NET7_0_PREVIEW2_OR_GREATER</DefineConstants>
<DefineConstants Condition=" '$(MSBuildFileVersion)' &gt; '17.2.0.10401' AND $(NETCoreSdkVersion.StartsWith(7.0.100-preview))">$(DefineConstants);NET7_0_PREVIEW2_OR_GREATER</DefineConstants>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>
<!-- out-of-band packages that are not included in NetCoreApp have TFM-specific versions -->
<Choose>
Expand Down
3 changes: 3 additions & 0 deletions src/benchmarks/micro/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ static int Main(string[] args)
int? partitionIndex;
List<string> exclusionFilterValue;
List<string> categoryExclusionFilterValue;
Dictionary<string, object> parameterFilterValue;
bool getDiffableDisasm;

// Parse and remove any additional parameters that we need that aren't part of BDN
Expand All @@ -29,6 +30,7 @@ static int Main(string[] args)
argsList = CommandLineOptions.ParseAndRemoveIntParameter(argsList, "--partition-index", out partitionIndex);
argsList = CommandLineOptions.ParseAndRemoveStringsParameter(argsList, "--exclusion-filter", out exclusionFilterValue);
argsList = CommandLineOptions.ParseAndRemoveStringsParameter(argsList, "--category-exclusion-filter", out categoryExclusionFilterValue);
argsList = CommandLineOptions.ParseAndRemovePairsParameter(argsList, "--parameter-filter", out parameterFilterValue);
CommandLineOptions.ParseAndRemoveBooleanParameter(argsList, "--disasm-diff", out getDiffableDisasm);

CommandLineOptions.ValidatePartitionParameters(partitionCount, partitionIndex);
Expand All @@ -49,6 +51,7 @@ static int Main(string[] args)
partitionIndex: partitionIndex,
exclusionFilterValue: exclusionFilterValue,
categoryExclusionFilterValue: categoryExclusionFilterValue,
parameterFilterValue: parameterFilterValue,
getDiffableDisasm: getDiffableDisasm)
.AddValidator(new NoWasmValidator(Categories.NoWASM)))
.ToExitCode();
Expand Down
39 changes: 39 additions & 0 deletions src/harness/BenchmarkDotNet.Extensions/CommandLineOptions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Numerics;

namespace BenchmarkDotNet.Extensions
{
Expand Down Expand Up @@ -53,6 +54,44 @@ public static List<string> ParseAndRemoveStringsParameter(List<string> argsList,
return argsList;
}

public static List<string> ParseAndRemovePairsParameter(List<string> argsList, string parameter, out Dictionary<string, object> pairValues)
{
int parameterIndex = argsList.IndexOf(parameter);
pairValues = new Dictionary<string, object>();

if (parameterIndex + 1 < argsList.Count)
{
while (parameterIndex + 1 < argsList.Count && !argsList[parameterIndex + 1].StartsWith("-"))
{
string[] pair = argsList[parameterIndex + 1].Split(':');
object value;
int i_result;
bool b_result;
if (Int32.TryParse(pair[1], out i_result))
{
value = i_result;
}
else if (Boolean.TryParse(pair[1], out b_result))
{
value = b_result;
}
else
{
value = pair[1];
}
pairValues.Add(pair[0], value);
argsList.RemoveAt(parameterIndex + 1);
}
}
//We only want to remove the --exclusion-filter if it exists
if (parameterIndex != -1)
{
argsList.RemoveAt(parameterIndex);
}

return argsList;
}

public static void ParseAndRemoveBooleanParameter(List<string> argsList, string parameter, out bool parameterValue)
{
int parameterIndex = argsList.IndexOf(parameter);
Expand Down
30 changes: 30 additions & 0 deletions src/harness/BenchmarkDotNet.Extensions/ParameterFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using BenchmarkDotNet.Filters;
using BenchmarkDotNet.Parameters;
using BenchmarkDotNet.Running;
using System.Collections.Generic;
using System.Linq;

public class ParameterFilter : IFilter
{
private readonly Dictionary<string, object> _parameterValues;

public ParameterFilter(Dictionary<string, object> parameterValues)
{
_parameterValues = parameterValues;
}

public bool Predicate(BenchmarkCase benchmarkCase)
{
Dictionary<string, object> items = benchmarkCase.Parameters.Items.ToDictionary<ParameterInstance, string, object>(instance => instance.Name, instance => instance.Value);

foreach (string key in _parameterValues.Keys)
{
if (!items.Keys.Contains(key))
return false;
if (!items[key].Equals(_parameterValues[key]))
return false;
}

return true;
}
}
2 changes: 2 additions & 0 deletions src/harness/BenchmarkDotNet.Extensions/RecommendedConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public static IConfig Create(
int? partitionIndex = null,
List<string> exclusionFilterValue = null,
List<string> categoryExclusionFilterValue = null,
Dictionary<string, object> parameterFilterValue = null,
Job job = null,
bool getDiffableDisasm = false)
{
Expand Down Expand Up @@ -54,6 +55,7 @@ public static IConfig Create(
.AddFilter(new PartitionFilter(partitionCount, partitionIndex))
.AddFilter(new ExclusionFilter(exclusionFilterValue))
.AddFilter(new CategoryExclusionFilter(categoryExclusionFilterValue))
.AddFilter(new ParameterFilter(parameterFilterValue))
.AddExporter(JsonExporter.Full) // make sure we export to Json
.AddColumn(StatisticColumn.Median, StatisticColumn.Min, StatisticColumn.Max)
.AddValidator(TooManyTestCasesValidator.FailOnError)
Expand Down