Skip to content

Commit 3f298fd

Browse files
refactor: update NetworkMetrics to use strings instead of mirrored enum for scene event metrics (#1280)
* refactor: update to use strings instead of mirrored enum for scene event metrics * update packages-lock.json * Fixed typo when translating some of the event names * revert burst change Co-authored-by: Andrew Spiering <[email protected]>
1 parent 3865de1 commit 3f298fd

File tree

4 files changed

+55
-35
lines changed

4 files changed

+55
-35
lines changed

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,35 @@
11
#if MULTIPLAYER_TOOLS
2+
using System;
23
using System.Collections.Generic;
34
using Unity.Multiplayer.Tools;
45
using Unity.Multiplayer.Tools.MetricTypes;
56
using Unity.Multiplayer.Tools.NetStats;
6-
using ToolsSceneEventType = Unity.Multiplayer.Tools.MetricTypes.SceneEventType;
77

88
namespace Unity.Netcode
99
{
1010
internal class NetworkMetrics : INetworkMetrics
1111
{
12+
private static Dictionary<uint, string> s_SceneEventTypeNames;
13+
14+
static NetworkMetrics()
15+
{
16+
s_SceneEventTypeNames = new Dictionary<uint, string>();
17+
foreach (SceneEventType type in Enum.GetValues(typeof(SceneEventType)))
18+
{
19+
s_SceneEventTypeNames[(uint)type] = type.ToString();
20+
}
21+
}
22+
23+
private static string GetSceneEventTypeName(uint typeCode)
24+
{
25+
if (!s_SceneEventTypeNames.TryGetValue(typeCode, out string name))
26+
{
27+
name = "Unknown";
28+
}
29+
30+
return name;
31+
}
32+
1233
private readonly Counter m_TransportBytesSent = new Counter(NetworkMetricTypes.TotalBytesSent.Id)
1334
{
1435
ShouldResetOnDispatch = true,
@@ -267,13 +288,13 @@ public void TrackSceneEventSent(IReadOnlyList<ulong> receiverClientIds, uint sce
267288

268289
public void TrackSceneEventSent(ulong receiverClientId, uint sceneEventType, string sceneName, long bytesCount)
269290
{
270-
m_SceneEventSentEvent.Mark(new SceneEventMetric(new ConnectionInfo(receiverClientId), (ToolsSceneEventType)sceneEventType, sceneName, bytesCount));
291+
m_SceneEventSentEvent.Mark(new SceneEventMetric(new ConnectionInfo(receiverClientId), GetSceneEventTypeName(sceneEventType), sceneName, bytesCount));
271292
MarkDirty();
272293
}
273294

274295
public void TrackSceneEventReceived(ulong senderClientId, uint sceneEventType, string sceneName, long bytesCount)
275296
{
276-
m_SceneEventReceivedEvent.Mark(new SceneEventMetric(new ConnectionInfo(senderClientId), (ToolsSceneEventType)sceneEventType, sceneName, bytesCount));
297+
m_SceneEventReceivedEvent.Mark(new SceneEventMetric(new ConnectionInfo(senderClientId), GetSceneEventTypeName(sceneEventType), sceneName, bytesCount));
277298
MarkDirty();
278299
}
279300

testproject-tools-integration/Assets/Tests/Runtime/SceneEventTests.cs

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using Unity.Netcode.RuntimeTests.Metrics.Utility;
99
using UnityEngine.SceneManagement;
1010
using UnityEngine.TestTools;
11-
using ToolsSceneEventType = Unity.Multiplayer.Tools.MetricTypes.SceneEventType;
1211
using SceneEventType = Unity.Netcode.SceneEventType;
1312

1413
namespace TestProject.ToolsIntegration.RuntimeTests
@@ -72,7 +71,7 @@ public IEnumerator TestS2CLoadSent()
7271
Assert.AreEqual(1, sentMetrics.Count);
7372

7473
var sentMetric = sentMetrics.First();
75-
Assert.AreEqual(ToolsSceneEventType.S2C_Load, sentMetric.SceneEventType);
74+
Assert.AreEqual(SceneEventType.Load.ToString(), sentMetric.SceneEventType);
7675
Assert.AreEqual(Client.LocalClientId, sentMetric.Connection.Id);
7776
Assert.AreEqual(k_SimpleSceneName, sentMetric.SceneName);
7877
}
@@ -108,7 +107,7 @@ public IEnumerator TestS2CLoadReceived()
108107
Assert.AreEqual(1, receivedMetrics.Count);
109108

110109
var receivedMetric = receivedMetrics.First();
111-
Assert.AreEqual(ToolsSceneEventType.S2C_Load, receivedMetric.SceneEventType);
110+
Assert.AreEqual(SceneEventType.Load.ToString(), receivedMetric.SceneEventType);
112111
Assert.AreEqual(Server.LocalClientId, receivedMetric.Connection.Id);
113112
Assert.AreEqual(k_SimpleSceneName, receivedMetric.SceneName);
114113
}
@@ -139,7 +138,7 @@ public IEnumerator TestC2SLoadCompleteSent()
139138
Assert.AreEqual(1, sentMetrics.Count);
140139

141140
var sentMetric = sentMetrics.First();
142-
Assert.AreEqual(ToolsSceneEventType.C2S_LoadComplete, sentMetric.SceneEventType);
141+
Assert.AreEqual(SceneEventType.LoadComplete.ToString(), sentMetric.SceneEventType);
143142
Assert.AreEqual(Server.LocalClientId, sentMetric.Connection.Id);
144143
Assert.AreEqual(k_SimpleSceneName, sentMetric.SceneName);
145144
}
@@ -170,7 +169,7 @@ public IEnumerator TestC2SLoadCompleteReceived()
170169
Assert.AreEqual(1, receivedMetrics.Count);
171170

172171
var receivedMetric = receivedMetrics.First();
173-
Assert.AreEqual(ToolsSceneEventType.C2S_LoadComplete, receivedMetric.SceneEventType);
172+
Assert.AreEqual(SceneEventType.LoadComplete.ToString(), receivedMetric.SceneEventType);
174173
Assert.AreEqual(Client.LocalClientId, receivedMetric.Connection.Id);
175174
Assert.AreEqual(k_SimpleSceneName, receivedMetric.SceneName);
176175
}
@@ -187,7 +186,7 @@ public IEnumerator TestS2CLoadCompleteSent()
187186
var waitForSentMetric = new WaitForMetricValues<SceneEventMetric>(
188187
ServerMetrics.Dispatcher,
189188
NetworkMetricTypes.SceneEventSent,
190-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_LoadComplete));
189+
metric => metric.SceneEventType.Equals(SceneEventType.LoadEventCompleted.ToString()));
191190

