com.wallstop-studios.dxmessaging 1.0.0-rc10
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 -0
- package/CHANGELOG.md +0 -0
- package/CHANGELOG.md.meta +7 -0
- package/Editor.meta +8 -0
- package/LICENSE.md +7 -0
- package/LICENSE.md.meta +7 -0
- package/README.md +76 -0
- package/README.md.meta +7 -0
- package/Runtime/Core/Extensions/MessageExtensions.cs +275 -0
- package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -0
- package/Runtime/Core/Extensions.meta +8 -0
- package/Runtime/Core/IMessage.cs +12 -0
- package/Runtime/Core/IMessage.cs.meta +11 -0
- package/Runtime/Core/InstanceId.cs +117 -0
- package/Runtime/Core/InstanceId.cs.meta +11 -0
- package/Runtime/Core/MessageBus/IMessageBus.cs +249 -0
- package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -0
- package/Runtime/Core/MessageBus/MessageBus.cs +961 -0
- package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -0
- package/Runtime/Core/MessageBus/MessagingRegistration.cs +100 -0
- package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -0
- package/Runtime/Core/MessageBus/RegistrationLog.cs +111 -0
- package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -0
- package/Runtime/Core/MessageBus.meta +8 -0
- package/Runtime/Core/MessageHandler.cs +1589 -0
- package/Runtime/Core/MessageHandler.cs.meta +11 -0
- package/Runtime/Core/MessageRegistrationHandle.cs +55 -0
- package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -0
- package/Runtime/Core/MessageRegistrationToken.cs +885 -0
- package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -0
- package/Runtime/Core/Messages/IBroadcastMessage.cs +27 -0
- package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -0
- package/Runtime/Core/Messages/ITargetedMessage.cs +26 -0
- package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -0
- package/Runtime/Core/Messages/IUntargetedMessage.cs +26 -0
- package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -0
- package/Runtime/Core/Messages.meta +8 -0
- package/Runtime/Core/MessagingDebug.cs +71 -0
- package/Runtime/Core/MessagingDebug.cs.meta +11 -0
- package/Runtime/Core.meta +8 -0
- package/Runtime/Unity/MessageAwareComponent.cs +77 -0
- package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -0
- package/Runtime/Unity/MessagingComponent.cs +73 -0
- package/Runtime/Unity/MessagingComponent.cs.meta +11 -0
- package/Runtime/Unity.meta +8 -0
- package/Runtime/WallstopStudios.DxMessaging.asmdef +18 -0
- package/Runtime/WallstopStudios.DxMessaging.asmdef.meta +7 -0
- package/Runtime.meta +8 -0
- package/Tests/Editor/WallstopStudios.DxMessaging.Tests.Editor.asmdef +23 -0
- package/Tests/Editor/WallstopStudios.DxMessaging.Tests.Editor.asmdef.meta +7 -0
- package/Tests/Editor.meta +8 -0
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs +196 -0
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks.meta +8 -0
- package/Tests/Runtime/Core/BroadcastTests.cs +600 -0
- package/Tests/Runtime/Core/BroadcastTests.cs.meta +11 -0
- package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +169 -0
- package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessagingTestBase.cs +164 -0
- package/Tests/Runtime/Core/MessagingTestBase.cs.meta +11 -0
- package/Tests/Runtime/Core/NominalTests.cs +1468 -0
- package/Tests/Runtime/Core/NominalTests.cs.meta +11 -0
- package/Tests/Runtime/Core/PostProcessorTests.cs +849 -0
- package/Tests/Runtime/Core/PostProcessorTests.cs.meta +11 -0
- package/Tests/Runtime/Core/RegistrationTests.cs +1045 -0
- package/Tests/Runtime/Core/RegistrationTests.cs.meta +11 -0
- package/Tests/Runtime/Core/TargetedTests.cs +596 -0
- package/Tests/Runtime/Core/TargetedTests.cs.meta +11 -0
- package/Tests/Runtime/Core/UntargetedTests.cs +149 -0
- package/Tests/Runtime/Core/UntargetedTests.cs.meta +11 -0
- package/Tests/Runtime/Core.meta +8 -0
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +9 -0
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +11 -0
- package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +140 -0
- package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs.meta +11 -0
- package/Tests/Runtime/Scripts/Components.meta +8 -0
- package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +28 -0
- package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs.meta +11 -0
- package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +8 -0
- package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs.meta +11 -0
- package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +8 -0
- package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs.meta +11 -0
- package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +8 -0
- package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs.meta +11 -0
- package/Tests/Runtime/Scripts/Messages.meta +8 -0
- package/Tests/Runtime/Scripts.meta +8 -0
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef +22 -0
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef.meta +7 -0
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj +1 -0
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +7 -0
- package/Tests/Runtime.meta +8 -0
- package/Tests.meta +8 -0
- package/Third Party Notices.md +1 -0
- package/Third Party Notices.md.meta +7 -0
- package/package.json +36 -0
- package/package.json.meta +7 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Benchmarks
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections;
|
|
5
|
+
using System.Diagnostics;
|
|
6
|
+
using Core;
|
|
7
|
+
using DxMessaging.Core;
|
|
8
|
+
using DxMessaging.Core.Extensions;
|
|
9
|
+
using NUnit.Framework;
|
|
10
|
+
using Scripts.Components;
|
|
11
|
+
using Scripts.Messages;
|
|
12
|
+
using UnityEngine;
|
|
13
|
+
using UnityEngine.TestTools;
|
|
14
|
+
using Debug = UnityEngine.Debug;
|
|
15
|
+
using Object = UnityEngine.Object;
|
|
16
|
+
|
|
17
|
+
public sealed class PerformanceTests : MessagingTestBase
|
|
18
|
+
{
|
|
19
|
+
[SetUp]
|
|
20
|
+
public override void Setup()
|
|
21
|
+
{
|
|
22
|
+
base.Setup();
|
|
23
|
+
MessagingDebug.LogFunction = (_1, _2) => { };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
[UnityTest]
|
|
27
|
+
public IEnumerator Benchmark()
|
|
28
|
+
{
|
|
29
|
+
TimeSpan timeout = TimeSpan.FromSeconds(1);
|
|
30
|
+
|
|
31
|
+
Debug.Log("| Message Tech | Operations / Second |");
|
|
32
|
+
Debug.Log("| ------------ | ------------------- |");
|
|
33
|
+
|
|
34
|
+
ComplexTargetedMessage message = new(Guid.NewGuid());
|
|
35
|
+
Stopwatch timer = Stopwatch.StartNew();
|
|
36
|
+
|
|
37
|
+
RunTest(component => Unity(timer, timeout, component.gameObject, message));
|
|
38
|
+
RunTest(component => NormalGameObject(timer, timeout, component, message));
|
|
39
|
+
RunTest(component => NormalComponent(timer, timeout, component, message));
|
|
40
|
+
RunTest(component => NoCopyGameObject(timer, timeout, component, message));
|
|
41
|
+
RunTest(component => NoCopyComponent(timer, timeout, component, message));
|
|
42
|
+
|
|
43
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
44
|
+
RunTest(component => NoCopyUntargeted(timer, timeout, component, untargetedMessage));
|
|
45
|
+
yield break;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private GameObject CreateGameObject()
|
|
49
|
+
{
|
|
50
|
+
GameObject target = new(
|
|
51
|
+
nameof(Benchmark), typeof(EmptyMessageAwareComponent), typeof(SpriteRenderer),
|
|
52
|
+
typeof(Rigidbody2D), typeof(CircleCollider2D), typeof(LineRenderer));
|
|
53
|
+
_spawned.Add(target);
|
|
54
|
+
|
|
55
|
+
return target;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private void DisplayCount(string testName, int count, TimeSpan timeout)
|
|
59
|
+
{
|
|
60
|
+
Debug.Log($"| {testName} | {Math.Floor(count / timeout.TotalSeconds):N0} |");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private void RunTest(Action<EmptyMessageAwareComponent> test)
|
|
64
|
+
{
|
|
65
|
+
GameObject go = CreateGameObject();
|
|
66
|
+
try
|
|
67
|
+
{
|
|
68
|
+
test(go.GetComponent<EmptyMessageAwareComponent>());
|
|
69
|
+
}
|
|
70
|
+
finally
|
|
71
|
+
{
|
|
72
|
+
_spawned.Remove(go);
|
|
73
|
+
Object.Destroy(go);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private void Unity(Stopwatch timer, TimeSpan timeout, GameObject target, ComplexTargetedMessage message)
|
|
78
|
+
{
|
|
79
|
+
int count = 0;
|
|
80
|
+
var component = target.AddComponent<SimpleMessageAwareComponent>();
|
|
81
|
+
component.slowComplexTargetedHandler = () => ++count;
|
|
82
|
+
timer.Restart();
|
|
83
|
+
do
|
|
84
|
+
{
|
|
85
|
+
target.SendMessage(nameof(SimpleMessageAwareComponent.HandleSlowComplexTargetedMessage), message);
|
|
86
|
+
}
|
|
87
|
+
while (timer.Elapsed < timeout);
|
|
88
|
+
DisplayCount("Unity", count, timeout);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private void NormalGameObject(Stopwatch timer, TimeSpan timeout, EmptyMessageAwareComponent component, ComplexTargetedMessage message)
|
|
92
|
+
{
|
|
93
|
+
int count = 0;
|
|
94
|
+
var token = GetToken(component);
|
|
95
|
+
|
|
96
|
+
void Handle(ComplexTargetedMessage _)
|
|
97
|
+
{
|
|
98
|
+
++count;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
GameObject go = component.gameObject;
|
|
102
|
+
token.RegisterGameObjectTargeted<ComplexTargetedMessage>(go, Handle);
|
|
103
|
+
timer.Restart();
|
|
104
|
+
do
|
|
105
|
+
{
|
|
106
|
+
message.EmitGameObjectTargeted(go);
|
|
107
|
+
}
|
|
108
|
+
while (timer.Elapsed < timeout);
|
|
109
|
+
DisplayCount("DxMessaging (GameObject) - Normal", count, timeout);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private void NormalComponent(Stopwatch timer, TimeSpan timeout, EmptyMessageAwareComponent component, ComplexTargetedMessage message)
|
|
113
|
+
{
|
|
114
|
+
int count = 0;
|
|
115
|
+
var token = GetToken(component);
|
|
116
|
+
|
|
117
|
+
void Handle(ComplexTargetedMessage _)
|
|
118
|
+
{
|
|
119
|
+
++count;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
token.RegisterComponentTargeted<ComplexTargetedMessage>(component, Handle);
|
|
123
|
+
timer.Restart();
|
|
124
|
+
do
|
|
125
|
+
{
|
|
126
|
+
message.EmitComponentTargeted(component);
|
|
127
|
+
}
|
|
128
|
+
while (timer.Elapsed < timeout);
|
|
129
|
+
DisplayCount("DxMessaging (Component) - Normal", count, timeout);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private void NoCopyGameObject(Stopwatch timer, TimeSpan timeout, EmptyMessageAwareComponent component, ComplexTargetedMessage message)
|
|
133
|
+
{
|
|
134
|
+
int count = 0;
|
|
135
|
+
var token = GetToken(component);
|
|
136
|
+
|
|
137
|
+
void Handle(ref ComplexTargetedMessage _)
|
|
138
|
+
{
|
|
139
|
+
++count;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
GameObject go = component.gameObject;
|
|
143
|
+
token.RegisterGameObjectTargeted<ComplexTargetedMessage>(go, Handle);
|
|
144
|
+
|
|
145
|
+
timer.Restart();
|
|
146
|
+
do
|
|
147
|
+
{
|
|
148
|
+
message.EmitGameObjectTargeted(component.gameObject);
|
|
149
|
+
}
|
|
150
|
+
while (timer.Elapsed < timeout);
|
|
151
|
+
DisplayCount("DxMessaging (GameObject) - No-Copy", count, timeout);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private void NoCopyComponent(Stopwatch timer, TimeSpan timeout, EmptyMessageAwareComponent component, ComplexTargetedMessage message)
|
|
155
|
+
{
|
|
156
|
+
int count = 0;
|
|
157
|
+
var token = GetToken(component);
|
|
158
|
+
|
|
159
|
+
void Handle(ref ComplexTargetedMessage _)
|
|
160
|
+
{
|
|
161
|
+
++count;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
token.RegisterComponentTargeted<ComplexTargetedMessage>(component, Handle);
|
|
165
|
+
|
|
166
|
+
timer.Restart();
|
|
167
|
+
do
|
|
168
|
+
{
|
|
169
|
+
message.EmitComponentTargeted(component);
|
|
170
|
+
}
|
|
171
|
+
while (timer.Elapsed < timeout);
|
|
172
|
+
DisplayCount("DxMessaging (Component) - No-Copy", count, timeout);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
private void NoCopyUntargeted(Stopwatch timer, TimeSpan timeout, EmptyMessageAwareComponent component, SimpleUntargetedMessage message)
|
|
176
|
+
{
|
|
177
|
+
int count = 0;
|
|
178
|
+
var token = GetToken(component);
|
|
179
|
+
|
|
180
|
+
void Handle(ref SimpleUntargetedMessage _)
|
|
181
|
+
{
|
|
182
|
+
++count;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(Handle);
|
|
186
|
+
|
|
187
|
+
timer.Restart();
|
|
188
|
+
do
|
|
189
|
+
{
|
|
190
|
+
message.EmitUntargeted();
|
|
191
|
+
}
|
|
192
|
+
while (timer.Elapsed < timeout);
|
|
193
|
+
DisplayCount("DxMessaging (Untargeted) - No-Copy", count, timeout);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|