using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Jobs; using HPPH.Reference; namespace HPPH.Benchmark; [SimpleJob(RuntimeMoniker.Net80)] [HtmlExporter] [MemoryDiagnoser] public class AverageBenchmarks { #region Properties & Fields private readonly List _colors3bpp; private readonly List _colors4bpp; private readonly List> _images3bpp; private readonly List> _images4bpp; #endregion #region Constructors public AverageBenchmarks() { _colors3bpp = BenchmarkHelper.GetSampleData(); _colors4bpp = BenchmarkHelper.GetSampleData(); _images3bpp = BenchmarkHelper.GetSampleDataImages(); _images4bpp = BenchmarkHelper.GetSampleDataImages(); } #endregion #region Methods [Benchmark] public ColorRGB[] PixelHelper_3BPP() { ColorRGB[] averages = new ColorRGB[_colors3bpp.Count]; for (int i = 0; i < _colors3bpp.Count; i++) averages[i] = new ReadOnlySpan(_colors3bpp[i]).Average(); return averages; } [Benchmark] public ColorRGBA[] PixelHelper_4BPP() { ColorRGBA[] averages = new ColorRGBA[_colors4bpp.Count]; for (int i = 0; i < _colors4bpp.Count; i++) averages[i] = new ReadOnlySpan(_colors4bpp[i]).Average(); return averages; } [Benchmark] public ColorRGB[] PixelHelper_3BPP_Image() { ColorRGB[] averages = new ColorRGB[_images3bpp.Count]; for (int i = 0; i < _images3bpp.Count; i++) averages[i] = _images3bpp[i].Average(); return averages; } [Benchmark] public ColorRGBA[] PixelHelper_4BPP_Image() { ColorRGBA[] averages = new ColorRGBA[_images4bpp.Count]; for (int i = 0; i < _images4bpp.Count; i++) averages[i] = _images4bpp[i].Average(); return averages; } [Benchmark] public ColorRGB[] Reference_3BPP() { ColorRGB[] averages = new ColorRGB[_colors3bpp.Count]; for (int i = 0; i < _colors3bpp.Count; i++) averages[i] = ReferencePixelHelper.Average(new ReadOnlySpan(_colors3bpp[i])); return averages; } [Benchmark] public ColorRGBA[] Reference_4BPP() { ColorRGBA[] averages = new ColorRGBA[_colors4bpp.Count]; for (int i = 0; i < _colors4bpp.Count; i++) averages[i] = ReferencePixelHelper.Average(new ReadOnlySpan(_colors4bpp[i])); return averages; } #endregion }