mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
OnSerializeAllSafely: cache writer
This commit is contained in:
parent
7323d450ad
commit
6c3401c4fe
@ -447,10 +447,17 @@ internal bool OnSerializeSafely(NetworkBehaviour comp, NetworkWriter writer, boo
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OnSerializeAllSafely is in hot path. caching the writer is really
|
||||||
|
// worth it to avoid large amounts of allocations.
|
||||||
|
static NetworkWriter onSerializeWriter = new NetworkWriter();
|
||||||
|
|
||||||
// serialize all components (or only dirty ones if not initial state)
|
// serialize all components (or only dirty ones if not initial state)
|
||||||
// -> returns serialized data of everything dirty, null if nothing was dirty
|
// -> returns serialized data of everything dirty, null if nothing was dirty
|
||||||
internal byte[] OnSerializeAllSafely(bool initialState)
|
internal byte[] OnSerializeAllSafely(bool initialState)
|
||||||
{
|
{
|
||||||
|
// reset cached writer's position
|
||||||
|
onSerializeWriter.Position = 0;
|
||||||
|
|
||||||
if (m_NetworkBehaviours.Length > 64)
|
if (m_NetworkBehaviours.Length > 64)
|
||||||
{
|
{
|
||||||
Debug.LogError("Only 64 NetworkBehaviour components are allowed for NetworkIdentity: " + name + " because of the dirtyComponentMask");
|
Debug.LogError("Only 64 NetworkBehaviour components are allowed for NetworkIdentity: " + name + " because of the dirtyComponentMask");
|
||||||
@ -461,8 +468,7 @@ internal byte[] OnSerializeAllSafely(bool initialState)
|
|||||||
if (dirtyComponentsMask == 0L)
|
if (dirtyComponentsMask == 0L)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
NetworkWriter writer = new NetworkWriter();
|
onSerializeWriter.WritePackedUInt64(dirtyComponentsMask); // WritePacked64 so we don't write full 8 bytes if we don't have to
|
||||||
writer.WritePackedUInt64(dirtyComponentsMask); // WritePacked64 so we don't write full 8 bytes if we don't have to
|
|
||||||
|
|
||||||
foreach (NetworkBehaviour comp in m_NetworkBehaviours)
|
foreach (NetworkBehaviour comp in m_NetworkBehaviours)
|
||||||
{
|
{
|
||||||
@ -473,7 +479,7 @@ internal byte[] OnSerializeAllSafely(bool initialState)
|
|||||||
{
|
{
|
||||||
// serialize the data
|
// serialize the data
|
||||||
if (LogFilter.Debug) { Debug.Log("OnSerializeAllSafely: " + name + " -> " + comp.GetType() + " initial=" + initialState); }
|
if (LogFilter.Debug) { Debug.Log("OnSerializeAllSafely: " + name + " -> " + comp.GetType() + " initial=" + initialState); }
|
||||||
OnSerializeSafely(comp, writer, initialState);
|
OnSerializeSafely(comp, onSerializeWriter, initialState);
|
||||||
|
|
||||||
// Clear dirty bits only if we are synchronizing data and not sending a spawn message.
|
// Clear dirty bits only if we are synchronizing data and not sending a spawn message.
|
||||||
// This preserves the behavior in HLAPI
|
// This preserves the behavior in HLAPI
|
||||||
@ -484,7 +490,7 @@ internal byte[] OnSerializeAllSafely(bool initialState)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return writer.ToArray();
|
return onSerializeWriter.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ulong GetDirtyMask(NetworkBehaviour[] components, bool initialState)
|
private ulong GetDirtyMask(NetworkBehaviour[] components, bool initialState)
|
||||||
|
Loading…
Reference in New Issue
Block a user