-
Notifications
You must be signed in to change notification settings - Fork 711
Expand file tree
/
Copy pathTransformComponentQueryBenchmark.cs
More file actions
118 lines (99 loc) · 2.69 KB
/
Copy pathTransformComponentQueryBenchmark.cs
File metadata and controls
118 lines (99 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System.Collections.Generic;
using System.Numerics;
using System.Runtime.InteropServices;
using BenchmarkDotNet.Attributes;
using JetBrains.Annotations;
using Robust.Shared.Analyzers;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.UnitTesting.Server;
namespace Robust.Benchmarks.EntityManager;
[MemoryDiagnoser]
[Virtual]
public class TransformComponentQueryBenchmark
{
private ISimulation _simulation = default!;
private IEntityManager _entityManager = default!;
[UsedImplicitly]
[Params(1, 10, 100, 1000)]
public int N = 10000;
private List<EntityUid> Ents = default!;
[GlobalSetup]
public void GlobalSetup()
{
_simulation = RobustServerSimulation
.NewSimulation()
.InitializeInstance();
_entityManager = _simulation.Resolve<IEntityManager>();
Ents = [];
for (var i = 0; i < N; i++)
{
Ents.Add(_entityManager.SpawnEntity(null, MapCoordinates.Nullspace));
}
}
[Benchmark]
public int AllEntityQueryEnumerator()
{
var a = 0;
var query = _entityManager.AllEntityQueryEnumerator<TransformComponent>();
while (query.MoveNext(out _, out var comp))
{
a += comp.ChildCount;
}
return a;
}
[Benchmark]
public int EntityQueryEnumerator()
{
var a = 0;
var query = _entityManager.EntityQueryEnumerator<TransformComponent>();
while (query.MoveNext(out _, out var comp))
{
a += comp.ChildCount;
}
return a;
}
[Benchmark]
public int GetEntityQuery()
{
var a = 0;
var query = _entityManager.GetEntityQuery<TransformComponent>();
foreach (var uid in CollectionsMarshal.AsSpan(Ents))
{
a += query.GetComponent(uid).ChildCount;
}
return a;
}
[Benchmark]
public int GetComponent()
{
var a = 0;
foreach (var uid in CollectionsMarshal.AsSpan(Ents))
{
a += _entityManager.GetComponent<TransformComponent>(uid).ChildCount;
}
return a;
}
[Benchmark]
public int HasComponent()
{
var a = 0;
foreach (var uid in CollectionsMarshal.AsSpan(Ents))
{
if (_entityManager.HasComponent<TransformComponent>(uid))
a += 1;
}
return a;
}
[Benchmark]
public int TryGetComponent()
{
var a = 0;
foreach (var uid in CollectionsMarshal.AsSpan(Ents))
{
if (_entityManager.TryGetComponent(uid, out TransformComponent? xform))
a += xform.ChildCount;
}
return a;
}
}