# Image Processing Benchmark Runner # This script provides easy access to common benchmark scenarios param( [Parameter(Position=0)] [ValidateSet("all", "quick", "parallel", "chunks", "sizes", "stress", "help")] [string]$Scenario = "help", [switch]$Fast, [switch]$DetailedOutput ) $projectPath = "MaddoShared.Benchmarks" function Show-Help { Write-Host @" Image Processing Benchmark Runner ================================== Usage: .\run-benchmarks.ps1 [scenario] [-Fast] [-DetailedOutput] Scenarios: all - Run all benchmarks (60-120 minutes) quick - Fast test run for development (5-10 minutes) parallel - Test parallel processing strategies (20-30 minutes) chunks - Optimize chunk size (20-30 minutes) sizes - Test different image sizes (45-90 minutes) stress - Large-scale stress test (2-4 hours) help - Show this help message Flags: -Fast - Use dry run for faster but less accurate results -DetailedOutput - Show detailed output Examples: .\run-benchmarks.ps1 quick .\run-benchmarks.ps1 parallel -Fast .\run-benchmarks.ps1 stress -DetailedOutput Results will be saved to: MaddoShared.Benchmarks\BenchmarkDotNet.Artifacts\results\ "@ } function Run-Benchmark { param( [string]$Filter, [string]$Description ) Write-Host "`n========================================" -ForegroundColor Cyan Write-Host " $Description" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan $args = @("-c", "Release") if ($Filter) { $args += @("--", "--filter", $Filter) } # Note: We don't pass --job arguments anymore because they override # the InProcess toolchain configuration needed for Windows compatibility if ($Fast) { Write-Host "Note: Fast mode (-Fast) requested but not using --job dry" -ForegroundColor Yellow Write-Host "Reason: --job arguments override InProcess toolchain config" -ForegroundColor Yellow Write-Host "The benchmark will run with the default InProcessConfig settings.`n" -ForegroundColor Yellow } if ($DetailedOutput) { $args += "--verbosity", "detailed" } Push-Location $projectPath try { dotnet run @args } finally { Pop-Location } } # Main execution switch ($Scenario) { "help" { Show-Help } "all" { Write-Host "Running ALL benchmarks..." -ForegroundColor Yellow Write-Host "This will take 60-120 minutes. Press Ctrl+C to cancel.`n" -ForegroundColor Yellow Start-Sleep -Seconds 3 Run-Benchmark "" "All Benchmarks" } "quick" { Write-Host "Running QUICK test..." -ForegroundColor Green Run-Benchmark "*ImageProcessingBenchmarks*" "Quick Development Test" } "parallel" { Write-Host "Running PARALLEL processing benchmarks..." -ForegroundColor Green Run-Benchmark "*ImageProcessingBenchmarks*" "Parallel Processing Strategies" } "chunks" { Write-Host "Running CHUNK SIZE optimization..." -ForegroundColor Green Run-Benchmark "*ChunkSizeBenchmarks*" "Chunk Size Optimization" } "sizes" { Write-Host "Running IMAGE SIZE comparison..." -ForegroundColor Green Run-Benchmark "*ImageSizeBenchmarks*" "Image Size Impact Analysis" } "stress" { Write-Host "Running STRESS TEST..." -ForegroundColor Red Write-Host "WARNING: This will take 2-4 hours and use significant disk space!" -ForegroundColor Red Write-Host "Press Ctrl+C within 5 seconds to cancel...`n" -ForegroundColor Red Start-Sleep -Seconds 5 Run-Benchmark "*StressTestBenchmark*" "Large-Scale Stress Test" } } Write-Host "`nBenchmark execution complete!" -ForegroundColor Green Write-Host "Results saved to: $projectPath\BenchmarkDotNet.Artifacts\results\" -ForegroundColor Green