-
-
Notifications
You must be signed in to change notification settings - Fork 851
/
LoadResizeSaveStressBenchmarks.cs
62 lines (51 loc) · 2.34 KB
/
LoadResizeSaveStressBenchmarks.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
using System;
using BenchmarkDotNet.Attributes;
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave
{
// See README.md for instructions about initialization.
[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 MagicScaler(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagicScalerResize, 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);
}
}