Skip to content

Commit fe65a38

Browse files
authored
Merge pull request #1687 from SixLabors/af/loadresizesave-stress
Add beeheads stress benchmarks to the repo
2 parents 3f96b1e + 20040bd commit fe65a38

File tree

10 files changed

+529
-9
lines changed

10 files changed

+529
-9
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,4 +221,5 @@ artifacts/
221221
# Tests
222222
**/Images/ActualOutput
223223
**/Images/ReferenceOutput
224+
**/Images/Input/MemoryStress
224225
.DS_Store

tests/Directory.Build.targets

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,21 @@
1818

1919
<ItemGroup>
2020
<!-- Test Dependencies -->
21-
<PackageReference Update="BenchmarkDotNet" Version="0.12.1" />
22-
<PackageReference Update="BenchmarkDotNet.Diagnostics.Windows" Version="0.12.1" Condition="'$(IsWindows)'=='true'" />
21+
<PackageReference Update="BenchmarkDotNet" Version="0.13.0" />
22+
<PackageReference Update="BenchmarkDotNet.Diagnostics.Windows" Version="0.13.0" Condition="'$(IsWindows)'=='true'" />
2323
<PackageReference Update="Colourful" Version="2.0.5" />
24-
<PackageReference Update="Magick.NET-Q16-AnyCPU" Version="7.23.2.1" />
24+
<PackageReference Update="Magick.NET-Q16-AnyCPU" Version="8.0.1" />
2525
<PackageReference Update="Microsoft.DotNet.RemoteExecutor" Version="6.0.0-beta.21311.3" />
2626
<PackageReference Update="Microsoft.DotNet.XUnitExtensions" Version="6.0.0-beta.21311.3" />
2727
<PackageReference Update="Moq" Version="4.14.6" />
28+
<PackageReference Update="NetVips" Version="2.0.1" />
29+
<PackageReference Update="NetVips.Native" Version="8.11.0" />
30+
<PackageReference Update="PhotoSauce.MagicScaler" Version="0.12.1" />
2831
<PackageReference Update="Pfim" Version="0.9.1" />
29-
<PackageReference Include="runtime.osx.10.10-x64.CoreCompat.System.Drawing" Version="5.8.64" Condition="'$(IsOSX)'=='true'" />
30-
<PackageReference Update="SharpZipLib" Version="1.3.0" />
31-
<PackageReference Update="System.Drawing.Common" Version="4.7.0" />
32+
<PackageReference Update="runtime.osx.10.10-x64.CoreCompat.System.Drawing" Version="5.8.64" Condition="'$(IsOSX)'=='true'" />
33+
<PackageReference Update="SharpZipLib" Version="1.3.2" />
34+
<PackageReference Update="SkiaSharp" Version="2.80.2" />
35+
<PackageReference Update="System.Drawing.Common" Version="5.0.2" />
3236
</ItemGroup>
3337

3438
</Project>

tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<!--Used to hide test project from dotnet test-->
1010
<IsTestProject>false</IsTestProject>
1111
<Configurations>Debug;Release;Debug-InnerLoop;Release-InnerLoop</Configurations>
12-
12+
<LangVersion>9</LangVersion>
1313
<!-- Uncomment this to run benchmarks depending on Colorful or Pfim (colorspaces and TGA): -->
1414
<!--<SignAssembly>false</SignAssembly>-->
1515
</PropertyGroup>
@@ -38,8 +38,13 @@
3838
<PackageReference Include="BenchmarkDotNet" />
3939
<PackageReference Include="BenchmarkDotNet.Diagnostics.Windows" Condition="'$(OS)' == 'Windows_NT'" />
4040
<PackageReference Include="Colourful" />
41+
<PackageReference Include="NetVips"/>
42+
<PackageReference Include="NetVips.Native" />
43+
<PackageReference Include="PhotoSauce.MagicScaler"/>
4144
<PackageReference Include="Pfim" />
45+
<PackageReference Include="runtime.osx.10.10-x64.CoreCompat.System.Drawing" Condition="'$(IsOSX)'=='true'" />
4246
<PackageReference Include="SharpZipLib" />
47+
<PackageReference Include="SkiaSharp" />
4348
<PackageReference Include="System.Drawing.Common" />
4449
</ItemGroup>
4550

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Copyright (c) Six Labors.
2+
// Licensed under the Apache License, Version 2.0.
3+
4+
using System;
5+
using BenchmarkDotNet.Attributes;
6+
7+
namespace SixLabors.ImageSharp.Benchmarks.LoadResizeSave
8+
{
9+
// See README.md for instructions about initialization.
10+
[MemoryDiagnoser]
11+
[ShortRunJob]
12+
public class LoadResizeSaveStressBenchmarks
13+
{
14+
private LoadResizeSaveStressRunner runner;
15+
16+
// private const JpegKind Filter = JpegKind.Progressive;
17+
private const JpegKind Filter = JpegKind.Any;
18+
19+
[GlobalSetup]
20+
public void Setup()
21+
{
22+
this.runner = new LoadResizeSaveStressRunner()
23+
{
24+
ImageCount = Environment.ProcessorCount,
25+
Filter = Filter
26+
};
27+
Console.WriteLine($"ImageCount: {this.runner.ImageCount} Filter: {Filter}");
28+
this.runner.Init();
29+
}
30+
31+
private void ForEachImage(Action<string> action, int maxDegreeOfParallelism)
32+
{
33+
this.runner.MaxDegreeOfParallelism = maxDegreeOfParallelism;
34+
this.runner.ForEachImageParallel(action);
35+
}
36+
37+
public int[] ParallelismValues { get; } =
38+
{
39+
Environment.ProcessorCount,
40+
Environment.ProcessorCount / 2,
41+
Environment.ProcessorCount / 4,
42+
1
43+
};
44+
45+
[Benchmark(Baseline = true)]
46+
[ArgumentsSource(nameof(ParallelismValues))]
47+
public void SystemDrawing(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SystemDrawingResize, maxDegreeOfParallelism);
48+
49+
[Benchmark]
50+
[ArgumentsSource(nameof(ParallelismValues))]
51+
public void ImageSharp(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.ImageSharpResize, maxDegreeOfParallelism);
52+
53+
[Benchmark]
54+
[ArgumentsSource(nameof(ParallelismValues))]
55+
public void Magick(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagickResize, maxDegreeOfParallelism);
56+
57+
[Benchmark]
58+
[ArgumentsSource(nameof(ParallelismValues))]
59+
public void MagicScaler(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.MagicScalerResize, maxDegreeOfParallelism);
60+
61+
[Benchmark]
62+
[ArgumentsSource(nameof(ParallelismValues))]
63+
public void SkiaBitmap(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.SkiaBitmapResize, maxDegreeOfParallelism);
64+
65+
[Benchmark]
66+
[ArgumentsSource(nameof(ParallelismValues))]
67+
public void NetVips(int maxDegreeOfParallelism) => this.ForEachImage(this.runner.NetVipsResize, maxDegreeOfParallelism);
68+
}
69+
}

0 commit comments

Comments
 (0)