using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using Speckle.Objects.Geometry;
using Speckle.Sdk.Common;
using Speckle.Sdk.Credentials;
using Speckle.Sdk.Host;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
using Speckle.Sdk.Transports;
namespace Speckle.Sdk.Tests.Performance.Benchmarks;
///
/// How many threads on our Deserializer is optimal
///
[MemoryDiagnoser]
[SimpleJob(RunStrategy.Monitoring)]
public class GeneralSerializerTest
{
private Base _testData;
[GlobalSetup]
public async Task Setup()
{
TypeLoader.Initialize(typeof(Base).Assembly, typeof(Point).Assembly);
using var dataSource = new TestDataHelper();
await dataSource
.SeedTransport(
new Account()
{
serverInfo = new() { url = "https://latest.speckle.systems/projects/2099ac4b5f/models/da511c4d1e" },
},
"2099ac4b5f",
"30fb4cbe6eb2202b9e7b4a4fcc3dd2b6",
false
)
.ConfigureAwait(false);
SpeckleObjectDeserializer deserializer = new() { ReadTransport = dataSource.Transport };
string data = await dataSource.Transport.GetObject(dataSource.ObjectId).NotNull();
_testData = await deserializer.DeserializeAsync(data).NotNull();
}
[Benchmark]
public string RunTest()
{
var remote = new NullTransport();
SpeckleObjectSerializer sut = new([remote]);
var x = sut.Serialize(_testData);
return x;
}
}
public class NullTransport : ITransport
{
public string TransportName { get; set; } = "";
public Dictionary TransportContext { get; } = new();
public TimeSpan Elapsed { get; } = TimeSpan.Zero;
public CancellationToken CancellationToken { get; set; }
public IProgress OnProgressAction { get; set; }
public void BeginWrite() { }
public void EndWrite() { }
public void SaveObject(string id, string serializedObject) { }
public Task WriteComplete()
{
return Task.CompletedTask;
}
public Task GetObject(string id) => throw new NotImplementedException();
public Task CopyObjectAndChildren(string id, ITransport targetTransport) =>
throw new NotImplementedException();
public Task> HasObjects(IReadOnlyList objectIds) =>
throw new NotImplementedException();
}