Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ user-token.json
/cli/tests/bin/
/cli/tests/obj/
/cli/tests/.idea/
/cli/benchmarks/bin/
/cli/benchmarks/obj/
/cli/benchmarks/.idea/
/cli/*.sln.DotSettings.*
cli/cli/beamoLocalRuntime.json

Expand Down
18 changes: 18 additions & 0 deletions cli/Benchmarks/Benchmarks.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\beamable.common\beamable.common.csproj" />
</ItemGroup>

</Project>
67 changes: 67 additions & 0 deletions cli/Benchmarks/DependencyProviderBenchmarks.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
using Beamable.Common.Dependencies;
using BenchmarkDotNet.Attributes;
using System.Collections.Concurrent;

namespace Benchmarks;

[MemoryDiagnoser]
[ShortRunJob]
public class DependencyProviderBenchmarks
{
// [Benchmark]
// public void JustAService()
// {
// var x = new ServiceDescriptor();
// }
// [Benchmark]
// public void Dict_Concurrent()
// {
// var x = new ConcurrentDictionary<Type, ServiceDescriptor>();
// }
// [Benchmark]
// public void Dict_Regular()
// {
// var x = new Dictionary<Type, ServiceDescriptor>();
// }

// [Benchmark]
public void BaseCase_JustProvider()
{
var provider = new DependencyProvider(null, null);
}

[Benchmark]
public void BaseCase_NoDispose()
{
var builder = new DependencyBuilder();
// builder.AddSingleton<TestService>();
var provider = builder.Build();

// var service = provider.GetService<TestService>();
}
//
// [Benchmark]
public void BaseCase_NoDispose_RegisterAndResolve()
{
var builder = new DependencyBuilder();
// builder.AddSingleton<TestService>();
var provider = builder.Build();
// var service = provider.GetService<TestService>();
// var serv = new TestService();
}
//
//
[Benchmark]
public void BaseCase_Dispose()
{
var builder = new DependencyBuilder();
var provider = builder.Build();
provider.Dispose();
}


public class TestService
{

}
}
37 changes: 37 additions & 0 deletions cli/Benchmarks/MultiThreadedAccessBenchmarks.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Beamable.Common.Dependencies;
using BenchmarkDotNet.Attributes;

namespace Benchmarks;

[MemoryDiagnoser]
[ShortRunJob]
public class MultiThreadedAccessBenchmarks
{
[Benchmark]
public async Task SingletonOnlyGetsMadeOnce()
{
var builder = new DependencyBuilder();
int count = 0;
builder.AddSingleton<A>(_ =>
{
count++;
return new A();
});
var provider = builder.Build();

var tasks = Enumerable.Range(0, 10_000).Select(i => Task.Run(async () =>
{
await Task.Delay(1);
provider.GetService<A>();
}));

await Task.WhenAll(tasks);


}

public class A
{
// no-op class just for testing
}
}
14 changes: 14 additions & 0 deletions cli/Benchmarks/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using BenchmarkDotNet.Running;

namespace Benchmarks;

public class Program
{
public static void Main(string[] args)
{
// BenchmarkRunner.Run<MultiThreadedAccessBenchmarks>();
BenchmarkRunner.Run<DependencyProviderBenchmarks>();
// BenchmarkRunner.Run<PromiseBenchmarks>();

}
}
94 changes: 94 additions & 0 deletions cli/Benchmarks/PromiseBenchmarks.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
using Beamable.Common;
using BenchmarkDotNet.Attributes;
using System.Runtime.InteropServices.JavaScript;

namespace Benchmarks;

[MemoryDiagnoser]
[ShortRunJob]
public class PromiseBenchmarks
{

// [GlobalSetup]
public void Setup()
{
var x = PromiseBase.Unit;
}
// [Benchmark]
public Promise<int> PromiseComplete()
{
var p = new Promise<int>();
//p.CompleteSuccess();
return p;
}
// [Benchmark]
public void PromiseAllocation_Many()
{
for (var i = 0; i < 10_000; i++)
{
var p = new Promise();
}
}

[Benchmark]
public async Task<int> Await()
{
var p = new Promise<int>();
p.CompleteSuccess(3);

return await p;
}

// [Benchmark]
public Promise PromiseAllocation()
{
var p = new Promise();
return p;
}


// [Benchmark]
public async Promise ReturnAsyncPromise()
{
// var p = new Promise();

}


// [Benchmark]
public async Promise AsyncAwait2()
{
var p = new Promise();
p.CompleteSuccess();
}

// [Benchmark]
public async Task Sequence()
{
var pList = Enumerable.Range(0, 10).Select(_ => new Promise<int>()).ToList();
var final = Promise.Sequence(pList);

var _ = pList.Select(p => Task.Run(async () =>
{
await Task.Delay(1);
p.CompleteSuccess(1);
})).ToList();

await final;
}

// [Benchmark]
public async Task WhenAll()
{
var pList = Enumerable.Range(0, 10).Select(_ => new Promise<int>()).ToList();
var final = Promise.WhenAll(pList);

var _ = pList.Select(p => Task.Run(async () =>
{
await Task.Delay(1);
p.CompleteSuccess(1);
})).ToList();

await final;
}
}
Loading