|
|
|
@ -1,4 +1,9 @@ |
|
|
|
namespace ImageSharp.Benchmarks.Image |
|
|
|
// <copyright file="DecodeJpegMultiple.cs" company="James Jackson-South">
|
|
|
|
// Copyright (c) James Jackson-South and contributors.
|
|
|
|
// Licensed under the Apache License, Version 2.0.
|
|
|
|
// </copyright>
|
|
|
|
|
|
|
|
namespace ImageSharp.Benchmarks.Image |
|
|
|
{ |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
@ -13,17 +18,23 @@ |
|
|
|
|
|
|
|
public class DecodeJpegMultiple |
|
|
|
{ |
|
|
|
private const string Folder = "../ImageSharp.Tests/TestImages/Formats/Jpg/"; |
|
|
|
|
|
|
|
private Dictionary<string, byte[]> fileNamesToBytes; |
|
|
|
|
|
|
|
public enum JpegTestingMode |
|
|
|
{ |
|
|
|
All, |
|
|
|
|
|
|
|
SmallImagesOnly, |
|
|
|
|
|
|
|
LargeImagesOnly, |
|
|
|
|
|
|
|
CalliphoraOnly, |
|
|
|
} |
|
|
|
|
|
|
|
[Params(JpegTestingMode.All, JpegTestingMode.SmallImagesOnly, JpegTestingMode.LargeImagesOnly, JpegTestingMode.CalliphoraOnly)] |
|
|
|
[Params(JpegTestingMode.All, JpegTestingMode.SmallImagesOnly, JpegTestingMode.LargeImagesOnly, |
|
|
|
JpegTestingMode.CalliphoraOnly)] |
|
|
|
public JpegTestingMode Mode { get; set; } |
|
|
|
|
|
|
|
private IEnumerable<KeyValuePair<string, byte[]>> RequestedImages |
|
|
|
@ -31,7 +42,7 @@ |
|
|
|
get |
|
|
|
{ |
|
|
|
int thresholdInBytes = 100000; |
|
|
|
|
|
|
|
|
|
|
|
switch (this.Mode) |
|
|
|
{ |
|
|
|
case JpegTestingMode.All: |
|
|
|
@ -41,38 +52,13 @@ |
|
|
|
case JpegTestingMode.LargeImagesOnly: |
|
|
|
return this.fileNamesToBytes.Where(kv => kv.Value.Length >= thresholdInBytes); |
|
|
|
case JpegTestingMode.CalliphoraOnly: |
|
|
|
return new[] { |
|
|
|
this.fileNamesToBytes.First(kv => kv.Key.ToLower().Contains("calliphora")) |
|
|
|
}; |
|
|
|
return new[] { this.fileNamesToBytes.First(kv => kv.Key.ToLower().Contains("calliphora")) }; |
|
|
|
default: |
|
|
|
throw new ArgumentOutOfRangeException(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if BENCHMARK46
|
|
|
|
private const string Folder = "../../../ImageSharp.Tests/TestImages/Formats/Jpg/"; |
|
|
|
#else
|
|
|
|
private const string Folder = "../ImageSharp.Tests/TestImages/Formats/Jpg/"; |
|
|
|
#endif
|
|
|
|
|
|
|
|
[Setup] |
|
|
|
public void ReadImages() |
|
|
|
{ |
|
|
|
if (this.fileNamesToBytes != null) return; |
|
|
|
|
|
|
|
// Decoder does not work for these images (yet?):
|
|
|
|
string[] filterWords = { "testimgari", "corrupted", "gray", "longvertical" }; |
|
|
|
|
|
|
|
var allFiles = Directory.EnumerateFiles(Folder, "*.jpg", SearchOption.AllDirectories) |
|
|
|
.Where(fn => !filterWords.Any(w => fn.ToLower().Contains(w))) |
|
|
|
.ToArray(); |
|
|
|
|
|
|
|
this.fileNamesToBytes = allFiles.ToDictionary(fn => fn, File.ReadAllBytes); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Benchmark(Description = "DecodeJpegMultiple - ImageSharp")] |
|
|
|
public ImageSharpSize JpegImageSharp() |
|
|
|
{ |
|
|
|
@ -81,7 +67,7 @@ |
|
|
|
{ |
|
|
|
using (MemoryStream memoryStream = new MemoryStream(kv.Value)) |
|
|
|
{ |
|
|
|
Image image = new ImageSharp.Image(memoryStream); |
|
|
|
Image image = new Image(memoryStream); |
|
|
|
lastSize = new ImageSharpSize(image.Width, image.Height); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -92,7 +78,7 @@ |
|
|
|
[Benchmark(Baseline = true, Description = "DecodeJpegMultiple - System.Drawing")] |
|
|
|
public Size JpegSystemDrawing() |
|
|
|
{ |
|
|
|
Size lastSize = new System.Drawing.Size(); |
|
|
|
Size lastSize = new Size(); |
|
|
|
foreach (var kv in this.RequestedImages) |
|
|
|
{ |
|
|
|
using (MemoryStream memoryStream = new MemoryStream(kv.Value)) |
|
|
|
@ -107,5 +93,20 @@ |
|
|
|
return lastSize; |
|
|
|
} |
|
|
|
|
|
|
|
[Setup] |
|
|
|
public void ReadImages() |
|
|
|
{ |
|
|
|
if (this.fileNamesToBytes != null) return; |
|
|
|
|
|
|
|
// Decoder does not work for these images (yet?):
|
|
|
|
string[] filterWords = { "testimgari", "corrupted", "gray", "longvertical" }; |
|
|
|
|
|
|
|
var allFiles = |
|
|
|
Directory.EnumerateFiles(Folder, "*.jpg", SearchOption.AllDirectories) |
|
|
|
.Where(fn => !filterWords.Any(w => fn.ToLower().Contains(w))) |
|
|
|
.ToArray(); |
|
|
|
|
|
|
|
this.fileNamesToBytes = allFiles.ToDictionary(fn => fn, File.ReadAllBytes); |
|
|
|
} |
|
|
|
} |
|
|
|
} |