Skip to content

Commit 6f25abe

Browse files
update
Doing a full pass on the internal usage of NetworkManager.ConnectedClientsIds and replacing with NetworkConnectionManager.ConnectedClientIds to remove any other potential small memory allocations. The best savings will be where it is used in universal RPCs.
1 parent fc36e2a commit 6f25abe

File tree

18 files changed

+36
-28
lines changed

18 files changed

+36
-28
lines changed

com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ internal void CheckForAnimatorChanges()
996996
{
997997
// Just notify all remote clients and not the local server
998998
m_ClientSendList.Clear();
999-
foreach (var clientId in NetworkManager.ConnectedClientsIds)
999+
foreach (var clientId in NetworkManager.ConnectionManager.ConnectedClientIds)
10001000
{
10011001
if (clientId == NetworkManager.LocalClientId || !NetworkObject.Observers.Contains(clientId))
10021002
{
@@ -1315,7 +1315,7 @@ private unsafe void SendParametersUpdateServerRpc(ParametersUpdateMessage parame
13151315
if (NetworkManager.ConnectedClientsIds.Count > (IsHost ? 2 : 1))
13161316
{
13171317
m_ClientSendList.Clear();
1318-
foreach (var clientId in NetworkManager.ConnectedClientsIds)
1318+
foreach (var clientId in NetworkManager.ConnectionManager.ConnectedClientIds)
13191319
{
13201320
if (clientId == serverRpcParams.Receive.SenderClientId || clientId == NetworkManager.ServerClientId || !NetworkObject.Observers.Contains(clientId))
13211321
{
@@ -1378,7 +1378,7 @@ private void SendAnimStateServerRpc(AnimationMessage animationMessage, ServerRpc
13781378
if (NetworkManager.ConnectedClientsIds.Count > (IsHost ? 2 : 1))
13791379
{
13801380
m_ClientSendList.Clear();
1381-
foreach (var clientId in NetworkManager.ConnectedClientsIds)
1381+
foreach (var clientId in NetworkManager.ConnectionManager.ConnectedClientIds)
13821382
{
13831383
if (clientId == serverRpcParams.Receive.SenderClientId || clientId == NetworkManager.ServerClientId || !NetworkObject.Observers.Contains(clientId))
13841384
{
@@ -1452,7 +1452,7 @@ internal void SendAnimTriggerServerRpc(AnimationTriggerMessage animationTriggerM
14521452
InternalSetTrigger(animationTriggerMessage.Hash, animationTriggerMessage.IsTriggerSet);
14531453

14541454
m_ClientSendList.Clear();
1455-
foreach (var clientId in NetworkManager.ConnectedClientsIds)
1455+
foreach (var clientId in NetworkManager.ConnectionManager.ConnectedClientIds)
14561456
{
14571457
if (clientId == NetworkManager.ServerClientId || !NetworkObject.Observers.Contains(clientId))
14581458
{

com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,12 @@ internal void InvokeOnClientConnectedCallback(ulong clientId)
148148
}
149149

150150
// Invoking connection event on non-authority local client. Need to calculate PeerIds.
151-
var peerClientIds = new NativeArray<ulong>(Math.Max(NetworkManager.ConnectedClientsIds.Count - 1, 0), Allocator.Temp);
151+
var peerClientIds = new NativeArray<ulong>(Math.Max(ConnectedClientIds.Count - 1, 0), Allocator.Temp);
152152
// `using var peerClientIds` or `using(peerClientIds)` renders it immutable...
153153
using var sentinel = peerClientIds;
154154

155155
var idx = 0;
156-
foreach (var peerId in NetworkManager.ConnectedClientsIds)
156+
foreach (var peerId in ConnectedClientIds)
157157
{
158158
if (peerId == NetworkManager.LocalClientId)
159159
{

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@ internal void NetworkBehaviourUpdate(bool forceSend = false)
3434
#endif
3535
try
3636
{
37-
m_DirtyNetworkObjects.UnionWith(m_PendingDirtyNetworkObjects);
38-
m_PendingDirtyNetworkObjects.Clear();
37+
if (m_PendingDirtyNetworkObjects.Count > 0)
38+
{
39+
m_DirtyNetworkObjects.UnionWith(m_PendingDirtyNetworkObjects);
40+
m_PendingDirtyNetworkObjects.Clear();
41+
}
3942

4043
// NetworkObject references can become null, when hidden or despawned. Once NUll, there is no point
4144
// trying to process them, even if they were previously marked as dirty.

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,7 +1616,7 @@ public void NetworkHide(ulong clientId)
16161616
// Send destroy call
16171617
size = NetworkManager.ConnectionManager.SendMessage(ref message, NetworkDelivery.ReliableSequenced, clientId);
16181618
// Broadcast the destroy to all clients so they can update their observers list
1619-
foreach (var client in NetworkManager.ConnectedClientsIds)
1619+
foreach (var client in NetworkManager.ConnectionManager.ConnectedClientIds)
16201620
{
16211621
if (client == clientId || client == NetworkManager.LocalClientId)
16221622
{
@@ -2363,7 +2363,7 @@ private void OnTransformParentChanged()
23632363
}
23642364
else
23652365
{
2366-
foreach (var clientId in NetworkManager.ConnectedClientsIds)
2366+
foreach (var clientId in NetworkManager.ConnectionManager.ConnectedClientIds)
23672367
{
23682368
if (clientId == NetworkManager.ServerClientId)
23692369
{
@@ -2382,7 +2382,7 @@ private void OnTransformParentChanged()
23822382
var maxCount = NetworkManager.ConnectedClientsIds.Count;
23832383
ulong* clientIds = stackalloc ulong[maxCount];
23842384
int idx = 0;
2385-
foreach (var clientId in NetworkManager.ConnectedClientsIds)
2385+
foreach (var clientId in NetworkManager.ConnectionManager.ConnectedClientIds)
23862386
{
23872387
if (clientId == NetworkManager.ServerClientId)
23882388
{

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ChangeOwnershipMessage.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,9 @@ public void Handle(ref NetworkContext context)
250250
}
251251
else
252252
{
253-
foreach (var clientId in clientList)
253+
for (int i = 0; i < clientList.Count; i++)
254254
{
255+
var clientId = clientList[i];
255256
if (clientId == networkManager.LocalClientId)
256257
{
257258
continue;

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/CreateObjectMessage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,9 @@ internal static void CreateObject(ref NetworkManager networkManager, ulong sende
247247
var clientList = hasObserverIdList && !networkObject.IsPlayerObject ? observerIds : networkManager.ConnectedClientsIds;
248248

249249
// Update the observers for this instance
250-
foreach (var clientId in clientList)
250+
for (int i = 0; i < clientList.Count; i++)
251251
{
252-
networkObject.Observers.Add(clientId);
252+
networkObject.Observers.Add(clientList[i]);
253253
}
254254

255255
// Mock CMB Service and forward to all clients

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/DestroyObjectMessage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ private void HandleDAHostForwardMessage(ulong senderId, ref NetworkManager netwo
189189
DeferredDespawnTick = DeferredDespawnTick,
190190
};
191191
var ownerClientId = networkObject == null ? senderId : networkObject.OwnerClientId;
192-
var clientIds = networkObject == null ? networkManager.ConnectedClientsIds.ToList() : networkObject.Observers.ToList();
192+
var clientIds = networkObject == null ? networkManager.ConnectionManager.ConnectedClientIds : networkObject.Observers.ToList();
193193

194194
foreach (var clientId in clientIds)
195195
{

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public void Handle(ref NetworkContext context)
228228
if (isServerAndDeltaForwarding)
229229
{
230230
m_ForwardUpdates = new Dictionary<ulong, List<int>>();
231-
foreach (var clientId in networkManager.ConnectedClientsIds)
231+
foreach (var clientId in networkManager.ConnectionManager.ConnectedClientIds)
232232
{
233233
if (clientId == context.SenderId || clientId == networkManager.LocalClientId || !networkObject.Observers.Contains(clientId))
234234
{

com.unity.netcode.gameobjects/Runtime/Messaging/RpcTargets/BaseRpcTarget.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ public abstract class BaseRpcTarget : IDisposable
1111
/// The <see cref="NetworkManager"/> instance which can be used to handle sending and receiving the specific target(s)
1212
/// </summary>
1313
protected NetworkManager m_NetworkManager;
14+
15+
internal NetworkConnectionManager ConnectionManager;
1416
private bool m_Locked;
1517

1618
internal void Lock()
@@ -26,6 +28,7 @@ internal void Unlock()
2628
internal BaseRpcTarget(NetworkManager manager)
2729
{
2830
m_NetworkManager = manager;
31+
ConnectionManager = m_NetworkManager.ConnectionManager;
2932
}
3033

3134
/// <summary>

com.unity.netcode.gameobjects/Runtime/Messaging/RpcTargets/NotAuthorityRpcTarget.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ internal override void Send(NetworkBehaviour behaviour, ref RpcMessage message,
4040
}
4141
else
4242
{
43-
foreach (var clientId in m_NetworkManager.ConnectedClientsIds)
43+
foreach (var clientId in ConnectionManager.ConnectedClientIds)
4444
{
4545
if (clientId == behaviour.OwnerClientId || !networkObject.Observers.Contains(clientId))
4646
{

0 commit comments

Comments
 (0)