Skip to content

Commit

Permalink
improving benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
inforithmics committed Oct 22, 2023
1 parent de35e87 commit 89fb041
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions Benchmarks/Mapsui.Rendering.Benchmarks/RenderToBitmapPerformance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,36 @@ public class RenderToBitmapPerformance
private static readonly RegressionMapControl map;
private static readonly RegressionMapControl mapCached;
private static readonly MapRenderer mapRenderer;
private static readonly MapRenderer mapRendererCached;
private static readonly MapRenderer mapRendererSkp;
private static readonly MapRenderer mapRendererPng;
private static readonly MapRenderer mapRendererWebp;

static RenderToBitmapPerformance()
{
mapRenderer = new MapRenderer();
skpMap = CreateMapControl(RenderFormat.Skp);
pngMap = CreateMapControl(RenderFormat.Png);
webpMap = CreateMapControl(RenderFormat.WebP);
map = CreateMapControl();
mapCached = CreateMapControl();
mapRendererCached = new MapRenderer();
mapRendererSkp = new MapRenderer();
mapRendererPng = new MapRenderer();
mapRendererWebp = new MapRenderer();
skpMap = CreateMapControl(RenderFormat.Skp, mapRendererSkp);
pngMap = CreateMapControl(RenderFormat.Png, mapRendererPng);
webpMap = CreateMapControl(RenderFormat.WebP, mapRendererWebp);
map = CreateMapControl(null, mapRenderer);
mapCached = CreateMapControl(null, mapRendererCached);
skpMap.WaitForLoadingAsync().Wait();
pngMap.WaitForLoadingAsync().Wait();
webpMap.WaitForLoadingAsync().Wait();
map.WaitForLoadingAsync().Wait();
mapCached.WaitForLoadingAsync().Wait();
// render one time the map so that the sk path are cached.
using var bitmap = mapRenderer.RenderToBitmapStream(mapCached.Map.Navigator.Viewport, mapCached.Map!.Layers, Color.White);
using var bitmap = mapRendererCached.RenderToBitmapStream(mapCached.Map.Navigator.Viewport, mapCached.Map!.Layers, Color.White);
}

[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD002:Avoid problematic synchronous waits", Justification = "Needs to be synchronous")]
public static RegressionMapControl CreateMapControl(RenderFormat? renderFormat = null)
public static RegressionMapControl CreateMapControl(RenderFormat? renderFormat = null, MapRenderer? renderer = null)
{
var mapControl = new RegressionMapControl(mapRenderer);
var mapControl = new RegressionMapControl(renderer ?? mapRenderer);
mapControl.SetSize(800, 600);

mapControl.Map = CreateMap(renderFormat);
Expand Down Expand Up @@ -139,7 +147,7 @@ public void RenderDefaultAsync()
[Benchmark]
public void RenderDefaultCachedAsync()
{
using var bitmap = mapRenderer.RenderToBitmapStream(mapCached.Map.Navigator.Viewport, mapCached.Map!.Layers, Color.White);
using var bitmap = mapRendererCached.RenderToBitmapStream(mapCached.Map.Navigator.Viewport, mapCached.Map!.Layers, Color.White);
#if DEBUG
File.WriteAllBytes(@$"{OutputFolder()}\Test.png", bitmap.ToArray());
#endif
Expand All @@ -148,7 +156,7 @@ public void RenderDefaultCachedAsync()
[Benchmark]
public void RenderRasterizingTilingPngAsync()
{
using var bitmap = mapRenderer.RenderToBitmapStream(pngMap.Map.Navigator.Viewport, pngMap.Map!.Layers, Color.White);
using var bitmap = mapRendererPng.RenderToBitmapStream(pngMap.Map.Navigator.Viewport, pngMap.Map!.Layers, Color.White);
#if DEBUG
File.WriteAllBytes(@$"{OutputFolder()}\Testpng.png", bitmap.ToArray());
#endif
Expand All @@ -157,7 +165,7 @@ public void RenderRasterizingTilingPngAsync()
[Benchmark]
public void RenderRasterizingTilingWebPAsync()
{
using var bitmap = mapRenderer.RenderToBitmapStream(webpMap.Map.Navigator.Viewport, webpMap.Map!.Layers, Color.White);
using var bitmap = mapRendererWebp.RenderToBitmapStream(webpMap.Map.Navigator.Viewport, webpMap.Map!.Layers, Color.White);
#if DEBUG
File.WriteAllBytes(@$"{OutputFolder()}\Testwebp.png", bitmap.ToArray());
#endif
Expand All @@ -166,7 +174,7 @@ public void RenderRasterizingTilingWebPAsync()
[Benchmark]
public void RenderRasterizingTilingSkpAsync()
{
using var bitmap = mapRenderer.RenderToBitmapStream(skpMap.Map.Navigator.Viewport, skpMap.Map!.Layers, Color.White);
using var bitmap = mapRendererSkp.RenderToBitmapStream(skpMap.Map.Navigator.Viewport, skpMap.Map!.Layers, Color.White);
#if DEBUG
File.WriteAllBytes(@$"{OutputFolder()}\Testskp.png", bitmap.ToArray());
#endif
Expand Down

0 comments on commit 89fb041

Please sign in to comment.