Skip to content

Instantly share code, notes, and snippets.

@daltonks
Created March 25, 2021 06:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save daltonks/e35ba1c44c0a9a5649c2258af6c05d8d to your computer and use it in GitHub Desktop.
Save daltonks/e35ba1c44c0a9a5649c2258af6c05d8d to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection.Metadata;
using System.Threading;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
namespace SkiaSharp.Benchmarks
{
//[SimpleJob(RuntimeMoniker.CoreRt31)]
[SimpleJob(RuntimeMoniker.Mono)]
[SimpleJob(RuntimeMoniker.Net472)]
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
public class Benchmark
{
private List<SKPath> _paths = new List<SKPath>();
public Benchmark()
{
var random = new Random();
// setup
for (var i = 0; i < 100; i++)
{
var path = new SKPath();
for (var l = 0; l < 100; l++)
{
path.LineTo((float) random.NextDouble(), (float) random.NextDouble());
}
_paths.Add(path);
}
}
[Benchmark]
public void ExistingRawIterator()
{
// benchmark
foreach (var path in _paths)
{
using var iterator = path.CreateRawIterator();
var span = new Span<SKPoint>(new SKPoint[4]);
while (true)
{
var verb = iterator.Next(span);
if (verb == SKPathVerb.Done)
{
break;
}
}
}
}
[Benchmark]
public void NewRawIterator()
{
// benchmark
foreach (var path in _paths)
{
using var iterator = path.CreateRawIterator();
var span = new Span<SKPoint>(new SKPoint[4]);
unsafe
{
fixed (SKPoint* p = span) {
while (true)
{
var verb = SkiaApi.sk_path_rawiter_next (iterator.Handle, p);
if (verb == SKPathVerb.Done)
{
break;
}
}
}
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<Benchmark>();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment