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(); }