diff --git a/GpkgMerger.sln b/GpkgMerger.sln index faea97bc..6e2ef9cc 100644 --- a/GpkgMerger.sln +++ b/GpkgMerger.sln @@ -17,9 +17,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergerService", "MergerService\MergerService.csproj", "{000F75C1-01FD-423F-94CD-6F24C5C31A3B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MergerLogicUnitTests", "MergerLogicUnitTests\MergerLogicUnitTests.csproj", "{29DADE7E-10F0-4AD0-9EAE-CF0387E3F1F1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergerLogicUnitTests", "MergerLogicUnitTests\MergerLogicUnitTests.csproj", "{29DADE7E-10F0-4AD0-9EAE-CF0387E3F1F1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MergerServiceUnitTests", "MergerServiceUnitTests\MergerServiceUnitTests.csproj", "{1E0BF0FA-12E2-4CEA-99C7-1AB692494795}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergerServiceUnitTests", "MergerServiceUnitTests\MergerServiceUnitTests.csproj", "{1E0BF0FA-12E2-4CEA-99C7-1AB692494795}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MergerLogicBanchmarkTests", "MergerLogicBanchmarkTests\MergerLogicBanchmarkTests.csproj", "{FD89E1F2-7C6E-42E0-96E5-2D7D1D567836}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -47,6 +49,10 @@ Global {1E0BF0FA-12E2-4CEA-99C7-1AB692494795}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E0BF0FA-12E2-4CEA-99C7-1AB692494795}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E0BF0FA-12E2-4CEA-99C7-1AB692494795}.Release|Any CPU.Build.0 = Release|Any CPU + {FD89E1F2-7C6E-42E0-96E5-2D7D1D567836}.Debug|Any CPU.ActiveCfg = Release|Any CPU + {FD89E1F2-7C6E-42E0-96E5-2D7D1D567836}.Debug|Any CPU.Build.0 = Release|Any CPU + {FD89E1F2-7C6E-42E0-96E5-2D7D1D567836}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD89E1F2-7C6E-42E0-96E5-2D7D1D567836}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MergerLogicBanchmarkTests/MergeTilesBenchmarkTest.cs b/MergerLogicBanchmarkTests/MergeTilesBenchmarkTest.cs new file mode 100644 index 00000000..d61ebaf9 --- /dev/null +++ b/MergerLogicBanchmarkTests/MergeTilesBenchmarkTest.cs @@ -0,0 +1,73 @@ +using BenchmarkDotNet.Attributes; +using MergerLogic.Batching; +using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; +using MergerLogic.Monitoring.Metrics; +using Microsoft.Extensions.Logging; +using Moq; +using static MergerLogic.ImageProcessing.TileFormatStrategy; + +namespace MergerLogicBanchmarkTests +{ + public class MergeTilesBenchmarkTest + { + #region mocks + + private MockRepository _mockRepository; + private TileMerger _testTileMerger; + private Coord targetCoordLowZoom; + private List tileBuilderList; + private TileFormatStrategy tileFormatStrategy; + + Tile testTilePNG1; + Tile testTilePNG2; + + #endregion + + [GlobalSetup] + public void GlobalSetup() + { + //Write your initialization code here + } + + [ParamsAllValues] + public FormatStrategy Strategy { get; set; } + + [ParamsAllValues] + public TileFormat Format { get; set; } + + [Params(true, false)] + public bool UploadOnly { get; set; } + + public MergeTilesBenchmarkTest() + { + this._mockRepository = new MockRepository(MockBehavior.Loose); + + var metricsProviderMock = this._mockRepository.Create(); + var tileScalerLoggerMock = this._mockRepository.Create>(); + var tileMergerLoggerMock = this._mockRepository.Create>(); + + var testTileScaler = new TileScaler(metricsProviderMock.Object, tileScalerLoggerMock.Object); + this._testTileMerger = new TileMerger(testTileScaler, tileMergerLoggerMock.Object); + + targetCoordLowZoom = new Coord(5, 0, 0); + + testTilePNG1 = new Tile(targetCoordLowZoom, File.ReadAllBytes(Path.Combine(".\\", "TestImages", "2.png"))); + testTilePNG2 = new Tile(targetCoordLowZoom, File.ReadAllBytes(Path.Combine(".\\", "TestImages", "1.png"))); + + + tileBuilderList = new List() + { + () => testTilePNG1, () => testTilePNG2 + }; + } + + [Benchmark] + public void MergeTiles_Benchmark() + { + tileFormatStrategy = new TileFormatStrategy(this.Format, this.Strategy); + //Write your code here + var result = this._testTileMerger.MergeTiles(tileBuilderList, targetCoordLowZoom, tileFormatStrategy, this.UploadOnly); + } + } +} diff --git a/MergerLogicBanchmarkTests/MergerLogicBanchmarkTests.csproj b/MergerLogicBanchmarkTests/MergerLogicBanchmarkTests.csproj new file mode 100644 index 00000000..47b6564a --- /dev/null +++ b/MergerLogicBanchmarkTests/MergerLogicBanchmarkTests.csproj @@ -0,0 +1,34 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/MergerLogicBanchmarkTests/Program.cs b/MergerLogicBanchmarkTests/Program.cs new file mode 100644 index 00000000..470edefa --- /dev/null +++ b/MergerLogicBanchmarkTests/Program.cs @@ -0,0 +1,23 @@ +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Running; +using MergerLogic.Batching; +using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; +using MergerLogic.Monitoring.Metrics; +using MergerLogicBanchmarkTests; +using Microsoft.Extensions.Logging; +using Moq; +using static MergerLogic.ImageProcessing.TileFormatStrategy; + +namespace MergerLogicBenchmarksTests +{ + public class Program + { + public static void Main(string[] args) + { + var summary = BenchmarkRunner.Run(); + // var summary2 = BenchmarkRunner.Run(); + } + } +} + diff --git a/MergerLogicBanchmarkTests/TestImages/1.png b/MergerLogicBanchmarkTests/TestImages/1.png new file mode 100644 index 00000000..37d4b6e8 Binary files /dev/null and b/MergerLogicBanchmarkTests/TestImages/1.png differ diff --git a/MergerLogicBanchmarkTests/TestImages/2.png b/MergerLogicBanchmarkTests/TestImages/2.png new file mode 100644 index 00000000..12a95122 Binary files /dev/null and b/MergerLogicBanchmarkTests/TestImages/2.png differ diff --git a/MergerLogicBanchmarkTests/TestImages/5.jpeg b/MergerLogicBanchmarkTests/TestImages/5.jpeg new file mode 100644 index 00000000..e5a91519 Binary files /dev/null and b/MergerLogicBanchmarkTests/TestImages/5.jpeg differ diff --git a/MergerLogicBanchmarkTests/TestImages/5_64bit.png b/MergerLogicBanchmarkTests/TestImages/5_64bit.png new file mode 100644 index 00000000..a2379898 Binary files /dev/null and b/MergerLogicBanchmarkTests/TestImages/5_64bit.png differ diff --git a/MergerLogicBanchmarkTests/UpscaleBenchmarkTest.cs b/MergerLogicBanchmarkTests/UpscaleBenchmarkTest.cs new file mode 100644 index 00000000..2c1bfffa --- /dev/null +++ b/MergerLogicBanchmarkTests/UpscaleBenchmarkTest.cs @@ -0,0 +1,56 @@ +using BenchmarkDotNet.Attributes; +using MergerLogic.Batching; +using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; +using MergerLogic.Monitoring.Metrics; +using Microsoft.Extensions.Logging; +using Moq; + +namespace MergerLogicBanchmarkTests +{ + public class UpscaleBenchmarkTest + { + #region mocks + + private MockRepository _mockRepository; + + private TileScaler _testTileScaler; + + private Tile testTileJpeg; + private Tile testTilePNG; + + #endregion + + [GlobalSetup] + public void GlobalSetup() + { + //Write your initialization code here + } + + public UpscaleBenchmarkTest() + { + testTileJpeg = new Tile(new Coord(3, 0, 0), System.IO.File.ReadAllBytes(Path.Combine(".\\", "TestImages", "5.jpeg"))); + testTilePNG = new Tile(new Coord(3, 0, 0), System.IO.File.ReadAllBytes(Path.Combine(".\\", "TestImages", "5_64bit.png"))); + + this._mockRepository = new MockRepository(MockBehavior.Loose); + + var metricsProviderMock = this._mockRepository.Create(); + var tileScalerLoggerMock = this._mockRepository.Create>(); + + this._testTileScaler = new TileScaler(metricsProviderMock.Object, tileScalerLoggerMock.Object); + } + + [Benchmark] + public void Upscale_jpeg() + { + //Write your code here + var resultTile = this._testTileScaler.Upscale(testTileJpeg, new Coord(4, 0, 0)); + } + [Benchmark] + public void Upscale_png() + { + //Write your code here + var resultTile = this._testTileScaler.Upscale(testTilePNG, new Coord(4, 0, 0)); + } + } +}