Skip to content

Commit 74df5b2

Browse files
author
JS Fauteux
authored
feat: Added packet count tracking when multiplayer tools are present (#1610)
* Added tracking for packet count and tests * Added missing preprocessor define * Added const variable to avoid numerical litteral per comment * Using InRange instead of IsGreaterThanOr for more precise test * Updated packet count to use counter. Updated test framework to support counter * Made packet name plural * Update based on comments * Fixed not resetting counter for packet on dispacth * Added a define for tools 1.0.0-pre.3 and higher in UTP adapter * Added missing define * Fixed test within testproject-tools-integration * Fix compilation issue in tests when UTP Adapter is not present * Removing unused using directive
1 parent 23ac017 commit 74df5b2

21 files changed

+367
-117
lines changed

com.unity.netcode.adapter.utp/Runtime/NetworkMetricsPipelineStage.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#if MULTIPLAYER_TOOLS
2+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
23
using AOT;
34
using Unity.Burst;
45
using Unity.Collections.LowLevel.Unsafe;
@@ -65,3 +66,4 @@ private static void InitializeConnection(byte* staticInstanceBuffer, int staticI
6566
}
6667
}
6768
#endif
69+
#endif

com.unity.netcode.adapter.utp/Runtime/UnityTransport.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ private void Update()
663663
;
664664
}
665665

666-
#if MULTIPLAYER_TOOLS
666+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
667667
ExtractNetworkMetrics();
668668
#endif
669669
}
@@ -674,7 +674,7 @@ private void OnDestroy()
674674
DisposeInternals();
675675
}
676676

677-
#if MULTIPLAYER_TOOLS
677+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
678678
private void ExtractNetworkMetrics()
679679
{
680680
if (NetworkManager.Singleton.IsServer)
@@ -895,7 +895,7 @@ public void CreateDriver(UnityTransport transport, out NetworkDriver driver,
895895
out NetworkPipeline unreliableSequencedFragmentedPipeline,
896896
out NetworkPipeline reliableSequencedPipeline)
897897
{
898-
#if MULTIPLAYER_TOOLS
898+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
899899
NetworkPipelineStageCollection.RegisterPipelineStage(new NetworkMetricsPipelineStage());
900900
#endif
901901
var maxFrameTimeMS = 0;
@@ -923,7 +923,7 @@ public void CreateDriver(UnityTransport transport, out NetworkDriver driver,
923923
typeof(FragmentationPipelineStage),
924924
typeof(SimulatorPipelineStage),
925925
typeof(SimulatorPipelineStageInSend)
926-
#if MULTIPLAYER_TOOLS
926+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
927927
,typeof(NetworkMetricsPipelineStage)
928928
#endif
929929
);
@@ -932,15 +932,15 @@ public void CreateDriver(UnityTransport transport, out NetworkDriver driver,
932932
typeof(UnreliableSequencedPipelineStage),
933933
typeof(SimulatorPipelineStage),
934934
typeof(SimulatorPipelineStageInSend)
935-
#if MULTIPLAYER_TOOLS
935+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
936936
,typeof(NetworkMetricsPipelineStage)
937937
#endif
938938
);
939939
reliableSequencedPipeline = driver.CreatePipeline(
940940
typeof(ReliableSequencedPipelineStage),
941941
typeof(SimulatorPipelineStage),
942942
typeof(SimulatorPipelineStageInSend)
943-
#if MULTIPLAYER_TOOLS
943+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
944944
,typeof(NetworkMetricsPipelineStage)
945945
#endif
946946
);
@@ -951,20 +951,20 @@ public void CreateDriver(UnityTransport transport, out NetworkDriver driver,
951951

952952
unreliableFragmentedPipeline = driver.CreatePipeline(
953953
typeof(FragmentationPipelineStage)
954-
#if MULTIPLAYER_TOOLS
954+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
955955
,typeof(NetworkMetricsPipelineStage)
956956
#endif
957957
);
958958
unreliableSequencedFragmentedPipeline = driver.CreatePipeline(
959959
typeof(FragmentationPipelineStage),
960960
typeof(UnreliableSequencedPipelineStage)
961-
#if MULTIPLAYER_TOOLS
961+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
962962
,typeof(NetworkMetricsPipelineStage)
963963
#endif
964964
);
965965
reliableSequencedPipeline = driver.CreatePipeline(
966966
typeof(ReliableSequencedPipelineStage)
967-
#if MULTIPLAYER_TOOLS
967+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
968968
,typeof(NetworkMetricsPipelineStage)
969969
#endif
970970
);

com.unity.netcode.adapter.utp/Runtime/com.unity.netcode.adapter.utp.asmdef

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
"name": "com.unity.multiplayer.tools",
2121
"expression": "",
2222
"define": "MULTIPLAYER_TOOLS"
23+
},
24+
{
25+
"name": "com.unity.multiplayer.tools",
26+
"expression": "1.0.0-pre.3",
27+
"define": "MULTIPLAYER_TOOLS_1_0_0_PRE_3"
2328
}
2429
],
2530
"noEngineReferences": false

com.unity.netcode.gameobjects/Runtime/Metrics/NetworkMetrics.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ private static string GetSceneEventTypeName(uint typeCode)
6666
private readonly EventMetric<SceneEventMetric> m_SceneEventSentEvent = new EventMetric<SceneEventMetric>(NetworkMetricTypes.SceneEventSent.Id);
6767
private readonly EventMetric<SceneEventMetric> m_SceneEventReceivedEvent = new EventMetric<SceneEventMetric>(NetworkMetricTypes.SceneEventReceived.Id);
6868

69+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
70+
private readonly Counter m_PacketSentCounter = new Counter(NetworkMetricTypes.PacketsSent.Id)
71+
{
72+
ShouldResetOnDispatch = true,
73+
};
74+
private readonly Counter m_PacketReceivedCounter = new Counter(NetworkMetricTypes.PacketsReceived.Id)
75+
{
76+
ShouldResetOnDispatch = true,
77+
};
78+
#endif
79+
80+
6981
private ulong m_NumberOfMetricsThisFrame;
7082

7183
public NetworkMetrics()
@@ -82,6 +94,9 @@ public NetworkMetrics()
8294
.WithMetricEvents(m_RpcSentEvent, m_RpcReceivedEvent)
8395
.WithMetricEvents(m_ServerLogSentEvent, m_ServerLogReceivedEvent)
8496
.WithMetricEvents(m_SceneEventSentEvent, m_SceneEventReceivedEvent)
97+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
98+
.WithCounters(m_PacketSentCounter, m_PacketReceivedCounter)
99+
#endif
85100
.Build();
86101

87102
Dispatcher.RegisterObserver(NetcodeObserver.Observer);
@@ -409,10 +424,28 @@ public void TrackSceneEventReceived(ulong senderClientId, uint sceneEventType, s
409424

410425
public void TrackPacketSent(uint packetCount)
411426
{
427+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
428+
if (!CanSendMetrics)
429+
{
430+
return;
431+
}
432+
433+
m_PacketSentCounter.Increment(packetCount);
434+
IncrementMetricCount();
435+
#endif
412436
}
413437

414438
public void TrackPacketReceived(uint packetCount)
415439
{
440+
#if MULTIPLAYER_TOOLS_1_0_0_PRE_3
441+
if (!CanSendMetrics)
442+
{
443+
return;
444+
}
445+
446+
m_PacketReceivedCounter.Increment(packetCount);
447+
IncrementMetricCount();
448+
#endif
416449
}
417450

418451
public void DispatchFrame()

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class MessagingMetricsTests : DualClientMetricTestBase
2525
[UnityTest]
2626
public IEnumerator TrackNetworkMessageSentMetric()
2727
{
28-
var waitForMetricValues = new WaitForMetricValues<NetworkMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent);
28+
var waitForMetricValues = new WaitForEventMetricValues<NetworkMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent);
2929

3030
var messageName = Guid.NewGuid();
3131
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
@@ -46,7 +46,7 @@ public IEnumerator TrackNetworkMessageSentMetric()
4646
[UnityTest]
4747
public IEnumerator TrackNetworkMessageSentMetricToMultipleClients()
4848
{
49-
var waitForMetricValues = new WaitForMetricValues<NetworkMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent);
49+
var waitForMetricValues = new WaitForEventMetricValues<NetworkMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageSent);
5050
var messageName = Guid.NewGuid();
5151
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
5252
{
@@ -72,7 +72,7 @@ public IEnumerator TrackNetworkMessageReceivedMetric()
7272
{
7373
Debug.Log($"Received from {sender}");
7474
});
75-
var waitForMetricValues = new WaitForMetricValues<NetworkMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageReceived,
75+
var waitForMetricValues = new WaitForEventMetricValues<NetworkMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NetworkMessageReceived,
7676
metric => metric.Name == nameof(NamedMessage));
7777

7878
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
@@ -92,7 +92,7 @@ public IEnumerator TrackNetworkMessageReceivedMetric()
9292
[UnityTest]
9393
public IEnumerator TrackNamedMessageSentMetric()
9494
{
95-
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
95+
var waitForMetricValues = new WaitForEventMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
9696

9797
var messageName = Guid.NewGuid();
9898
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
@@ -117,7 +117,7 @@ public IEnumerator TrackNamedMessageSentMetric()
117117
[UnityTest]
118118
public IEnumerator TrackNamedMessageSentMetricToMultipleClients()
119119
{
120-
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
120+
var waitForMetricValues = new WaitForEventMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
121121
var messageName = Guid.NewGuid();
122122
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
123123
{
@@ -138,7 +138,7 @@ public IEnumerator TrackNamedMessageSentMetricToMultipleClients()
138138
[UnityTest]
139139
public IEnumerator TrackNamedMessageSentMetricToSelf()
140140
{
141-
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
141+
var waitForMetricValues = new WaitForEventMetricValues<NamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NamedMessageSent);
142142
var messageName = Guid.NewGuid();
143143
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
144144
{
@@ -155,7 +155,7 @@ public IEnumerator TrackNamedMessageSentMetricToSelf()
155155
[UnityTest]
156156
public IEnumerator TrackNamedMessageReceivedMetric()
157157
{
158-
var waitForMetricValues = new WaitForMetricValues<NamedMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NamedMessageReceived);
158+
var waitForMetricValues = new WaitForEventMetricValues<NamedMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.NamedMessageReceived);
159159

160160
var messageName = Guid.NewGuid();
161161

@@ -196,7 +196,7 @@ public IEnumerator TrackUnnamedMessageSentMetric()
196196
}
197197

198198

199-
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
199+
var waitForMetricValues = new WaitForEventMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
200200

201201
yield return waitForMetricValues.WaitForMetricsReceived();
202202

@@ -212,7 +212,7 @@ public IEnumerator TrackUnnamedMessageSentMetric()
212212
public IEnumerator TrackUnnamedMessageSentMetricToMultipleClients()
213213
{
214214
var message = Guid.NewGuid();
215-
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
215+
var waitForMetricValues = new WaitForEventMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
216216
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
217217
{
218218
writer.WriteValueSafe(message);
@@ -235,7 +235,7 @@ public IEnumerator TrackUnnamedMessageSentMetricToMultipleClients()
235235
[UnityTest]
236236
public IEnumerator TrackUnnamedMessageSentMetricToSelf()
237237
{
238-
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
238+
var waitForMetricValues = new WaitForEventMetricValues<UnnamedMessageEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageSent);
239239
var messageName = Guid.NewGuid();
240240
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
241241
{
@@ -253,7 +253,7 @@ public IEnumerator TrackUnnamedMessageSentMetricToSelf()
253253
public IEnumerator TrackUnnamedMessageReceivedMetric()
254254
{
255255
var message = Guid.NewGuid();
256-
var waitForMetricValues = new WaitForMetricValues<UnnamedMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageReceived);
256+
var waitForMetricValues = new WaitForEventMetricValues<UnnamedMessageEvent>(FirstClientMetrics.Dispatcher, NetworkMetricTypes.UnnamedMessageReceived);
257257
using (var writer = new FastBufferWriter(1300, Allocator.Temp))
258258
{
259259
writer.WriteValueSafe(message);

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private NetworkObject SpawnNetworkObject()
4646
[UnityTest]
4747
public IEnumerator TrackNetworkObjectSpawnSentMetric()
4848
{
49-
var waitForMetricEvent = new WaitForMetricValues<ObjectSpawnedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectSpawnedSent);
49+
var waitForMetricEvent = new WaitForEventMetricValues<ObjectSpawnedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectSpawnedSent);
5050

5151
SpawnNetworkObject();
5252

@@ -64,7 +64,7 @@ public IEnumerator TrackNetworkObjectSpawnSentMetric()
6464
[UnityTest]
6565
public IEnumerator TrackNetworkObjectSpawnReceivedMetric()
6666
{
67-
var waitForMetricEvent = new WaitForMetricValues<ObjectSpawnedEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.ObjectSpawnedReceived);
67+
var waitForMetricEvent = new WaitForEventMetricValues<ObjectSpawnedEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.ObjectSpawnedReceived);
6868

6969
var networkObject = SpawnNetworkObject();
7070

@@ -87,7 +87,7 @@ public IEnumerator TrackNetworkObjectDestroySentMetric()
8787

8888
yield return new WaitForSeconds(0.2f);
8989

90-
var waitForMetricEvent = new WaitForMetricValues<ObjectDestroyedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectDestroyedSent);
90+
var waitForMetricEvent = new WaitForEventMetricValues<ObjectDestroyedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectDestroyedSent);
9191

9292
Server.SpawnManager.OnDespawnObject(networkObject, true);
9393

@@ -109,7 +109,7 @@ public IEnumerator TrackNetworkObjectDestroyReceivedMetric()
109109

110110
yield return new WaitForSeconds(0.2f);
111111

112-
var waitForMetricEvent = new WaitForMetricValues<ObjectDestroyedEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.ObjectDestroyedReceived);
112+
var waitForMetricEvent = new WaitForEventMetricValues<ObjectDestroyedEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.ObjectDestroyedReceived);
113113

114114
Server.SpawnManager.OnDespawnObject(networkObject, true);
115115

@@ -137,7 +137,7 @@ public IEnumerator TrackMultipleNetworkObjectSpawnSentMetric()
137137

138138
yield return new WaitForSeconds(0.2f);
139139

140-
var waitForMetricEvent = new WaitForMetricValues<ObjectSpawnedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectSpawnedSent);
140+
var waitForMetricEvent = new WaitForEventMetricValues<ObjectSpawnedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectSpawnedSent);
141141

142142
NetworkObject.NetworkShow(new List<NetworkObject> { networkObject1, networkObject2 }, Client.LocalClientId);
143143

@@ -170,7 +170,7 @@ public IEnumerator TrackMultipleNetworkObjectDestroySentMetric()
170170

171171
yield return new WaitForSeconds(0.2f);
172172

173-
var waitForMetricEvent = new WaitForMetricValues<ObjectDestroyedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectDestroyedSent);
173+
var waitForMetricEvent = new WaitForEventMetricValues<ObjectDestroyedEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.ObjectDestroyedSent);
174174

175175
NetworkObject.NetworkHide(new List<NetworkObject> { networkObject1, networkObject2 }, Client.LocalClientId);
176176

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal class NetworkVariableMetricsTests : SingleClientMetricTestBase
1717
[UnityTest]
1818
public IEnumerator TrackNetworkVariableDeltaSentMetric()
1919
{
20-
var waitForMetricValues = new WaitForMetricValues<NetworkVariableEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkVariableDeltaSent);
20+
var waitForMetricValues = new WaitForEventMetricValues<NetworkVariableEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.NetworkVariableDeltaSent);
2121

2222
yield return waitForMetricValues.WaitForMetricsReceived();
2323

@@ -32,7 +32,7 @@ public IEnumerator TrackNetworkVariableDeltaSentMetric()
3232
[UnityTest]
3333
public IEnumerator TrackNetworkVariableDeltaReceivedMetric()
3434
{
35-
var waitForMetricValues = new WaitForMetricValues<NetworkVariableEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.NetworkVariableDeltaReceived);
35+
var waitForMetricValues = new WaitForEventMetricValues<NetworkVariableEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.NetworkVariableDeltaReceived);
3636

3737
yield return waitForMetricValues.WaitForMetricsReceived();
3838

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public IEnumerator TrackOwnershipChangeSentMetric()
4949

5050
yield return new WaitForSeconds(0.2f);
5151

52-
var waitForMetricValues = new WaitForMetricValues<OwnershipChangeEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.OwnershipChangeSent);
52+
var waitForMetricValues = new WaitForEventMetricValues<OwnershipChangeEvent>(ServerMetrics.Dispatcher, NetworkMetricTypes.OwnershipChangeSent);
5353

5454
networkObject.ChangeOwnership(1);
5555

@@ -70,7 +70,7 @@ public IEnumerator TrackOwnershipChangeReceivedMetric()
7070

7171
yield return new WaitForSeconds(0.2f);
7272

73-
var waitForMetricValues = new WaitForMetricValues<OwnershipChangeEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.OwnershipChangeReceived);
73+
var waitForMetricValues = new WaitForEventMetricValues<OwnershipChangeEvent>(ClientMetrics.Dispatcher, NetworkMetricTypes.OwnershipChangeReceived);
7474

7575
networkObject.ChangeOwnership(1);
7676

0 commit comments

Comments
 (0)