com.wallstop-studios.dxmessaging 2.0.0-rc12 → 2.0.0-rc13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +66 -0
- package/CHANGELOG.md.meta +7 -7
- package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +33 -33
- package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +33 -33
- package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +33 -33
- package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +71 -71
- package/Editor/Analyzers.meta +8 -8
- package/Editor/SetupCscRsp.cs +162 -162
- package/Editor/SetupCscRsp.cs.meta +2 -2
- package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +17 -17
- package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
- package/Editor.meta +8 -8
- package/LICENSE.md +6 -6
- package/LICENSE.md.meta +7 -7
- package/README.md +387 -364
- package/README.md.meta +7 -7
- package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes.meta +2 -2
- package/Runtime/Core/Extensions/MessageExtensions.cs +342 -342
- package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
- package/Runtime/Core/Extensions.meta +8 -8
- package/Runtime/Core/IMessage.cs +12 -12
- package/Runtime/Core/IMessage.cs.meta +11 -11
- package/Runtime/Core/InstanceId.cs +149 -149
- package/Runtime/Core/InstanceId.cs.meta +11 -11
- package/Runtime/Core/MessageBus/IMessageBus.cs +309 -309
- package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessageBus.cs +2243 -2084
- package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessagingRegistration.cs +105 -105
- package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
- package/Runtime/Core/MessageBus/RegistrationLog.cs +111 -111
- package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
- package/Runtime/Core/MessageBus.meta +8 -8
- package/Runtime/Core/MessageHandler.cs +2778 -2759
- package/Runtime/Core/MessageHandler.cs.meta +11 -11
- package/Runtime/Core/MessageRegistrationHandle.cs +110 -110
- package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
- package/Runtime/Core/MessageRegistrationToken.cs +1234 -1234
- package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
- package/Runtime/Core/Messages/IBroadcastMessage.cs +27 -27
- package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/ITargetedMessage.cs +27 -27
- package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/IUntargetedMessage.cs +27 -27
- package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
- package/Runtime/Core/Messages.meta +8 -8
- package/Runtime/Core/MessagingDebug.cs +70 -70
- package/Runtime/Core/MessagingDebug.cs.meta +11 -11
- package/Runtime/Core.meta +8 -8
- package/Runtime/Unity/MessageAwareComponent.cs +77 -77
- package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
- package/Runtime/Unity/MessagingComponent.cs +99 -99
- package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
- package/Runtime/Unity.meta +8 -8
- package/Runtime/WallstopStudios.DxMessaging.asmdef +15 -15
- package/Runtime.meta +8 -8
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs +92 -92
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs.meta +11 -11
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs +94 -94
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs.meta +2 -2
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs +94 -94
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs.meta +2 -2
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs +94 -94
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs.meta +2 -2
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +21 -21
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
- package/SourceGenerators.meta +8 -8
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs +373 -310
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Benchmarks.meta +8 -8
- package/Tests/Runtime/Core/BroadcastTests.cs +899 -899
- package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +190 -190
- package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +11 -11
- package/Tests/Runtime/Core/MessagingTestBase.cs +185 -185
- package/Tests/Runtime/Core/MessagingTestBase.cs.meta +11 -11
- package/Tests/Runtime/Core/NominalTests.cs +1740 -1740
- package/Tests/Runtime/Core/PostProcessorTests.cs +1236 -1236
- package/Tests/Runtime/Core/PostProcessorTests.cs.meta +11 -11
- package/Tests/Runtime/Core/RegistrationTests.cs +1266 -1266
- package/Tests/Runtime/Core/RegistrationTests.cs.meta +11 -11
- package/Tests/Runtime/Core/TargetedTests.cs +888 -888
- package/Tests/Runtime/Core/TargetedTests.cs.meta +11 -11
- package/Tests/Runtime/Core/UntargetedTests.cs +272 -272
- package/Tests/Runtime/Core/UntargetedTests.cs.meta +11 -11
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +9 -9
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +11 -11
- package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +186 -186
- package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +30 -30
- package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +8 -8
- package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +8 -8
- package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +8 -8
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +7 -7
- package/Tests.meta +8 -8
- package/Third Party Notices.md.meta +7 -7
- package/package.json +36 -36
- package/package.json.meta +7 -7
|
@@ -1,310 +1,373 @@
|
|
|
1
|
-
namespace DxMessaging.Tests.Runtime.Benchmarks
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.
|
|
5
|
-
using
|
|
6
|
-
using Core;
|
|
7
|
-
using DxMessaging.Core;
|
|
8
|
-
using
|
|
9
|
-
using global::Unity.
|
|
10
|
-
using NUnit.Framework;
|
|
11
|
-
using Scripts.Components;
|
|
12
|
-
using Scripts.Messages;
|
|
13
|
-
using UnityEngine;
|
|
14
|
-
using UnityEngine.
|
|
15
|
-
using Debug = UnityEngine.Debug;
|
|
16
|
-
using Object = UnityEngine.Object;
|
|
17
|
-
|
|
18
|
-
public sealed class PerformanceTests : MessagingTestBase
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
timer.
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Benchmarks
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Diagnostics;
|
|
5
|
+
using Core;
|
|
6
|
+
using DxMessaging.Core;
|
|
7
|
+
using DxMessaging.Core.Extensions;
|
|
8
|
+
using global::Unity.PerformanceTesting;
|
|
9
|
+
using global::Unity.Profiling;
|
|
10
|
+
using NUnit.Framework;
|
|
11
|
+
using Scripts.Components;
|
|
12
|
+
using Scripts.Messages;
|
|
13
|
+
using UnityEngine;
|
|
14
|
+
using UnityEngine.Profiling;
|
|
15
|
+
using Debug = UnityEngine.Debug;
|
|
16
|
+
using Object = UnityEngine.Object;
|
|
17
|
+
|
|
18
|
+
public sealed class PerformanceTests : MessagingTestBase
|
|
19
|
+
{
|
|
20
|
+
internal static string FormatBytes(long bytes)
|
|
21
|
+
{
|
|
22
|
+
if (bytes < 1024)
|
|
23
|
+
{
|
|
24
|
+
return $"{bytes} B";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
string[] sizes = { "KB", "MB", "GB", "TB", "PB", "EB" };
|
|
28
|
+
double len = bytes;
|
|
29
|
+
int order = 0;
|
|
30
|
+
|
|
31
|
+
while (1024 <= len && order < sizes.Length - 1)
|
|
32
|
+
{
|
|
33
|
+
len /= 1024;
|
|
34
|
+
order++;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return $"{len:0.##} {sizes[order]}";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
[SetUp]
|
|
41
|
+
public override void Setup()
|
|
42
|
+
{
|
|
43
|
+
base.Setup();
|
|
44
|
+
MessagingDebug.LogFunction = (_, _) => { };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
[Test]
|
|
48
|
+
public void Benchmark()
|
|
49
|
+
{
|
|
50
|
+
TimeSpan timeout = TimeSpan.FromSeconds(2);
|
|
51
|
+
|
|
52
|
+
Debug.Log("| Message Tech | Operations / Second | Memory Allocated |");
|
|
53
|
+
Debug.Log("| ------------ | ------------------- | --------------- |");
|
|
54
|
+
|
|
55
|
+
ComplexTargetedMessage message = new(Guid.NewGuid());
|
|
56
|
+
Stopwatch timer = Stopwatch.StartNew();
|
|
57
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
58
|
+
ProfilerCategory.Memory,
|
|
59
|
+
"GC.Alloc"
|
|
60
|
+
);
|
|
61
|
+
recorder.Stop();
|
|
62
|
+
RunTest(component => Unity(timer, timeout, component.gameObject, message));
|
|
63
|
+
RunTest(component => NormalGameObject(timer, timeout, component, message));
|
|
64
|
+
RunTest(component => NormalComponent(timer, timeout, component, message));
|
|
65
|
+
RunTest(component => NoCopyGameObject(timer, timeout, component, message));
|
|
66
|
+
RunTest(component => NoCopyComponent(timer, timeout, component, message));
|
|
67
|
+
|
|
68
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
69
|
+
RunTest(component => NoCopyUntargeted(timer, timeout, component, untargetedMessage));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[Test]
|
|
73
|
+
[Performance]
|
|
74
|
+
public void BenchmarkBroadcast()
|
|
75
|
+
{
|
|
76
|
+
GameObject go = CreateGameObject();
|
|
77
|
+
MessageRegistrationToken token = GetToken(
|
|
78
|
+
go.GetComponent<EmptyMessageAwareComponent>()
|
|
79
|
+
);
|
|
80
|
+
int count = 0;
|
|
81
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(go, Handle);
|
|
82
|
+
|
|
83
|
+
SimpleBroadcastMessage message = new();
|
|
84
|
+
|
|
85
|
+
Measure
|
|
86
|
+
.Method(() => message.EmitGameObjectBroadcast(go))
|
|
87
|
+
.WarmupCount(10)
|
|
88
|
+
.IterationsPerMeasurement(10)
|
|
89
|
+
.MeasurementCount(1_000)
|
|
90
|
+
.Run();
|
|
91
|
+
return;
|
|
92
|
+
|
|
93
|
+
void Handle(SimpleBroadcastMessage _)
|
|
94
|
+
{
|
|
95
|
+
++count;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
[Test]
|
|
100
|
+
[Performance]
|
|
101
|
+
public void BenchmarkTargeted()
|
|
102
|
+
{
|
|
103
|
+
GameObject go = CreateGameObject();
|
|
104
|
+
MessageRegistrationToken token = GetToken(
|
|
105
|
+
go.GetComponent<EmptyMessageAwareComponent>()
|
|
106
|
+
);
|
|
107
|
+
int count = 0;
|
|
108
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(go, Handle);
|
|
109
|
+
|
|
110
|
+
SimpleTargetedMessage message = new();
|
|
111
|
+
|
|
112
|
+
Measure
|
|
113
|
+
.Method(() => message.EmitGameObjectTargeted(go))
|
|
114
|
+
.WarmupCount(10)
|
|
115
|
+
.IterationsPerMeasurement(10)
|
|
116
|
+
.MeasurementCount(1_000)
|
|
117
|
+
.Run();
|
|
118
|
+
return;
|
|
119
|
+
|
|
120
|
+
void Handle(SimpleTargetedMessage _)
|
|
121
|
+
{
|
|
122
|
+
++count;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
[Test]
|
|
127
|
+
[Performance]
|
|
128
|
+
public void BenchmarkUntargeted()
|
|
129
|
+
{
|
|
130
|
+
GameObject go = CreateGameObject();
|
|
131
|
+
MessageRegistrationToken token = GetToken(
|
|
132
|
+
go.GetComponent<EmptyMessageAwareComponent>()
|
|
133
|
+
);
|
|
134
|
+
int count = 0;
|
|
135
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(Handle);
|
|
136
|
+
|
|
137
|
+
SimpleUntargetedMessage message = new();
|
|
138
|
+
|
|
139
|
+
Measure
|
|
140
|
+
.Method(() => message.EmitUntargeted())
|
|
141
|
+
.WarmupCount(10)
|
|
142
|
+
.IterationsPerMeasurement(10)
|
|
143
|
+
.MeasurementCount(1_000)
|
|
144
|
+
.Run();
|
|
145
|
+
return;
|
|
146
|
+
|
|
147
|
+
void Handle(SimpleUntargetedMessage _)
|
|
148
|
+
{
|
|
149
|
+
++count;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private GameObject CreateGameObject()
|
|
154
|
+
{
|
|
155
|
+
GameObject target = new(
|
|
156
|
+
nameof(Benchmark),
|
|
157
|
+
typeof(EmptyMessageAwareComponent),
|
|
158
|
+
typeof(SpriteRenderer),
|
|
159
|
+
typeof(Rigidbody2D),
|
|
160
|
+
typeof(CircleCollider2D),
|
|
161
|
+
typeof(LineRenderer)
|
|
162
|
+
);
|
|
163
|
+
_spawned.Add(target);
|
|
164
|
+
|
|
165
|
+
return target;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private static void DisplayCount(
|
|
169
|
+
string testName,
|
|
170
|
+
int count,
|
|
171
|
+
TimeSpan timeout,
|
|
172
|
+
long memoryUsed
|
|
173
|
+
)
|
|
174
|
+
{
|
|
175
|
+
Debug.Log(
|
|
176
|
+
$"| {testName} | {Math.Floor(count / timeout.TotalSeconds):N0} | {FormatBytes(Math.Max(memoryUsed, 0))} |"
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private void RunTest(Action<EmptyMessageAwareComponent> test)
|
|
181
|
+
{
|
|
182
|
+
GameObject go = CreateGameObject();
|
|
183
|
+
try
|
|
184
|
+
{
|
|
185
|
+
test(go.GetComponent<EmptyMessageAwareComponent>());
|
|
186
|
+
}
|
|
187
|
+
finally
|
|
188
|
+
{
|
|
189
|
+
_spawned.Remove(go);
|
|
190
|
+
Object.Destroy(go);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private static void Unity(
|
|
195
|
+
Stopwatch timer,
|
|
196
|
+
TimeSpan timeout,
|
|
197
|
+
GameObject target,
|
|
198
|
+
ComplexTargetedMessage message
|
|
199
|
+
)
|
|
200
|
+
{
|
|
201
|
+
int count = 0;
|
|
202
|
+
var component = target.AddComponent<SimpleMessageAwareComponent>();
|
|
203
|
+
component.slowComplexTargetedHandler = () => ++count;
|
|
204
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
205
|
+
ProfilerCategory.Memory,
|
|
206
|
+
"GC.Alloc"
|
|
207
|
+
);
|
|
208
|
+
timer.Restart();
|
|
209
|
+
do
|
|
210
|
+
{
|
|
211
|
+
target.SendMessage(
|
|
212
|
+
nameof(SimpleMessageAwareComponent.HandleSlowComplexTargetedMessage),
|
|
213
|
+
message
|
|
214
|
+
);
|
|
215
|
+
} while (timer.Elapsed < timeout);
|
|
216
|
+
recorder.Stop();
|
|
217
|
+
DisplayCount("Unity", count, timeout, recorder.LastValue);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
private void NormalGameObject(
|
|
221
|
+
Stopwatch timer,
|
|
222
|
+
TimeSpan timeout,
|
|
223
|
+
EmptyMessageAwareComponent component,
|
|
224
|
+
ComplexTargetedMessage message
|
|
225
|
+
)
|
|
226
|
+
{
|
|
227
|
+
int count = 0;
|
|
228
|
+
var token = GetToken(component);
|
|
229
|
+
|
|
230
|
+
GameObject go = component.gameObject;
|
|
231
|
+
token.RegisterGameObjectTargeted<ComplexTargetedMessage>(go, Handle);
|
|
232
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
233
|
+
ProfilerCategory.Memory,
|
|
234
|
+
"GC.Alloc"
|
|
235
|
+
);
|
|
236
|
+
timer.Restart();
|
|
237
|
+
do
|
|
238
|
+
{
|
|
239
|
+
message.EmitGameObjectTargeted(go);
|
|
240
|
+
} while (timer.Elapsed < timeout);
|
|
241
|
+
|
|
242
|
+
recorder.Stop();
|
|
243
|
+
DisplayCount("DxMessaging (GameObject) - Normal", count, timeout, recorder.LastValue);
|
|
244
|
+
return;
|
|
245
|
+
|
|
246
|
+
void Handle(ComplexTargetedMessage _)
|
|
247
|
+
{
|
|
248
|
+
++count;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
private void NormalComponent(
|
|
253
|
+
Stopwatch timer,
|
|
254
|
+
TimeSpan timeout,
|
|
255
|
+
EmptyMessageAwareComponent component,
|
|
256
|
+
ComplexTargetedMessage message
|
|
257
|
+
)
|
|
258
|
+
{
|
|
259
|
+
int count = 0;
|
|
260
|
+
var token = GetToken(component);
|
|
261
|
+
|
|
262
|
+
token.RegisterComponentTargeted<ComplexTargetedMessage>(component, Handle);
|
|
263
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
264
|
+
ProfilerCategory.Memory,
|
|
265
|
+
"GC.Alloc"
|
|
266
|
+
);
|
|
267
|
+
timer.Restart();
|
|
268
|
+
do
|
|
269
|
+
{
|
|
270
|
+
message.EmitComponentTargeted(component);
|
|
271
|
+
} while (timer.Elapsed < timeout);
|
|
272
|
+
recorder.Stop();
|
|
273
|
+
DisplayCount("DxMessaging (Component) - Normal", count, timeout, recorder.LastValue);
|
|
274
|
+
return;
|
|
275
|
+
|
|
276
|
+
void Handle(ComplexTargetedMessage _)
|
|
277
|
+
{
|
|
278
|
+
++count;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
private void NoCopyGameObject(
|
|
283
|
+
Stopwatch timer,
|
|
284
|
+
TimeSpan timeout,
|
|
285
|
+
EmptyMessageAwareComponent component,
|
|
286
|
+
ComplexTargetedMessage message
|
|
287
|
+
)
|
|
288
|
+
{
|
|
289
|
+
int count = 0;
|
|
290
|
+
var token = GetToken(component);
|
|
291
|
+
|
|
292
|
+
GameObject go = component.gameObject;
|
|
293
|
+
token.RegisterGameObjectTargeted<ComplexTargetedMessage>(go, Handle);
|
|
294
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
295
|
+
ProfilerCategory.Memory,
|
|
296
|
+
"GC.Alloc"
|
|
297
|
+
);
|
|
298
|
+
timer.Restart();
|
|
299
|
+
do
|
|
300
|
+
{
|
|
301
|
+
message.EmitGameObjectTargeted(component.gameObject);
|
|
302
|
+
} while (timer.Elapsed < timeout);
|
|
303
|
+
recorder.Stop();
|
|
304
|
+
DisplayCount("DxMessaging (GameObject) - No-Copy", count, timeout, recorder.LastValue);
|
|
305
|
+
return;
|
|
306
|
+
|
|
307
|
+
void Handle(ref ComplexTargetedMessage _)
|
|
308
|
+
{
|
|
309
|
+
++count;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
private void NoCopyComponent(
|
|
314
|
+
Stopwatch timer,
|
|
315
|
+
TimeSpan timeout,
|
|
316
|
+
EmptyMessageAwareComponent component,
|
|
317
|
+
ComplexTargetedMessage message
|
|
318
|
+
)
|
|
319
|
+
{
|
|
320
|
+
int count = 0;
|
|
321
|
+
var token = GetToken(component);
|
|
322
|
+
|
|
323
|
+
token.RegisterComponentTargeted<ComplexTargetedMessage>(component, Handle);
|
|
324
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
325
|
+
ProfilerCategory.Memory,
|
|
326
|
+
"GC.Alloc"
|
|
327
|
+
);
|
|
328
|
+
timer.Restart();
|
|
329
|
+
do
|
|
330
|
+
{
|
|
331
|
+
message.EmitComponentTargeted(component);
|
|
332
|
+
} while (timer.Elapsed < timeout);
|
|
333
|
+
recorder.Stop();
|
|
334
|
+
DisplayCount("DxMessaging (Component) - No-Copy", count, timeout, recorder.LastValue);
|
|
335
|
+
return;
|
|
336
|
+
|
|
337
|
+
void Handle(ref ComplexTargetedMessage _)
|
|
338
|
+
{
|
|
339
|
+
++count;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
private void NoCopyUntargeted(
|
|
344
|
+
Stopwatch timer,
|
|
345
|
+
TimeSpan timeout,
|
|
346
|
+
EmptyMessageAwareComponent component,
|
|
347
|
+
SimpleUntargetedMessage message
|
|
348
|
+
)
|
|
349
|
+
{
|
|
350
|
+
int count = 0;
|
|
351
|
+
var token = GetToken(component);
|
|
352
|
+
|
|
353
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(Handle);
|
|
354
|
+
ProfilerRecorder recorder = ProfilerRecorder.StartNew(
|
|
355
|
+
ProfilerCategory.Memory,
|
|
356
|
+
"GC.Alloc"
|
|
357
|
+
);
|
|
358
|
+
timer.Restart();
|
|
359
|
+
do
|
|
360
|
+
{
|
|
361
|
+
message.EmitUntargeted();
|
|
362
|
+
} while (timer.Elapsed < timeout);
|
|
363
|
+
recorder.Stop();
|
|
364
|
+
DisplayCount("DxMessaging (Untargeted) - No-Copy", count, timeout, recorder.LastValue);
|
|
365
|
+
return;
|
|
366
|
+
|
|
367
|
+
void Handle(ref SimpleUntargetedMessage _)
|
|
368
|
+
{
|
|
369
|
+
++count;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|