Skip to content

Commit f047003

Browse files
Josie MessaBenoit Doyonbendoyon
authored
fix: Only track custom messages when they are actually sent (#1289)
Co-authored-by: Benoit Doyon <[email protected]> Co-authored-by: Benoit Doyon <[email protected]>
1 parent bff71a5 commit f047003

File tree

4 files changed

+99
-81
lines changed

4 files changed

+99
-81
lines changed

com.unity.netcode.gameobjects/Runtime/Messaging/CustomMessageManager.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ public void SendUnnamedMessage(List<ulong> clientIds, FastBufferWriter messageBu
6262
};
6363
var size = m_NetworkManager.SendMessage(message, networkDelivery, clientIds);
6464

65-
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageSent(clientIds, size);
65+
// Size is zero if we were only sending the message to ourself in which case it isn't sent.
66+
if (size != 0)
67+
{
68+
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageSent(clientIds, size);
69+
}
6670
}
6771

6872
/// <summary>
@@ -78,7 +82,11 @@ public void SendUnnamedMessage(ulong clientId, FastBufferWriter messageBuffer, N
7882
Data = messageBuffer
7983
};
8084
var size = m_NetworkManager.SendMessage(message, networkDelivery, clientId);
81-
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageSent(clientId, size);
85+
// Size is zero if we were only sending the message to ourself in which case it isn't sent.
86+
if (size != 0)
87+
{
88+
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageSent(clientId, size);
89+
}
8290
}
8391

8492
/// <summary>
@@ -193,7 +201,12 @@ public void SendNamedMessage(string messageName, ulong clientId, FastBufferWrite
193201
Data = messageStream
194202
};
195203
var size = m_NetworkManager.SendMessage(message, networkDelivery, clientId);
196-
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientId, messageName, size);
204+
205+
// Size is zero if we were only sending the message to ourself in which case it isn't sent.
206+
if (size != 0)
207+
{
208+
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientId, messageName, size);
209+
}
197210
}
198211

199212
/// <summary>
@@ -226,7 +239,12 @@ public void SendNamedMessage(string messageName, List<ulong> clientIds, FastBuff
226239
Data = messageStream
227240
};
228241
var size = m_NetworkManager.SendMessage(message, networkDelivery, clientIds);
229-
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientIds, messageName, size);
242+
243+
// Size is zero if we were only sending the message to ourself in which case it isn't sent.
244+
if (size != 0)
245+
{
246+
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientIds, messageName, size);
247+
}
230248
}
231249
}
232250
}

com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MessagingMetricsTests.cs

Lines changed: 59 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
using System;
33
using System.Collections;
44
using System.Collections.Generic;
5-
using System.IO;
65
using System.Linq;
7-
using System.Text;
86
using NUnit.Framework;
97
using Unity.Collections;
108
using Unity.Multiplayer.Tools.MetricTypes;
@@ -28,17 +26,12 @@ public IEnumerator TrackNetworkMessageSentMetric()
2826
var waitForMetricValues = new WaitForMetricValues<NetworkMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent);
2927

3028
var messageName = Guid.NewGuid();
31-
var writer = new FastBufferWriter(1300, Allocator.Temp);
32-
try
29+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
3330
{
3431
writer.WriteValueSafe(messageName);
35-
32+
3633
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), FirstClient.LocalClientId, writer);
3734
}
38-
finally
39-
{
40-
writer.Dispose();
41-
}
4235

4336
yield return waitForMetricValues.WaitForMetricsReceived();
4437

@@ -55,18 +48,13 @@ public IEnumerator TrackNetworkMessageSentMetricToMultipleClients()
5548
{
5649
var waitForMetricValues = new WaitForMetricValues<NetworkMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent);
5750
var messageName = Guid.NewGuid();
58-
var writer = new FastBufferWriter(1300, Allocator.Temp);
59-
try
51+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
6052
{
6153
writer.WriteValueSafe(messageName);
62-
54+
6355
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), new List<ulong> { FirstClient.LocalClientId, SecondClient.LocalClientId }, writer);
6456
}
65-
finally
66-
{
67-
writer.Dispose();
68-
}
69-
57+
7058

7159
yield return waitForMetricValues.WaitForMetricsReceived();
7260