192191
// Load a scene to trigger the messages
193192
StartServerLoadScene();
@@ -203,7 +202,7 @@ public IEnumerator TestS2CLoadCompleteSent()
203202
Assert.AreEqual(Server.ConnectedClients.Count, sentMetrics.Count);
204203

205204
var filteredSentMetrics = sentMetrics
206-
.Where(metric => metric.SceneEventType == ToolsSceneEventType.S2C_LoadComplete)
205+
.Where(metric => metric.SceneEventType == SceneEventType.LoadEventCompleted.ToString())
207206
.Where(metric => metric.SceneName == k_SimpleSceneName);
208207
CollectionAssert.AreEquivalent(filteredSentMetrics.Select(x => x.Connection.Id), Server.ConnectedClients.Select(x => x.Key));
209208
}
@@ -220,7 +219,7 @@ public IEnumerator TestS2CLoadCompleteReceived()
220219
var waitForReceivedMetric = new WaitForMetricValues<SceneEventMetric>(
221220
ClientMetrics.Dispatcher,
222221
NetworkMetricTypes.SceneEventReceived,
223-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_LoadComplete));
222+
metric => metric.SceneEventType.Equals(SceneEventType.LoadEventCompleted.ToString()));
224223

225224
// Load a scene to trigger the messages
226225
StartServerLoadScene();
@@ -236,7 +235,7 @@ public IEnumerator TestS2CLoadCompleteReceived()
236235
Assert.AreEqual(1, receivedMetrics.Count);
237236
var receivedMetric = receivedMetrics.First();
238237

239-
Assert.AreEqual(ToolsSceneEventType.S2C_LoadComplete, receivedMetric.SceneEventType);
238+
Assert.AreEqual(SceneEventType.LoadEventCompleted.ToString(), receivedMetric.SceneEventType);
240239
Assert.AreEqual(Server.LocalClientId, receivedMetric.Connection.Id);
241240
Assert.AreEqual(k_SimpleSceneName, receivedMetric.SceneName);
242241
}
@@ -262,7 +261,7 @@ public IEnumerator TestS2CUnloadSent()
262261
var waitForSentMetric = new WaitForMetricValues<SceneEventMetric>(
263262
ServerMetrics.Dispatcher,
264263
NetworkMetricTypes.SceneEventSent,
265-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_Unload));
264+
metric => metric.SceneEventType.Equals(SceneEventType.Unload.ToString()));
266265

267266
// Unload the scene to trigger the messages
268267
StartServerUnloadScene();
@@ -278,7 +277,7 @@ public IEnumerator TestS2CUnloadSent()
278277
Assert.AreEqual(1, sentMetrics.Count);
279278

280279
var sentMetric = sentMetrics.First();
281-
Assert.AreEqual(ToolsSceneEventType.S2C_Unload, sentMetric.SceneEventType);
280+
Assert.AreEqual(SceneEventType.Unload.ToString(), sentMetric.SceneEventType);
282281
Assert.AreEqual(Client.LocalClientId, sentMetric.Connection.Id);
283282
Assert.AreEqual(k_SimpleSceneName, sentMetric.SceneName);
284283
}
@@ -305,7 +304,7 @@ public IEnumerator TestS2CUnloadReceived()
305304
var waitForReceivedMetric = new WaitForMetricValues<SceneEventMetric>(
306305
ClientMetrics.Dispatcher,
307306
NetworkMetricTypes.SceneEventReceived,
308-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_Unload));
307+
metric => metric.SceneEventType.Equals(SceneEventType.Unload.ToString()));
309308

310309
// Unload the scene to trigger the messages
311310
StartServerUnloadScene();
@@ -321,7 +320,7 @@ public IEnumerator TestS2CUnloadReceived()
321320
Assert.AreEqual(1, receivedMetrics.Count);
322321

323322
var receivedMetric = receivedMetrics.First();
324-
Assert.AreEqual(ToolsSceneEventType.S2C_Unload, receivedMetric.SceneEventType);
323+
Assert.AreEqual(SceneEventType.Unload.ToString(), receivedMetric.SceneEventType);
325324
Assert.AreEqual(Server.LocalClientId, receivedMetric.Connection.Id);
326325
Assert.AreEqual(k_SimpleSceneName, receivedMetric.SceneName);
327326
}
@@ -341,7 +340,7 @@ public IEnumerator TestC2SUnloadCompleteSent()
341340
var waitForSentMetric = new WaitForMetricValues<SceneEventMetric>(
342341
ClientMetrics.Dispatcher,
343342
NetworkMetricTypes.SceneEventSent,
344-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.C2S_UnloadComplete));
343+
metric => metric.SceneEventType.Equals(SceneEventType.UnloadComplete.ToString()));
345344

346345
// Unload a scene to trigger the messages
347346
StartServerUnloadScene();
@@ -357,7 +356,7 @@ public IEnumerator TestC2SUnloadCompleteSent()
357356
Assert.AreEqual(1, sentMetrics.Count);
358357

359358
var sentMetric = sentMetrics.First();
360-
Assert.AreEqual(ToolsSceneEventType.C2S_UnloadComplete, sentMetric.SceneEventType);
359+
Assert.AreEqual(SceneEventType.UnloadComplete.ToString(), sentMetric.SceneEventType);
361360
Assert.AreEqual(Server.LocalClientId, sentMetric.Connection.Id);
362361
Assert.AreEqual(k_SimpleSceneName, sentMetric.SceneName);
363362
}
@@ -377,7 +376,7 @@ public IEnumerator TestC2SUnloadCompleteReceived()
377376
var waitForReceivedMetric = new WaitForMetricValues<SceneEventMetric>(
378377
ServerMetrics.Dispatcher,
379378
NetworkMetricTypes.SceneEventReceived,
380-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.C2S_UnloadComplete));
379+
metric => metric.SceneEventType.Equals(SceneEventType.UnloadComplete.ToString()));
381380

382381
// Unload a scene to trigger the messages
383382
StartServerUnloadScene();
@@ -393,7 +392,7 @@ public IEnumerator TestC2SUnloadCompleteReceived()
393392
Assert.AreEqual(1, receivedMetrics.Count);
394393

395394
var receivedMetric = receivedMetrics.First();
396-
Assert.AreEqual(ToolsSceneEventType.C2S_UnloadComplete, receivedMetric.SceneEventType);
395+
Assert.AreEqual(SceneEventType.UnloadComplete.ToString(), receivedMetric.SceneEventType);
397396
Assert.AreEqual(Client.LocalClientId, receivedMetric.Connection.Id);
398397
Assert.AreEqual(k_SimpleSceneName, receivedMetric.SceneName);
399398
}
@@ -413,7 +412,7 @@ public IEnumerator TestS2CUnloadCompleteSent()
413412
var waitForSentMetric = new WaitForMetricValues<SceneEventMetric>(
414413
ServerMetrics.Dispatcher,
415414
NetworkMetricTypes.SceneEventSent,
416-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_UnLoadComplete));
415+
metric => metric.SceneEventType.Equals(SceneEventType.UnloadEventCompleted.ToString()));
417416

418417
// Unload a scene to trigger the messages
419418
StartServerUnloadScene();
@@ -432,7 +431,7 @@ public IEnumerator TestS2CUnloadCompleteSent()
432431
// so iterate over the connected client list on the server to ensure that we have a 1-1 match of connected
433432
// clients to sent metrics.
434433
var filteredSentMetrics = sentMetrics
435-
.Where(metric => metric.SceneEventType == ToolsSceneEventType.S2C_UnLoadComplete)
434+
.Where(metric => metric.SceneEventType == SceneEventType.UnloadEventCompleted.ToString())
436435
.Where(metric => metric.SceneName == k_SimpleSceneName);
437436
CollectionAssert.AreEquivalent(filteredSentMetrics.Select(x => x.Connection.Id), Server.ConnectedClients.Select(x => x.Key));
438437
}
@@ -452,7 +451,7 @@ public IEnumerator TestS2CUnloadCompleteReceived()
452451
var waitForReceivedMetric = new WaitForMetricValues<SceneEventMetric>(
453452
ClientMetrics.Dispatcher,
454453
NetworkMetricTypes.SceneEventReceived,
455-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_UnLoadComplete));
454+
metric => metric.SceneEventType.Equals(SceneEventType.UnloadEventCompleted.ToString()));
456455

457456
// Unload the scene to trigger the messages
458457
StartServerUnloadScene();
@@ -468,7 +467,7 @@ public IEnumerator TestS2CUnloadCompleteReceived()
468467
Assert.AreEqual(1, receivedMetrics.Count);
469468
var receivedMetric = receivedMetrics.First();
470469

471-
Assert.AreEqual(ToolsSceneEventType.S2C_UnLoadComplete, receivedMetric.SceneEventType);
470+
Assert.AreEqual(SceneEventType.UnloadEventCompleted.ToString(), receivedMetric.SceneEventType);
472471
Assert.AreEqual(Server.LocalClientId, receivedMetric.Connection.Id);
473472
Assert.AreEqual(k_SimpleSceneName, receivedMetric.SceneName);
474473
}
@@ -484,7 +483,7 @@ public IEnumerator TestS2CSyncSent()
484483
var waitForSentMetric = new WaitForMetricValues<SceneEventMetric>(
485484
ServerMetrics.Dispatcher,
486485
NetworkMetricTypes.SceneEventSent,
487-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_Sync));
486+
metric => metric.SceneEventType.Equals(SceneEventType.Synchronize.ToString()));
488487

489488
// To trigger a sync, we need to connect a new client to an already started server, so create a client
490489
var newClient = CreateAndStartClient();
@@ -502,7 +501,7 @@ public IEnumerator TestS2CSyncSent()
502501

503502
var sentMetric = sentMetrics.First();
504503

505-
Assert.AreEqual(ToolsSceneEventType.S2C_Sync, sentMetric.SceneEventType);
504+
Assert.AreEqual(SceneEventType.Synchronize.ToString(), sentMetric.SceneEventType);
506505
Assert.AreEqual(newClient.LocalClientId, sentMetric.Connection.Id);
507506

508507
MultiInstanceHelpers.StopOneClient(newClient);
@@ -520,7 +519,7 @@ public IEnumerator TestS2CSyncReceived()
520519
var waitForReceivedMetric = new WaitForMetricValues<SceneEventMetric>(
521520
newClientMetrics.Dispatcher,
522521
NetworkMetricTypes.SceneEventReceived,
523-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.S2C_Sync));
522+
metric => metric.SceneEventType.Equals(SceneEventType.Synchronize.ToString()));
524523

525524
// Wait for the metric to be emitted when the message is received on the client from the server
526525
yield return waitForReceivedMetric.WaitForMetricsReceived();
@@ -529,7 +528,7 @@ public IEnumerator TestS2CSyncReceived()
529528
Assert.AreEqual(1, receivedMetrics.Count);
530529
var receivedMetric = receivedMetrics.First();
531530

532-
Assert.AreEqual(ToolsSceneEventType.S2C_Sync, receivedMetric.SceneEventType);
531+
Assert.AreEqual(SceneEventType.Synchronize.ToString(), receivedMetric.SceneEventType);
533532
Assert.AreEqual(Server.LocalClientId, receivedMetric.Connection.Id);
534533

535534
MultiInstanceHelpers.StopOneClient(newClient);
@@ -547,7 +546,7 @@ public IEnumerator TestC2SSyncCompleteSent()
547546
var waitForSentMetric = new WaitForMetricValues<SceneEventMetric>(
548547
newClientMetrics.Dispatcher,
549548
NetworkMetricTypes.SceneEventSent,
550-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.C2S_SyncComplete));
549+
metric => metric.SceneEventType.Equals(SceneEventType.SynchronizeComplete.ToString()));
551550

552551
// Wait for the metric to be emitted when the client has completed the sync locally and sends the message
553552
// to the server
@@ -557,7 +556,7 @@ public IEnumerator TestC2SSyncCompleteSent()
557556
Assert.AreEqual(1, sentMetrics.Count);
558557
var sentMetric = sentMetrics.First();
559558

560-
Assert.AreEqual(ToolsSceneEventType.C2S_SyncComplete, sentMetric.SceneEventType);
559+
Assert.AreEqual(SceneEventType.SynchronizeComplete.ToString(), sentMetric.SceneEventType);
561560
Assert.AreEqual(Server.LocalClientId, sentMetric.Connection.Id);
562561

563562
MultiInstanceHelpers.StopOneClient(newClient);
@@ -569,7 +568,7 @@ public IEnumerator TestC2SSyncCompleteReceived()
569568
var waitForReceivedMetric = new WaitForMetricValues<SceneEventMetric>(
570569
ServerMetrics.Dispatcher,
571570
NetworkMetricTypes.SceneEventReceived,
572-
metric => metric.SceneEventType.Equals(ToolsSceneEventType.C2S_SyncComplete));
571+
metric => metric.SceneEventType.Equals(SceneEventType.SynchronizeComplete.ToString()));
573572

574573
// To trigger a sync, we need to connect a new client to an already started server, so create a client
575574
var newClient = CreateAndStartClient();
@@ -583,7 +582,7 @@ public IEnumerator TestC2SSyncCompleteReceived()
583582

584583
var receivedMetric = receivedMetrics.First();
585584

586-
Assert.AreEqual(ToolsSceneEventType.C2S_SyncComplete, receivedMetric.SceneEventType);
585+
Assert.AreEqual(SceneEventType.SynchronizeComplete.ToString(), receivedMetric.SceneEventType);
587586
Assert.AreEqual(newClient.LocalClientId, receivedMetric.Connection.Id);
588587

589588
MultiInstanceHelpers.StopOneClient(newClient);

testproject-tools-integration/Packages/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"dependencies": {
44
"com.unity.ide.rider": "3.0.7",
55
"com.unity.netcode.gameobjects": "file:../../com.unity.netcode.gameobjects",
6-
"com.unity.multiplayer.tools": "0.0.1-preview.10",
6+
"com.unity.multiplayer.tools": "0.0.1-preview.11",
77
"com.unity.netcode.adapter.utp": "file:../../com.unity.netcode.adapter.utp",
88
"com.unity.test-framework": "1.1.29",
99
"com.unity.modules.ai": "1.0.0",

testproject-tools-integration/Packages/packages-lock.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"url": "https://artifactory.prd.cds.internal.unity3d.com/artifactory/api/npm/upm-candidates"
4444
},
4545
"com.unity.multiplayer.tools": {
46-
"version": "0.0.1-preview.9",
46+
"version": "0.0.1-preview.11",
4747
"depth": 0,
4848
"source": "registry",
4949
"dependencies": {
@@ -56,7 +56,7 @@
5656
"depth": 0,
5757
"source": "local",
5858
"dependencies": {
59-
"com.unity.netcode.gameobjects": "0.0.1-preview.1",
59+
"com.unity.netcode.gameobjects": "0.2.0-preview.1",
6060
"com.unity.transport": "1.0.0-pre.5"
6161
}
6262
},

0 commit comments

Comments
 (0)