mirror of https://github.com/SixLabors/ImageSharp
6 changed files with 153 additions and 106 deletions
@ -0,0 +1,72 @@ |
|||
// Copyright (c) Six Labors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using BenchmarkDotNet.Attributes; |
|||
|
|||
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave |
|||
{ |
|||
[MemoryDiagnoser] |
|||
[ShortRunJob] |
|||
public class LoadResizeSaveStressBenchmarks |
|||
{ |
|||
private LoadResizeSaveStressRunner runner; |
|||
|
|||
[GlobalSetup] |
|||
public void Setup() |
|||
{ |
|||
this.runner = new LoadResizeSaveStressRunner() { ImageCount = Environment.ProcessorCount }; |
|||
Console.WriteLine("ImageCount:" + this.runner.ImageCount); |
|||
this.runner.Init(); |
|||
} |
|||
|
|||
private void ForEachImage(Action<string> action, int maxDegreeOfParallelism) |
|||
{ |
|||
this.runner.MaxDegreeOfParallelism = maxDegreeOfParallelism; |
|||
this.runner.ForEachImageParallel(action); |
|||
} |
|||
|
|||
public int[] ParallelismValues { get; } = |
|||
{ |
|||
Environment.ProcessorCount, |
|||
Environment.ProcessorCount / 2, |
|||
Environment.ProcessorCount / 4, |
|||
1 |
|||
}; |
|||
|
|||
[Benchmark(Baseline = true)] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void SystemDrawing(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SystemDrawingResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void ImageSharp(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.ImageSharpResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void Magick(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagickResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void FreeImage(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.FreeImageResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void MagicScaler(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagicScalerResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void SkiaCanvas(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SkiaCanvasResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void SkiaBitmap(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SkiaBitmapResize, maxDegreeOfParallelism); |
|||
|
|||
[Benchmark] |
|||
[ArgumentsSource(nameof(ParallelismValues))] |
|||
public void NetVips(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.NetVipsResize, maxDegreeOfParallelism); |
|||
} |
|||
} |
|||
@ -1,52 +0,0 @@ |
|||
// Copyright (c) Six Labors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using BenchmarkDotNet.Attributes; |
|||
|
|||
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave |
|||
{ |
|||
public class LoadResizeSaveStress_NonParallel |
|||
{ |
|||
private LoadResizeSaveStressRunner benchmarks; |
|||
|
|||
[GlobalSetup] |
|||
public void Setup() |
|||
{ |
|||
this.benchmarks = new LoadResizeSaveStressRunner() { ImageCount = 20 }; |
|||
this.benchmarks.Init(); |
|||
} |
|||
|
|||
private void ForEachImage(Action<string> action) |
|||
{ |
|||
foreach (string image in this.benchmarks.Images) |
|||
{ |
|||
action(image); |
|||
} |
|||
} |
|||
|
|||
[Benchmark(Baseline = true, Description = "System.Drawing Load, Resize, Save")] |
|||
public void SystemDrawingBenchmark() => this.ForEachImage(this.benchmarks.SystemDrawingResize); |
|||
|
|||
[Benchmark(Description = "ImageSharp Load, Resize, Save")] |
|||
public void ImageSharpBenchmark() => this.ForEachImage(this.benchmarks.ImageSharpResize); |
|||
|
|||
[Benchmark(Description = "ImageMagick Load, Resize, Save")] |
|||
public void MagickBenchmark() => this.ForEachImage(this.benchmarks.MagickResize); |
|||
|
|||
[Benchmark(Description = "ImageFree Load, Resize, Save")] |
|||
public void FreeImageBenchmark() => this.ForEachImage(this.benchmarks.FreeImageResize); |
|||
|
|||
[Benchmark(Description = "MagicScaler Load, Resize, Save")] |
|||
public void MagicScalerBenchmark() => this.ForEachImage(this.benchmarks.MagicScalerResize); |
|||
|
|||
[Benchmark(Description = "SkiaSharp Canvas Load, Resize, Save")] |
|||
public void SkiaCanvasBenchmark() => this.ForEachImage(this.benchmarks.SkiaCanvasResize); |
|||
|
|||
[Benchmark(Description = "SkiaSharp Bitmap Load, Resize, Save")] |
|||
public void SkiaBitmapBenchmark() => this.ForEachImage(this.benchmarks.SkiaBitmapResize); |
|||
|
|||
[Benchmark(Description = "NetVips Load, Resize, Save")] |
|||
public void NetVipsBenchmark() => this.ForEachImage(this.benchmarks.NetVipsResize); |
|||
} |
|||
} |
|||
@ -1,48 +0,0 @@ |
|||
// Copyright (c) Six Labors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using BenchmarkDotNet.Attributes; |
|||
|
|||
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave |
|||
{ |
|||
[MemoryDiagnoser] |
|||
public class LoadResizeSaveStress_Parallel |
|||
{ |
|||
private LoadResizeSaveStressRunner benchmarks; |
|||
|
|||
[GlobalSetup] |
|||
public void Setup() |
|||
{ |
|||
this.benchmarks = new LoadResizeSaveStressRunner() { ImageCount = 20 }; |
|||
this.benchmarks.Init(); |
|||
} |
|||
|
|||
private void ForEachImage(Action<string> action) => Parallel.ForEach(this.benchmarks.Images, action); |
|||
|
|||
[Benchmark(Baseline = true, Description = "System.Drawing Load, Resize, Save - Parallel")] |
|||
public void SystemDrawingBenchmarkParallel() => this.ForEachImage(this.benchmarks.SystemDrawingResize); |
|||
|
|||
[Benchmark(Description = "ImageSharp Load, Resize, Save - Parallel")] |
|||
public void ImageSharpBenchmarkParallel() => this.ForEachImage(this.benchmarks.ImageSharpResize); |
|||
|
|||
[Benchmark(Description = "ImageMagick Load, Resize, Save - Parallel")] |
|||
public void MagickBenchmarkParallel() => this.ForEachImage(this.benchmarks.MagickResize); |
|||
|
|||
[Benchmark(Description = "ImageFree Load, Resize, Save - Parallel")] |
|||
public void FreeImageBenchmarkParallel() => this.ForEachImage(this.benchmarks.FreeImageResize); |
|||
|
|||
[Benchmark(Description = "MagicScaler Load, Resize, Save - Parallel")] |
|||
public void MagicScalerBenchmarkParallel() => this.ForEachImage(this.benchmarks.MagicScalerResize); |
|||
|
|||
[Benchmark(Description = "SkiaSharp Canvas Load, Resize, Save - Parallel")] |
|||
public void SkiaCanvasBenchmarkParallel() => this.ForEachImage(this.benchmarks.SkiaCanvasResize); |
|||
|
|||
[Benchmark(Description = "SkiaSharp Bitmap Load, Resize, Save - Parallel")] |
|||
public void SkiaBitmapBenchmarkParallel() => this.ForEachImage(this.benchmarks.SkiaBitmapResize); |
|||
|
|||
[Benchmark(Description = "NetVips Load, Resize, Save - Parallel")] |
|||
public void NetVipsBenchmarkParallel() => this.ForEachImage(this.benchmarks.NetVipsResize); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue