Skip to content

Commit 16d9850

Browse files
fix: Report messages properly that are locally executed as 0 bytes (#1162)
* fix: Report messages properly that are locally executed as 0 bytes * Fix: we can run tests from internal classes * fix: whitespace * chore: Fixing namespace
1 parent 5513c90 commit 16d9850

18 files changed

+144
-65
lines changed

com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,18 @@ internal void __endSendClientRpc(NetworkSerializer serializer, uint rpcMethodId,
222222
#if DEVELOPMENT_BUILD || UNITY_EDITOR
223223
if (NetworkManager.__rpc_name_table.TryGetValue(rpcMethodId, out var rpcMethodName))
224224
{
225-
NetworkManager.NetworkMetrics.TrackRpcSent(
226-
NetworkManager.ConnectedClients.Select(x => x.Key).ToArray(),
227-
NetworkObjectId,
228-
rpcMethodName,
229-
__getTypeName(),
230-
messageSize);
225+
foreach (var client in NetworkManager.ConnectedClients)
226+
{
227+
var bytesReported = NetworkManager.LocalClientId == client.Key
228+
? 0
229+
: messageSize;
230+
NetworkManager.NetworkMetrics.TrackRpcSent(
231+
client.Key,
232+
NetworkObjectId,
233+
rpcMethodName,
234+
__getTypeName(),
235+
bytesReported);
236+
}
231237
}
232238
#endif
233239
}
@@ -582,13 +588,17 @@ private void NetworkVariableUpdate(ulong clientId, int behaviourIndex)
582588
m_NetworkVariableIndexesToReset.Add(k);
583589
}
584590

591+
var bytesReported = NetworkManager.LocalClientId == clientId
592+
? 0
593+
: bufferSizeCapture.Flush();
594+
585595
NetworkManager.NetworkMetrics.TrackNetworkVariableDeltaSent(
586596
clientId,
587597
NetworkObjectId,
588598
name,
589599
NetworkVariableFields[k].Name,
590600
__getTypeName(),
591-
bufferSizeCapture.Flush());
601+
bytesReported);
592602
}
593603
}
594604

@@ -678,13 +688,17 @@ internal void HandleNetworkVariableDeltas(Stream stream, ulong clientId)
678688
long readStartPos = stream.Position;
679689

680690
NetworkVariableFields[i].ReadDelta(stream, NetworkManager.IsServer);
691+
692+
var bytesReported = NetworkManager.LocalClientId == clientId
693+
? 0
694+
: stream.Length;
681695
NetworkManager.NetworkMetrics.TrackNetworkVariableDeltaReceived(
682696
clientId,
683697
NetworkObjectId,
684698
name,
685699
NetworkVariableFields[i].Name,
686700
__getTypeName(),
687-
stream.Length);
701+
bytesReported);
688702

689703
(stream as NetworkBuffer).SkipPadBits();
690704

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,7 +1199,10 @@ internal void HandleIncomingData(ulong clientId, ArraySegment<byte> payload, flo
11991199
{
12001200
var messageType = (MessageQueueContainer.MessageType)messageStream.ReadByte();
12011201
MessageHandler.MessageReceiveQueueItem(clientId, messageStream, receiveTime, messageType);
1202-
NetworkMetrics.TrackNetworkMessageReceived(clientId, MessageQueueContainer.GetMessageTypeName(messageType), payload.Count);
1202+
var bytesReported = LocalClientId == clientId
1203+
? 0
1204+
: payload.Count;
1205+
NetworkMetrics.TrackNetworkMessageReceived(clientId, MessageQueueContainer.GetMessageTypeName(messageType), bytesReported);
12031206
}
12041207
#if DEVELOPMENT_BUILD || UNITY_EDITOR
12051208
s_HandleIncomingData.End();
@@ -1209,7 +1212,10 @@ internal void HandleIncomingData(ulong clientId, ArraySegment<byte> payload, flo
12091212
private void ReceiveCallback(NetworkBuffer messageBuffer, MessageQueueContainer.MessageType messageType, ulong clientId, float receiveTime)
12101213
{
12111214
MessageHandler.MessageReceiveQueueItem(clientId, messageBuffer, receiveTime, messageType);
1212-
NetworkMetrics.TrackNetworkMessageReceived(clientId, MessageQueueContainer.GetMessageTypeName(messageType), messageBuffer.Length);
1215+
var bytesReported = LocalClientId == clientId
1216+
? 0
1217+
: messageBuffer.Length;
1218+
NetworkMetrics.TrackNetworkMessageReceived(clientId, MessageQueueContainer.GetMessageTypeName(messageType), bytesReported);
12131219
}
12141220

12151221
/// <summary>

com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,10 @@ public void NetworkHide(ulong clientId)
322322
nonNullContext.NetworkWriter.WriteUInt64Packed(NetworkObjectId);
323323

324324
var size = bufferSizeCapture.StopMeasureSegment();
325-
NetworkManager.NetworkMetrics.TrackObjectDestroySent(clientId, NetworkObjectId, name, size);
325+
var bytesReported = NetworkManager.LocalClientId == clientId
326+
? 0
327+
: size;
328+
NetworkManager.NetworkMetrics.TrackObjectDestroySent(clientId, NetworkObjectId, name, bytesReported);
326329
}
327330
}
328331
}

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ internal CustomMessagingManager(NetworkManager networkManager)
3232
internal void InvokeUnnamedMessage(ulong clientId, Stream stream)
3333
{
3434
OnUnnamedMessage?.Invoke(clientId, stream);
35-
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageReceived(clientId, stream.SafeGetLengthOrDefault());
35+
var bytesReported = m_NetworkManager.LocalClientId == clientId
36+
? 0
37+
: stream.SafeGetLengthOrDefault();
38+
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageReceived(clientId, bytesReported);
3639
}
3740

3841
/// <summary>
@@ -71,7 +74,10 @@ public void SendUnnamedMessage(ulong clientId, NetworkBuffer messageBuffer, Netw
7174
if (context != null)
7275
{
7376
using var nonNullContext = (InternalCommandContext)context;
74-
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageSent(clientId, messageBuffer.Position);
77+
var bytesReported = m_NetworkManager.LocalClientId == clientId
78+
? 0
79+
: messageBuffer.Position;
80+
m_NetworkManager.NetworkMetrics.TrackUnnamedMessageSent(clientId, bytesReported);
7581
messageBuffer.Position = 0;
7682
messageBuffer.CopyTo(nonNullContext.NetworkWriter.GetStream());
7783
}
@@ -197,7 +203,10 @@ public void SendNamedMessage(string messageName, ulong clientId, Stream messageS
197203

198204
var size = bufferSizeCapture.StopMeasureSegment();
199205

200-
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientId, messageName, size);
206+
var bytesReported = m_NetworkManager.LocalClientId == clientId
207+
? 0
208+
: size;
209+
m_NetworkManager.NetworkMetrics.TrackNamedMessageSent(clientId, messageName, bytesReported);
201210
}
202211
}
203212

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ public void HandleAddObject(ulong clientId, Stream stream)
116116
var networkObject = NetworkManager.SpawnManager.CreateLocalNetworkObject(softSync, prefabHash, ownerClientId, parentNetworkId, pos, rot, isReparented);
117117
networkObject.SetNetworkParenting(isReparented, latestParent);
118118
NetworkManager.SpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerClientId, stream, true, false);
119-
m_NetworkManager.NetworkMetrics.TrackObjectSpawnReceived(clientId, networkObject.NetworkObjectId, networkObject.name, stream.Length);
119+
var bytesReported = NetworkManager.LocalClientId == clientId
120+
? 0
121+
: stream.Length;
122+
m_NetworkManager.NetworkMetrics.TrackObjectSpawnReceived(clientId, networkObject.NetworkObjectId, networkObject.name, bytesReported);
120123
}
121124

122125
public void HandleDestroyObject(ulong clientId, Stream stream)
@@ -136,7 +139,10 @@ public void HandleDestroyObject(ulong clientId, Stream stream)
136139
return;
137140
}
138141

139-
m_NetworkManager.NetworkMetrics.TrackObjectDestroyReceived(clientId, networkObjectId, networkObject.name, stream.Length);
142+
var bytesReported = NetworkManager.LocalClientId == clientId
143+
? 0
144+
: stream.Length;
145+
m_NetworkManager.NetworkMetrics.TrackObjectDestroyReceived(clientId, networkObjectId, networkObject.name, bytesReported);
140146
NetworkManager.SpawnManager.OnDespawnObject(networkObject, true);
141147
}
142148

@@ -180,7 +186,10 @@ public void HandleChangeOwner(ulong clientId, Stream stream)
180186
networkObject.InvokeBehaviourOnGainedOwnership();
181187
}
182188

183-
NetworkManager.NetworkMetrics.TrackOwnershipChangeReceived(clientId, networkObject.NetworkObjectId, networkObject.name, stream.Length);
189+
var bytesReported = NetworkManager.LocalClientId == clientId
190+
? 0
191+
: stream.Length;
192+
NetworkManager.NetworkMetrics.TrackOwnershipChangeReceived(clientId, networkObject.NetworkObjectId, networkObject.name, bytesReported);
184193
}
185194

186195
public void HandleTimeSync(ulong clientId, Stream stream)
@@ -279,7 +288,10 @@ public void HandleNetworkLog(ulong clientId, Stream stream)
279288
using var reader = PooledNetworkReader.Get(stream);
280289
var length = stream.Length;
281290
var logType = (NetworkLog.LogType)reader.ReadByte();
282-
m_NetworkManager.NetworkMetrics.TrackServerLogReceived(clientId, (uint)logType, length);
291+
var bytesReported = NetworkManager.LocalClientId == clientId
292+
? 0
293+
: length;
294+
m_NetworkManager.NetworkMetrics.TrackServerLogReceived(clientId, (uint)logType, bytesReported);
283295
string message = reader.ReadStringPacked();
284296

285297
switch (logType)

com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,10 @@ private void OnServerLoadedScene(Scene scene)
11161116
SceneEventData.OnWrite(nonNullContext.NetworkWriter);
11171117

11181118
var size = bufferSizeCapture.StopMeasureSegment();
1119-
m_NetworkManager.NetworkMetrics.TrackSceneEventSent(clientId, (uint)SceneEventData.SceneEventType, scene.name, size);
1119+
var bytesReported = m_NetworkManager.LocalClientId == clientId
1120+
? 0
1121+
: size;
1122+
m_NetworkManager.NetworkMetrics.TrackSceneEventSent(clientId, (uint)SceneEventData.SceneEventType, scene.name, bytesReported);
11201123
}
11211124
else
11221125
{
@@ -1230,8 +1233,11 @@ internal void SynchronizeNetworkObjects(ulong clientId)
12301233
ClientSynchEventData.OnWrite(nonNullContext.NetworkWriter);
12311234

12321235
var size = bufferSizeCapture.StopMeasureSegment();
1236+
var bytesReported = m_NetworkManager.LocalClientId == clientId
1237+
? 0
1238+
: size;
12331239
m_NetworkManager.NetworkMetrics.TrackSceneEventSent(
1234-
clientId, (uint)ClientSynchEventData.SceneEventType, "", size);
1240+
clientId, (uint)ClientSynchEventData.SceneEventType, "", bytesReported);
12351241
}
12361242

12371243
// Notify the local server that the client has been sent the SceneEventData.SceneEventTypes.S2C_Event_Sync event
@@ -1577,8 +1583,12 @@ internal void HandleSceneEvent(ulong clientId, Stream stream)
15771583
SceneEventData.OnRead(reader);
15781584
NetworkReaderPool.PutBackInPool(reader);
15791585

1586+
var bytesReported = m_NetworkManager.LocalClientId == clientId
1587+
? 0
1588+
: stream.Length;
1589+
15801590
m_NetworkManager.NetworkMetrics.TrackSceneEventReceived(
1581-
clientId, (uint)SceneEventData.SceneEventType, ScenesInBuild[(int)SceneEventData.SceneIndex], stream.Length);
1591+
clientId, (uint)SceneEventData.SceneEventType, ScenesInBuild[(int)SceneEventData.SceneIndex], bytesReported);
15821592