@@ -78,24 +66,19 @@ public IEnumerator TrackNetworkMessageSentMetricToMultipleClients()
7866
public IEnumerator TrackNetworkMessageReceivedMetric()
7967
{
8068
var messageName = Guid.NewGuid();
81-
var writer = new FastBufferWriter(1300, Allocator.Temp);
69+
8270
LogAssert.Expect(LogType.Log, $"Received from {Server.LocalClientId}");
8371
FirstClient.CustomMessagingManager.RegisterNamedMessageHandler(messageName.ToString(), (ulong sender, FastBufferReader payload) =>
8472
{
8573
Debug.Log($"Received from {sender}");
8674
});
8775
var waitForMetricValues = new WaitForMetricValues<NetworkMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageReceived);
88-
89-
try
76+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
9077
{
9178
writer.WriteValueSafe(messageName);
92-
79+
9380
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), FirstClient.LocalClientId, writer);
9481
}
95-
finally
96-
{
97-
writer.Dispose();
98-
}
9982

10083
yield return waitForMetricValues.WaitForMetricsReceived();
10184

@@ -110,19 +93,14 @@ public IEnumerator TrackNetworkMessageReceivedMetric()
11093
public IEnumerator TrackNamedMessageSentMetric()
11194
{
11295
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
113-
96+
11497
var messageName = Guid.NewGuid();
115-
var writer = new FastBufferWriter(1300, Allocator.Temp);
116-
try
98+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
11799
{
118100
writer.WriteValueSafe(messageName);
119-
101+
120102
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), FirstClient.LocalClientId, writer);
121103
}
122-
finally
123-
{
124-
writer.Dispose();
125-
}
126104

127105

128106
yield return waitForMetricValues.WaitForMetricsReceived();
@@ -141,18 +119,13 @@ public IEnumerator TrackNamedMessageSentMetricToMultipleClients()
141119
{
142120
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
143121
var messageName = Guid.NewGuid();
144-
var writer = new FastBufferWriter(1300, Allocator.Temp);
145-
try
122+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
146123
{
147124
writer.WriteValueSafe(messageName);
148-
125+
149126
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), new List<ulong> { FirstClient.LocalClientId, SecondClient.LocalClientId }, writer);
150127
}
151-
finally
152-
{
153-
writer.Dispose();
154-
}
155-
128+
156129

157130
yield return waitForMetricValues.WaitForMetricsReceived();
158131

@@ -162,31 +135,43 @@ public IEnumerator TrackNamedMessageSentMetricToMultipleClients()
162135
Assert.That(namedMessageSentMetricValues.Select(x => x.BytesCount), Has.All.EqualTo(FastBufferWriter.GetWriteSize(messageName) + MessageOverhead));
163136
}
164137

138+
[UnityTest]
139+
public IEnumerator TrackNamedMessageSentMetricToSelf()
140+
{
141+
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
142+
var messageName = Guid.NewGuid();
143+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
144+
{
145+
writer.WriteValueSafe(messageName);
146+
147+
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), Server.LocalClientId, writer);
148+
}
149+
150+
yield return waitForMetricValues.WaitForMetricsReceived();
151+
152+
waitForMetricValues.AssertMetricValuesHaveNotBeenFound();
153+
}
154+
165155
[UnityTest]
166156
public IEnumerator TrackNamedMessageReceivedMetric()
167157
{
168158
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NamedMessageReceived);
169-
159+
170160
var messageName = Guid.NewGuid();
171-
161+
172162
LogAssert.Expect(LogType.Log, $"Received from {Server.LocalClientId}");
173163
FirstClient.CustomMessagingManager.RegisterNamedMessageHandler(messageName.ToString(), (ulong sender, FastBufferReader payload) =>
174164
{
175165
Debug.Log($"Received from {sender}");
176166
});
177167

178-
var writer = new FastBufferWriter(1300, Allocator.Temp);
179-
try
168+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
180169
{
181170
writer.WriteValueSafe(messageName);
182-
171+
183172
Server.CustomMessagingManager.SendNamedMessage(messageName.ToString(), FirstClient.LocalClientId, writer);
184173
}
185-
finally
186-
{
187-
writer.Dispose();
188-
}
189-
174+
190175

