|
|
|
@ -4,6 +4,7 @@ |
|
|
|
using System; |
|
|
|
using System.Drawing; |
|
|
|
using System.Drawing.Drawing2D; |
|
|
|
using System.Globalization; |
|
|
|
|
|
|
|
using BenchmarkDotNet.Attributes; |
|
|
|
|
|
|
|
@ -23,15 +24,21 @@ namespace SixLabors.ImageSharp.Benchmarks |
|
|
|
|
|
|
|
private Bitmap sourceBitmap; |
|
|
|
|
|
|
|
[Params(3032)] |
|
|
|
public int SourceSize { get; set; } |
|
|
|
[Params("3032-400")] |
|
|
|
public virtual string SourceToDest { get; set; } |
|
|
|
|
|
|
|
protected int SourceSize { get; private set; } |
|
|
|
|
|
|
|
protected int DestSize { get; private set; } |
|
|
|
|
|
|
|
[Params(400)] |
|
|
|
public int DestSize { get; set; } |
|
|
|
|
|
|
|
[GlobalSetup] |
|
|
|
public void Setup() |
|
|
|
public virtual void Setup() |
|
|
|
{ |
|
|
|
string[] stuff = this.SourceToDest.Split('-'); |
|
|
|
this.SourceSize = int.Parse(stuff[0], CultureInfo.InvariantCulture); |
|
|
|
this.DestSize = int.Parse(stuff[1], CultureInfo.InvariantCulture); |
|
|
|
|
|
|
|
this.sourceImage = new Image<TPixel>(this.Configuration, this.SourceSize, this.SourceSize); |
|
|
|
this.sourceBitmap = new Bitmap(this.SourceSize, this.SourceSize); |
|
|
|
} |
|
|
|
@ -95,26 +102,44 @@ namespace SixLabors.ImageSharp.Benchmarks |
|
|
|
ctx.Resize(this.DestSize, this.DestSize, KnownResamplers.Bicubic); |
|
|
|
} |
|
|
|
|
|
|
|
// RESULTS (2019 April):
|
|
|
|
// RESULTS - 2019 April - ResizeWorker:
|
|
|
|
//
|
|
|
|
// BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17134.648 (1803/April2018Update/Redstone4)
|
|
|
|
// BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17134.706 (1803/April2018Update/Redstone4)
|
|
|
|
// Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
|
|
|
|
// Frequency=2742192 Hz, Resolution=364.6718 ns, Timer=TSC
|
|
|
|
// .NET Core SDK=2.1.602
|
|
|
|
// Frequency=2742189 Hz, Resolution=364.6722 ns, Timer=TSC
|
|
|
|
// .NET Core SDK=2.2.202
|
|
|
|
// [Host] : .NET Core 2.1.9 (CoreCLR 4.6.27414.06, CoreFX 4.6.27415.01), 64bit RyuJIT
|
|
|
|
// Clr : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3362.0
|
|
|
|
// Clr : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3394.0
|
|
|
|
// Core : .NET Core 2.1.9 (CoreCLR 4.6.27414.06, CoreFX 4.6.27415.01), 64bit RyuJIT
|
|
|
|
//
|
|
|
|
// IterationCount=3 LaunchCount=1 WarmupCount=3
|
|
|
|
// IterationCount=3 LaunchCount=1 WarmupCount=3
|
|
|
|
//
|
|
|
|
// Method | Job | Runtime | SourceSize | DestSize | Mean | Error | StdDev | Ratio | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|
|
|
|
// ----------------------------------------- |----- |-------- |----------- |--------- |----------:|----------:|----------:|------:|------------:|------------:|------------:|--------------------:|
|
|
|
|
// SystemDrawing | Clr | Clr | 3032 | 400 | 118.71 ms | 4.884 ms | 0.2677 ms | 1.00 | - | - | - | 2048 B |
|
|
|
|
// 'ImageSharp, MaxDegreeOfParallelism = 1' | Clr | Clr | 3032 | 400 | 94.55 ms | 16.160 ms | 0.8858 ms | 0.80 | - | - | - | 16384 B |
|
|
|
|
// | | | | | | | | | | | | |
|
|
|
|
// SystemDrawing | Core | Core | 3032 | 400 | 118.38 ms | 2.814 ms | 0.1542 ms | 1.00 | - | - | - | 96 B |
|
|
|
|
// 'ImageSharp, MaxDegreeOfParallelism = 1' | Core | Core | 3032 | 400 | 90.28 ms | 4.679 ms | 0.2565 ms | 0.76 | - | - | - | 15712 B |
|
|
|
|
// Method | Job | Runtime | SourceToDest | Mean | Error | StdDev | Ratio | RatioSD | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|
|
|
|
// ----------------------------------------- |----- |-------- |------------- |----------:|----------:|----------:|------:|--------:|------------:|------------:|------------:|--------------------:|
|
|
|
|
// SystemDrawing | Clr | Clr | 3032-400 | 120.11 ms | 1.435 ms | 0.0786 ms | 1.00 | 0.00 | - | - | - | 1638 B |
|
|
|
|
// 'ImageSharp, MaxDegreeOfParallelism = 1' | Clr | Clr | 3032-400 | 75.32 ms | 34.143 ms | 1.8715 ms | 0.63 | 0.02 | - | - | - | 16384 B |
|
|
|
|
// | | | | | | | | | | | | |
|
|
|
|
// SystemDrawing | Core | Core | 3032-400 | 120.33 ms | 6.669 ms | 0.3656 ms | 1.00 | 0.00 | - | - | - | 96 B |
|
|
|
|
// 'ImageSharp, MaxDegreeOfParallelism = 1' | Core | Core | 3032-400 | 88.56 ms | 1.864 ms | 0.1022 ms | 0.74 | 0.00 | - | - | - | 15568 B |
|
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Is it worth to set a larger working buffer limit for resize?
|
|
|
|
/// Conclusion: It doesn't really have an effect.
|
|
|
|
/// </summary>
|
|
|
|
public class Resize_Bicubic_Rgba32_CompareWorkBufferSizes : Resize_Bicubic_Rgba32 |
|
|
|
{ |
|
|
|
[Params(128, 512, 1024, 8 * 1024)] |
|
|
|
public int WorkingBufferSizeHintInKilobytes { get; set; } |
|
|
|
|
|
|
|
[Params("3032-400", "4000-300")] |
|
|
|
public override string SourceToDest { get; set; } |
|
|
|
|
|
|
|
public override void Setup() |
|
|
|
{ |
|
|
|
this.Configuration.WorkingBufferSizeHintInBytes = this.WorkingBufferSizeHintInKilobytes * 1024; |
|
|
|
base.Setup(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public class Resize_Bicubic_Bgra32 : ResizeBenchmarkBase<Bgra32> |
|
|
|
|