using BenchmarkDotNet.Columns;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Engines;
using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Exporters.Csv;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Toolchains.InProcess.Emit;
namespace MaddoShared.Benchmarks;
///
/// InProcess configuration for benchmarks requiring Windows-specific APIs
/// This avoids the net10.0-windows vs net10.0 compatibility issue
///
public class InProcessConfig : ManualConfig
{
public InProcessConfig()
{
AddLogger(ConsoleLogger.Default);
AddExporter(HtmlExporter.Default);
AddExporter(MarkdownExporter.GitHub);
AddExporter(CsvExporter.Default);
AddDiagnoser(MemoryDiagnoser.Default);
// Add job with InProcess toolchain
AddJob(Job.Default
.WithToolchain(InProcessEmitToolchain.Instance)
.WithWarmupCount(1)
.WithIterationCount(3));
// Configuration options
WithOptions(ConfigOptions.DisableOptimizationsValidator);
WithOptions(ConfigOptions.KeepBenchmarkFiles);
}
}
///
/// Custom configuration for image processing benchmarks
/// Uses InProcess toolchain to avoid net10.0-windows compatibility issues
///
public class BenchmarkConfig : ManualConfig
{
public BenchmarkConfig()
{
// Add console logger
AddLogger(ConsoleLogger.Default);
// Add exporters for different formats
AddExporter(HtmlExporter.Default);
AddExporter(MarkdownExporter.GitHub);
AddExporter(CsvExporter.Default);
AddExporter(RPlotExporter.Default);
// Add diagnosers
AddDiagnoser(MemoryDiagnoser.Default);
AddDiagnoser(ThreadingDiagnoser.Default);
// Add columns
AddColumn(StatisticColumn.Mean);
AddColumn(StatisticColumn.StdDev);
AddColumn(StatisticColumn.Error);
AddColumn(StatisticColumn.Min);
AddColumn(StatisticColumn.Max);
AddColumn(StatisticColumn.Median);
AddColumn(BaselineRatioColumn.RatioMean);
// Customize jobs with InProcess toolchain for Windows compatibility
AddJob(Job.Default
.WithToolchain(InProcessEmitToolchain.Instance)
.WithWarmupCount(1)
.WithIterationCount(3)
.WithId("Quick"));
AddJob(Job.Default
.WithToolchain(InProcessEmitToolchain.Instance)
.WithWarmupCount(2)
.WithIterationCount(5)
.WithId("Standard"));
}
///
/// Fast configuration for development and quick tests
///
public static IConfig Fast => new ManualConfig()
.AddLogger(ConsoleLogger.Default)
.AddExporter(MarkdownExporter.GitHub)
.AddDiagnoser(MemoryDiagnoser.Default)
.AddJob(Job.Dry.WithToolchain(InProcessEmitToolchain.Instance)); // Very fast, but less accurate
}