Skip to content

Commit 3f0a1cb

Browse files
chore: Named/Unnamed Message, ServerLogs, and SceneEvents missing mes… (#1316) (#1346)
* chore: Named/Unnamed Message, ServerLogs, and SceneEvents missing message overhead * PR Feedback * PR Feedback Co-authored-by: Andrew Spiering <andrews@unity3d.com> Co-authored-by: kvassall-unity <68920108+kvassall-unity@users.noreply.github.com>
1 parent fb51e53 commit 3f0a1cb

File tree

5 files changed

+29
-22
lines changed

5 files changed

+29
-22
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ internal void InvokeUnnamedMessage(ulong clientId, FastBufferReader reader)
4040
((UnnamedMessageDelegate)handler).Invoke(clientId, reader);
4141
}
4242
}
43-
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageReceived(clientId, reader.Length);
43+
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageReceived(clientId, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
4444
}
4545

4646
/// <summary>
@@ -53,7 +53,6 @@ public void SendUnnamedMessageToAll(FastBufferWriter messageBuffer, NetworkDeliv
5353
SendUnnamedMessage(m_NetworkManager.ConnectedClientsIds, messageBuffer, networkDelivery);
5454
}
5555

56-
5756
/// <summary>
5857
/// Sends unnamed message to a list of clients
5958
/// </summary>
@@ -118,7 +117,7 @@ public void SendUnnamedMessage(ulong clientId, FastBufferWriter messageBuffer, N
118117

119118
internal void InvokeNamedMessage(ulong hash, ulong sender, FastBufferReader reader)
120119
{
121-
var bytesCount = reader.Length;
120+
var bytesCount = reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>();
122121

123122
if (m_NetworkManager == null)
124123
{

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public void HandleMessage(in MessageHeader header, FastBufferReader reader, ulon
226226

227227
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
228228
{
229-
m_Hooks[hookIdx].OnBeforeReceiveMessage(senderId, type, reader.Length);
229+
m_Hooks[hookIdx].OnBeforeReceiveMessage(senderId, type, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
230230
}
231231
var handler = m_MessageHandlers[header.MessageType];
232232
using (reader)
@@ -247,7 +247,7 @@ public void HandleMessage(in MessageHeader header, FastBufferReader reader, ulon
247247
}
248248
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
249249
{
250-
m_Hooks[hookIdx].OnAfterReceiveMessage(senderId, type, reader.Length);
250+
m_Hooks[hookIdx].OnAfterReceiveMessage(senderId, type, reader.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
251251
}
252252
}
253253

@@ -310,8 +310,13 @@ internal unsafe int SendMessage<TMessageType, TClientIdListType>(in TMessageType
310310
where TMessageType : INetworkMessage
311311
where TClientIdListType : IReadOnlyList<ulong>
312312
{
313+
if (clientIds.Count == 0)
314+
{
315+
return 0;
316+
}
317+
313318
var maxSize = delivery == NetworkDelivery.ReliableFragmentedSequenced ? FRAGMENTED_MESSAGE_MAX_SIZE : NON_FRAGMENTED_MESSAGE_MAX_SIZE;
314-
var tmpSerializer = new FastBufferWriter(NON_FRAGMENTED_MESSAGE_MAX_SIZE - sizeof(MessageHeader), Allocator.Temp, maxSize - sizeof(MessageHeader));
319+
var tmpSerializer = new FastBufferWriter(NON_FRAGMENTED_MESSAGE_MAX_SIZE - FastBufferWriter.GetWriteSize<MessageHeader>(), Allocator.Temp, maxSize - FastBufferWriter.GetWriteSize<MessageHeader>());
315320
using (tmpSerializer)
316321
{
317322
message.Serialize(tmpSerializer);
@@ -342,7 +347,7 @@ internal unsafe int SendMessage<TMessageType, TClientIdListType>(in TMessageType
342347
ref var lastQueueItem = ref sendQueueItem.GetUnsafeList()->ElementAt(sendQueueItem.Length - 1);
343348
if (lastQueueItem.NetworkDelivery != delivery ||
344349
lastQueueItem.Writer.MaxCapacity - lastQueueItem.Writer.Position
345-
< tmpSerializer.Length + sizeof(MessageHeader))
350+
< tmpSerializer.Length + FastBufferWriter.GetWriteSize<MessageHeader>())
346351
{
347352
sendQueueItem.Add(new SendQueueItem(delivery, NON_FRAGMENTED_MESSAGE_MAX_SIZE, Allocator.TempJob,
348353
maxSize));
@@ -351,7 +356,7 @@ internal unsafe int SendMessage<TMessageType, TClientIdListType>(in TMessageType
351356
}
352357

353358
ref var writeQueueItem = ref sendQueueItem.GetUnsafeList()->ElementAt(sendQueueItem.Length - 1);
354-
writeQueueItem.Writer.TryBeginWrite(sizeof(MessageHeader) + tmpSerializer.Length);
359+
writeQueueItem.Writer.TryBeginWrite(tmpSerializer.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
355360
var header = new MessageHeader
356361
{
357362
MessageSize = (ushort)tmpSerializer.Length,
@@ -363,11 +368,11 @@ internal unsafe int SendMessage<TMessageType, TClientIdListType>(in TMessageType
363368
writeQueueItem.BatchHeader.BatchSize++;
364369
for (var hookIdx = 0; hookIdx < m_Hooks.Count; ++hookIdx)
365370
{
366-
m_Hooks[hookIdx].OnAfterSendMessage(clientId, typeof(TMessageType), delivery, tmpSerializer.Length + sizeof(MessageHeader));
371+
m_Hooks[hookIdx].OnAfterSendMessage(clientId, typeof(TMessageType), delivery, tmpSerializer.Length + FastBufferWriter.GetWriteSize<MessageHeader>());
367372
}
368373
}
369374

370-
return tmpSerializer.Length;
375+
return tmpSerializer.Length + FastBufferWriter.GetWriteSize<MessageHeader>();
371376
}
372377
}
373378

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ namespace Unity.Netcode.RuntimeTests.Metrics
1414
{
1515
public class MessagingMetricsTests : DualClientMetricTestBase
1616
{
17-
const uint MessageNameHashSize = 8;
18-
19-
const uint MessageOverhead = MessageNameHashSize;
17+
private const uint k_MessageNameHashSize = 8;
18+
private static readonly int k_NamedMessageOverhead = (int)k_MessageNameHashSize + FastBufferWriter.GetWriteSize<MessageHeader>();
19+
private static readonly int k_UnnamedMessageOverhead = FastBufferWriter.GetWriteSize<MessageHeader>();
2020

2121
protected override int NbClients => 2;
2222

@@ -111,7 +111,7 @@ public IEnumerator TrackNamedMessageSentMetric()
111111
var namedMessageSent = namedMessageSentMetricValues.First();
112112
Assert.AreEqual(messageName.ToString(), namedMessageSent.Name);
113113
Assert.AreEqual(FirstClient.LocalClientId, namedMessageSent.Connection.Id);
114-
Assert.AreEqual(FastBufferWriter.GetWriteSize(messageName) + MessageOverhead, namedMessageSent.BytesCount);
114+
Assert.AreEqual(FastBufferWriter.GetWriteSize(messageName) + k_NamedMessageOverhead, namedMessageSent.BytesCount);
115115
}
116116

117117
[UnityTest]
@@ -132,7 +132,7 @@ public IEnumerator TrackNamedMessageSentMetricToMultipleClients()
132132
var namedMessageSentMetricValues = waitForMetricValues.AssertMetricValuesHaveBeenFound();
133133
Assert.AreEqual(2, namedMessageSentMetricValues.Count);
134134
Assert.That(namedMessageSentMetricValues.Select(x => x.Name), Has.All.EqualTo(messageName.ToString()));
135-
Assert.That(namedMessageSentMetricValues.Select(x => x.BytesCount), Has.All.EqualTo(FastBufferWriter.GetWriteSize(messageName) + MessageOverhead));
135+
Assert.That(namedMessageSentMetricValues.Select(x => x.BytesCount), Has.All.EqualTo(FastBufferWriter.GetWriteSize(messageName) + k_NamedMessageOverhead));
136136
}
137137

138138
[UnityTest]
@@ -181,7 +181,7 @@ public IEnumerator TrackNamedMessageReceivedMetric()
181181
var namedMessageReceived = namedMessageReceivedValues.First();
182182
Assert.AreEqual(messageName.ToString(), namedMessageReceived.Name);
183183
Assert.AreEqual(Server.LocalClientId, namedMessageReceived.Connection.Id);
184-
Assert.AreEqual(FastBufferWriter.GetWriteSize(messageName) + MessageOverhead, namedMessageReceived.BytesCount);
184+
Assert.AreEqual(FastBufferWriter.GetWriteSize(messageName) + k_NamedMessageOverhead, namedMessageReceived.BytesCount);
185185
}
186186

187187
[UnityTest]
@@ -205,7 +205,7 @@ public IEnumerator TrackUnnamedMessageSentMetric()
205205

206206
var unnamedMessageSent = unnamedMessageSentMetricValues.First();
207207
Assert.AreEqual(FirstClient.LocalClientId, unnamedMessageSent.Connection.Id);
208-
Assert.AreEqual(FastBufferWriter.GetWriteSize(message), unnamedMessageSent.BytesCount);
208+
Assert.AreEqual(FastBufferWriter.GetWriteSize(message) + k_UnnamedMessageOverhead, unnamedMessageSent.BytesCount);
209209
}
210210

211211
[UnityTest]
@@ -225,7 +225,7 @@ public IEnumerator TrackUnnamedMessageSentMetricToMultipleClients()
225225

226226
var unnamedMessageSentMetricValues = waitForMetricValues.AssertMetricValuesHaveBeenFound();
227227
Assert.AreEqual(2, unnamedMessageSentMetricValues.Count);
228-
Assert.That(unnamedMessageSentMetricValues.Select(x => x.BytesCount), Has.All.EqualTo(FastBufferWriter.GetWriteSize(message)));
228+
Assert.That(unnamedMessageSentMetricValues.Select(x => x.BytesCount), Has.All.EqualTo(FastBufferWriter.GetWriteSize(message) + k_UnnamedMessageOverhead));
229229

230230
var clientIds = unnamedMessageSentMetricValues.Select(x => x.Connection.Id).ToList();
231231
Assert.Contains(FirstClient.LocalClientId, clientIds);
@@ -268,7 +268,7 @@ public IEnumerator TrackUnnamedMessageReceivedMetric()
268268

269269
var unnamedMessageReceived = unnamedMessageReceivedValues.First();
270270
Assert.AreEqual(Server.LocalClientId, unnamedMessageReceived.Connection.Id);
271-
Assert.AreEqual(FastBufferWriter.GetWriteSize(message), unnamedMessageReceived.BytesCount);
271+
Assert.AreEqual(FastBufferWriter.GetWriteSize(message) + k_UnnamedMessageOverhead, unnamedMessageReceived.BytesCount);
272272
}
273273
}
274274
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public IEnumerator TrackOwnershipChangeSentMetric()
5858
var ownershipChangeSent = metricValues.First();
5959
Assert.AreEqual(networkObject.NetworkObjectId, ownershipChangeSent.NetworkId.NetworkId);
6060
Assert.AreEqual(Server.LocalClientId, ownershipChangeSent.Connection.Id);
61-
Assert.AreEqual(FastBufferWriter.GetWriteSize<ChangeOwnershipMessage>(), ownershipChangeSent.BytesCount);
61+
Assert.AreEqual(FastBufferWriter.GetWriteSize<ChangeOwnershipMessage>() + FastBufferWriter.GetWriteSize<MessageHeader>(), ownershipChangeSent.BytesCount);
6262
}
6363

6464
[UnityTest]

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ namespace Unity.Netcode.RuntimeTests.Metrics
1111
{
1212
internal class ServerLogsMetricTests : SingleClientMetricTestBase
1313
{
14+
private static readonly int k_ServerLogSentMessageOverhead = 2 + FastBufferWriter.GetWriteSize<MessageHeader>();
15+
private static readonly int k_ServerLogReceivedMessageOverhead = 2;
16+
1417
[UnityTest]
1518
public IEnumerator TrackServerLogSentMetric()
1619
{
@@ -27,7 +30,7 @@ public IEnumerator TrackServerLogSentMetric()
2730
var sentMetric = sentMetrics.First();
2831
Assert.AreEqual(Server.LocalClientId, sentMetric.Connection.Id);
2932
Assert.AreEqual((uint)NetworkLog.LogType.Warning, (uint)sentMetric.LogLevel);
30-
Assert.AreEqual(message.Length + 2, sentMetric.BytesCount);
33+
Assert.AreEqual(message.Length + k_ServerLogSentMessageOverhead, sentMetric.BytesCount);
3134
}
3235

3336
[UnityTest]
@@ -46,7 +49,7 @@ public IEnumerator TrackServerLogReceivedMetric()
4649
var receivedMetric = receivedMetrics.First();
4750
Assert.AreEqual(Client.LocalClientId, receivedMetric.Connection.Id);
4851
Assert.AreEqual((uint)NetworkLog.LogType.Warning, (uint)receivedMetric.LogLevel);
49-
Assert.AreEqual(message.Length + 2, receivedMetric.BytesCount);
52+
Assert.AreEqual(message.Length + k_ServerLogReceivedMessageOverhead, receivedMetric.BytesCount);
5053
}
5154
}
5255
}

0 commit comments

Comments
 (0)