15831593
if (SceneEventData.IsSceneEventClientSide())
15841594
{

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ internal void RemoveOwnership(NetworkObject networkObject)
116116

117117
foreach (var client in NetworkManager.ConnectedClients)
118118
{
119-
NetworkManager.NetworkMetrics.TrackOwnershipChangeSent(client.Key, networkObject.NetworkObjectId, networkObject.name, size);
119+
var bytesReported = NetworkManager.LocalClientId == client.Key
120+
? 0
121+
: size;
122+
NetworkManager.NetworkMetrics.TrackOwnershipChangeSent(client.Key, networkObject.NetworkObjectId, networkObject.name, bytesReported);
120123
}
121124
}
122125
}
@@ -163,7 +166,10 @@ internal void ChangeOwnership(NetworkObject networkObject, ulong clientId)
163166
var size = bufferSizeCapture.StopMeasureSegment();
164167
foreach (var client in NetworkManager.ConnectedClients)
165168
{
166-
NetworkManager.NetworkMetrics.TrackOwnershipChangeSent(client.Key, networkObject.NetworkObjectId, networkObject.name, size);
169+
var bytesReported = NetworkManager.LocalClientId == client.Key
170+
? 0
171+
: size;
172+
NetworkManager.NetworkMetrics.TrackOwnershipChangeSent(client.Key, networkObject.NetworkObjectId, networkObject.name, bytesReported);
167173
}
168174
}
169175
}
@@ -328,6 +334,7 @@ internal void SpawnNetworkObjectLocally(NetworkObject networkObject, ulong netwo
328334
SpawnedObjectsList.Add(networkObject);
329335

330336
NetworkManager.NetworkMetrics.TrackNetworkObject(networkObject);
337+
NetworkManager.NetworkMetrics.TrackObjectSpawnSent(NetworkManager.LocalClientId, networkObject.NetworkObjectId, networkObject.name, 0);
331338

332339
if (ownerClientId != null)
333340
{
@@ -389,7 +396,10 @@ internal void SendSpawnCallForObject(ulong clientId, NetworkObject networkObject
389396
WriteSpawnCallForObject(nonNullContext.NetworkWriter, clientId, networkObject);
390397

391398
var size = bufferSizeCapture.StopMeasureSegment();
392-
NetworkManager.NetworkMetrics.TrackObjectSpawnSent(clientId, networkObject.NetworkObjectId, networkObject.name, size);
399+
var bytesReported = NetworkManager.LocalClientId == clientId
400+
? 0
401+
: size;
402+
NetworkManager.NetworkMetrics.TrackObjectSpawnSent(clientId, networkObject.NetworkObjectId, networkObject.name, bytesReported);
393403
}
394404

395405
networkObject.MarkVariablesDirty();
@@ -669,7 +679,13 @@ internal void OnDespawnObject(NetworkObject networkObject, bool destroyGameObjec
669679
nonNullContext.NetworkWriter.WriteUInt64Packed(networkObject.NetworkObjectId);
670680

671681
var size = bufferSizeCapture.StopMeasureSegment();
672-
NetworkManager.NetworkMetrics.TrackObjectDestroySent(m_TargetClientIds, networkObject.NetworkObjectId, networkObject.name, size);
682+
foreach (var targetClientId in m_TargetClientIds)
683+
{
684+
var bytesReported = NetworkManager.LocalClientId == targetClientId
685+
? 0
686+
: size;
687+
NetworkManager.NetworkMetrics.TrackObjectDestroySent(targetClientId, networkObject.NetworkObjectId, networkObject.name, bytesReported);
688+
}
673689
}
674690
}
675691
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
using System.Text;
88
using NUnit.Framework;
99
using Unity.Multiplayer.Tools.MetricTypes;
10-
using Unity.Netcode.RuntimeTests.Metrics.Utlity;
10+
using Unity.Netcode.RuntimeTests.Metrics.Utility;
1111
using UnityEngine;
1212
using UnityEngine.TestTools;
1313

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
using System.Linq;
66
using NUnit.Framework;
77
using Unity.Multiplayer.Tools.MetricTypes;
8-
using Unity.Netcode.RuntimeTests.Metrics.Utlity;
8+
using Unity.Netcode.RuntimeTests.Metrics.Utility;
99
using UnityEngine;
1010
using UnityEngine.TestTools;
1111

1212
namespace Unity.Netcode.RuntimeTests.Metrics
1313
{
14-
public class NetworkObjectMetricsTests : SingleClientMetricTestBase
14+
internal class NetworkObjectMetricsTests : SingleClientMetricTestBase
1515
{
1616
private const string k_NewNetworkObjectName = "TestNetworkObjectToSpawn";
1717
private NetworkObject m_NewNetworkPrefab;
@@ -50,13 +50,12 @@ public IEnumerator TrackNetworkObjectSpawnSentMetric()
5050

5151
yield return waitForMetricEvent.WaitForMetricsReceived();
5252

53-
var objectSpawnedSentMetricValues = waitForMetricEvent.AssertMetricValuesHaveBeenFound();
54-
Assert.AreEqual(1, objectSpawnedSentMetricValues.Count);
53+
var metricValues = waitForMetricEvent.AssertMetricValuesHaveBeenFound();
54+
Assert.AreEqual(2, metricValues.Count);
5555

56-
var objectSpawned = objectSpawnedSentMetricValues.First();
57-
Assert.AreEqual(Client.LocalClientId, objectSpawned.Connection.Id);
56+
var objectSpawned = metricValues.First();
5857
Assert.AreEqual($"{k_NewNetworkObjectName}(Clone)", objectSpawned.NetworkId.Name);
59-
Assert.AreNotEqual(0, objectSpawned.BytesCount);
58+
AssertLocalAndRemoteMetricsSent(metricValues);
6059
}
6160

6261
[UnityTest]
@@ -91,13 +90,12 @@ public IEnumerator TrackNetworkObjectDestroySentMetric()
9190

9291
yield return waitForMetricEvent.WaitForMetricsReceived();
9392

94-
var objectDestroyedSentMetricValues = waitForMetricEvent.AssertMetricValuesHaveBeenFound();
95-
Assert.AreEqual(2, objectDestroyedSentMetricValues.Count); // As there's a client and server, this event is emitted twice.
93+
var metricValues = waitForMetricEvent.AssertMetricValuesHaveBeenFound();
94+
Assert.AreEqual(2, metricValues.Count); // As there's a client and server, this event is emitted twice.
9695

97-
var objectDestroyed = objectDestroyedSentMetricValues.Last();
98-
Assert.AreEqual(Client.LocalClientId, objectDestroyed.Connection.Id);
96+
var objectDestroyed = metricValues.Last();
9997
Assert.AreEqual($"{k_NewNetworkObjectName}(Clone)", objectDestroyed.NetworkId.Name);
100-
Assert.AreNotEqual(0, objectDestroyed.BytesCount);
98+
AssertLocalAndRemoteMetricsSent(metricValues);
10199
}
102100

103101
[UnityTest]

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
using System.Linq;
55
using NUnit.Framework;
66
using Unity.Multiplayer.Tools.MetricTypes;
7-
using Unity.Netcode.RuntimeTests.Metrics.Utlity;
7+
using Unity.Netcode.RuntimeTests.Metrics.Utility;
88
using UnityEngine;
99
using UnityEngine.TestTools;
1010

1111
namespace Unity.Netcode.RuntimeTests.Metrics
1212
{
13-
public class NetworkVariableMetricsTests : SingleClientMetricTestBase
13+
internal class NetworkVariableMetricsTests : SingleClientMetricTestBase
1414
{
1515
protected override Action<GameObject> UpdatePlayerPrefab => prefab => prefab.AddComponent<NetworkVariableComponent>();
1616

@@ -25,8 +25,7 @@ public IEnumerator TrackNetworkVariableDeltaSentMetric()
2525

2626
var networkVariableDeltaSent = metricValues.First();
2727
Assert.AreEqual(nameof(NetworkVariableComponent.MyNetworkVariable), networkVariableDeltaSent.Name);
28-
Assert.AreEqual(Server.LocalClientId, networkVariableDeltaSent.Connection.Id);
29-
Assert.AreNotEqual(0, networkVariableDeltaSent.BytesCount);
28+
AssertLocalAndRemoteMetricsSent(metricValues);
3029
}
3130

3231
[UnityTest]

0 commit comments

Comments
 (0)