From 0b881b52d301717b41621b10c44cc033ec2469c6 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Tue, 3 Jan 2017 01:51:55 +0100 Subject: [PATCH] code cleanup in MultiImageBenchmarkBase --- .../Image/DecodeJpegMultiple.cs | 4 +- .../Image/EncodeJpegMultiple.cs | 6 +- .../Image/MultiImageBenchmarkBase.cs | 55 ++++++++++++------- 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs b/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs index 68797c7780..a995545584 100644 --- a/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Image/DecodeJpegMultiple.cs @@ -11,9 +11,9 @@ namespace ImageSharp.Benchmarks.Image public class DecodeJpegMultiple : MultiImageBenchmarkBase { - protected override IEnumerable InputImageSubfolders => new[] + protected override IEnumerable InputImageSubfoldersOrFiles => new[] { - "Formats/Jpg/" + "Jpg/" }; protected override IEnumerable FileFilters => new[] { "*.jpg" }; diff --git a/tests/ImageSharp.Benchmarks/Image/EncodeJpegMultiple.cs b/tests/ImageSharp.Benchmarks/Image/EncodeJpegMultiple.cs index 6762ca8d8a..e631de57f2 100644 --- a/tests/ImageSharp.Benchmarks/Image/EncodeJpegMultiple.cs +++ b/tests/ImageSharp.Benchmarks/Image/EncodeJpegMultiple.cs @@ -14,10 +14,10 @@ public class EncodeJpegMultiple : MultiImageBenchmarkBase.WithImagesPreloaded { - protected override IEnumerable InputImageSubfolders => new[] + protected override IEnumerable InputImageSubfoldersOrFiles => new[] { - "Formats/Bmp/", - "Formats/Jpg/baseline" + "Bmp/", + "Jpg/baseline" }; protected override IEnumerable FileFilters => new[] { "*.bmp", "*.jpg" }; diff --git a/tests/ImageSharp.Benchmarks/Image/MultiImageBenchmarkBase.cs b/tests/ImageSharp.Benchmarks/Image/MultiImageBenchmarkBase.cs index 5870840c1c..b2c63fa275 100644 --- a/tests/ImageSharp.Benchmarks/Image/MultiImageBenchmarkBase.cs +++ b/tests/ImageSharp.Benchmarks/Image/MultiImageBenchmarkBase.cs @@ -18,39 +18,51 @@ protected Dictionary FileNamesToImageSharpImages = new Dictionary(); protected Dictionary FileNamesToSystemDrawingImages = new Dictionary(); - public enum TestingMode + /// + /// The values of this enum separate input files into categories + /// + public enum InputImageCategory { - All, + AllImages, SmallImagesOnly, LargeImagesOnly } - [Params(TestingMode.All, TestingMode.SmallImagesOnly, TestingMode.LargeImagesOnly)] - public TestingMode Mode { get; set; } - - protected virtual string BaseFolder => "../ImageSharp.Tests/TestImages/"; - - protected abstract IEnumerable FileFilters { get; } - - protected IEnumerable FilterWords => new string[] { }; - - protected virtual IEnumerable Folders => this.InputImageSubfolders.Select(f => Path.Combine(this.BaseFolder, f)); - + [Params(InputImageCategory.AllImages, InputImageCategory.SmallImagesOnly, InputImageCategory.LargeImagesOnly)] + public InputImageCategory InputCategory { get; set; } + + protected virtual string BaseFolder => "../ImageSharp.Tests/TestImages/Formats/"; + + protected virtual IEnumerable FileFilters => new[] { "*.*" }; + + /// + /// Gets the file names containing these strings are substrings are not processed by the benchmark. + /// + protected IEnumerable ExcludeSubstringsInFileNames => new string[] { }; + + /// + /// Enumerates folders containing files OR files to be processed by the benchmark. + /// + protected IEnumerable AllFoldersOrFiles => this.InputImageSubfoldersOrFiles.Select(f => Path.Combine(this.BaseFolder, f)); + + /// + /// The images sized above this threshold will be included in + /// protected virtual int LargeImageThresholdInBytes => 100000; protected IEnumerable> EnumeratePairsByBenchmarkSettings( Dictionary input, Predicate checkIfSmall) { - switch (this.Mode) + switch (this.InputCategory) { - case TestingMode.All: + case InputImageCategory.AllImages: return input; - case TestingMode.SmallImagesOnly: + case InputImageCategory.SmallImagesOnly: return input.Where(kv => checkIfSmall(kv.Value)); - case TestingMode.LargeImagesOnly: + case InputImageCategory.LargeImagesOnly: return input.Where(kv => !checkIfSmall(kv.Value)); default: throw new ArgumentOutOfRangeException(); @@ -63,24 +75,25 @@ this.FileNamesToBytes, arr => arr.Length < this.LargeImageThresholdInBytes); - protected abstract IEnumerable InputImageSubfolders { get; } + protected abstract IEnumerable InputImageSubfoldersOrFiles { get; } [Setup] public void ReadImages() { - //Console.WriteLine("Vector.IsHardwareAccelerated: " + Vector.IsHardwareAccelerated); + // Console.WriteLine("Vector.IsHardwareAccelerated: " + Vector.IsHardwareAccelerated); this.ReadImagesImpl(); } protected virtual void ReadImagesImpl() { - foreach (string folder in this.Folders) + foreach (string folder in this.AllFoldersOrFiles) { + var allFiles = this.FileFilters.SelectMany( f => Directory.EnumerateFiles(folder, f, SearchOption.AllDirectories) - .Where(fn => !this.FilterWords.Any(w => fn.ToLower().Contains(w)))).ToArray(); + .Where(fn => !this.ExcludeSubstringsInFileNames.Any(w => fn.ToLower().Contains(w)))).ToArray(); foreach (var fn in allFiles) { this.FileNamesToBytes[fn] = File.ReadAllBytes(fn);