191176
yield return waitForMetricValues.WaitForMetricsReceived();
192177

@@ -203,17 +188,12 @@ public IEnumerator TrackNamedMessageReceivedMetric()
203188
public IEnumerator TrackUnnamedMessageSentMetric()
204189
{
205190
var message = Guid.NewGuid();
206-
var writer = new FastBufferWriter(1300, Allocator.Temp);
207-
try
191+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
208192
{
209193
writer.WriteValueSafe(message);
210-
194+
211195
Server.CustomMessagingManager.SendUnnamedMessage(FirstClient.LocalClientId, writer);
212196
}
213-
finally
214-
{
215-
writer.Dispose();
216-
}
217197

218198

219199
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
@@ -232,18 +212,13 @@ public IEnumerator TrackUnnamedMessageSentMetric()
232212
public IEnumerator TrackUnnamedMessageSentMetricToMultipleClients()
233213
{
234214
var message = Guid.NewGuid();
235-
var writer = new FastBufferWriter(1300, Allocator.Temp);
236215
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
237-
try
216+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
238217
{
239218
writer.WriteValueSafe(message);
240-
219+
241220
Server.CustomMessagingManager.SendUnnamedMessage(new List<ulong> { FirstClient.LocalClientId, SecondClient.LocalClientId }, writer);
242221
}
243-
finally
244-
{
245-
writer.Dispose();
246-
}
247222

248223

249224
yield return waitForMetricValues.WaitForMetricsReceived();
@@ -257,22 +232,34 @@ public IEnumerator TrackUnnamedMessageSentMetricToMultipleClients()
257232
Assert.Contains(SecondClient.LocalClientId, clientIds);
258233
}
259234

235+
[UnityTest]
236+
public IEnumerator TrackUnnamedMessageSentMetricToSelf()
237+
{
238+
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
239+
var messageName = Guid.NewGuid();
240+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
241+
{
242+
writer.WriteValueSafe(messageName);
243+
244+
Server.CustomMessagingManager.SendUnnamedMessage(Server.LocalClientId, writer);
245+
}
246+
247+
yield return waitForMetricValues.WaitForMetricsReceived();
248+
249+
waitForMetricValues.AssertMetricValuesHaveNotBeenFound();
250+
}
251+
260252
[UnityTest]
261253
public IEnumerator TrackUnnamedMessageReceivedMetric()
262254
{
263255
var message = Guid.NewGuid();
264-
var writer = new FastBufferWriter(1300, Allocator.Temp);
265256
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageReceived);
266-
try
257+
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
267258
{
268259
writer.WriteValueSafe(message);
269-
260+
270261
Server.CustomMessagingManager.SendUnnamedMessage(FirstClient.LocalClientId, writer);
271262
}
272-
finally
273-
{
274-
writer.Dispose();
275-
}
276263

277264
yield return waitForMetricValues.WaitForMetricsReceived();
278265

com.unity.netcode.gameobjects/Tests/Runtime/Metrics/MetricsDispatchTests.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,7 @@ private void AdvanceTicks(int numTicks)
150150

151151
private void SendMetric()
152152
{
153-
var writer = new FastBufferWriter(1300, Allocator.Temp);
154-
using (writer)
155-
{
156-
m_NetworkManager.CustomMessagingManager.SendNamedMessage("FakeMetric", m_NetworkManager.LocalClientId, writer);
157-
}
153+
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(0, "message-name", 1);
158154
}
159155

160156
}

com.unity.netcode.gameobjects/Tests/Runtime/Metrics/Utility/WaitForMetricValues.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,23 @@ public IReadOnlyCollection<TMetric> AssertMetricValuesHaveBeenFound()
5555
return m_Values;
5656
}
5757

58+
public void AssertMetricValuesHaveNotBeenFound()
59+
{
60+
if (m_HasError)
61+
{
62+
Assert.Fail(m_Error);
63+
}
64+
65+
if (!m_Found)
66+
{
67+
Assert.Pass();
68+
}
69+
else
70+
{
71+
Assert.Fail();
72+
}
73+
}
74+
5875
public void Observe(MetricCollection collection)
5976
{
6077
if (m_Found || m_HasError)

0 commit comments

Comments
 (0)