Skip to content

Commit

Permalink
perf: reuse the network writer used for rpc parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
paulpach committed Jun 16, 2019
1 parent cc6e4f6 commit 5dafc4d
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ public static void WriteSetupLocals(ILProcessor worker)
public static void WriteCreateWriter(ILProcessor worker)
{
// create writer
worker.Append(worker.Create(OpCodes.Newobj, Weaver.NetworkWriterCtor));
worker.Append(worker.Create(OpCodes.Call, Weaver.GetArgWriterMethod));
//worker.Append(worker.Create(OpCodes.Newobj, Weaver.NetworkWriterCtor));
worker.Append(worker.Create(OpCodes.Stloc_0));
}

Expand Down
2 changes: 2 additions & 0 deletions Assets/Mirror/Editor/Weaver/Weaver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class Weaver
public static TypeReference SyncDictionaryType;

public static MethodReference NetworkBehaviourDirtyBitsReference;
public static MethodReference GetArgWriterMethod;
public static TypeReference NetworkClientType;
public static TypeReference NetworkServerType;

Expand Down Expand Up @@ -341,6 +342,7 @@ static void SetupTargetTypes()
SyncDictionaryType = NetAssembly.MainModule.GetType("Mirror.SyncDictionary`2");

NetworkBehaviourDirtyBitsReference = Resolvers.ResolveProperty(NetworkBehaviourType, CurrentAssembly, "syncVarDirtyBits");
GetArgWriterMethod = Resolvers.ResolveProperty(NetworkBehaviourType, CurrentAssembly, "GetArgWriter");

ComponentType = UnityAssembly.MainModule.GetType("UnityEngine.Component");
ClientSceneType = NetAssembly.MainModule.GetType("Mirror.ClientScene");
Expand Down
8 changes: 8 additions & 0 deletions Assets/Mirror/Runtime/NetworkBehaviour.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ protected void InitSyncObject(SyncObject syncObject)
syncObjects.Add(syncObject);
}

private static NetworkWriter argWriter;
protected static NetworkWriter GetArgWriter()
{
argWriter = argWriter ?? new NetworkWriter();
argWriter.SetLength(0);
return argWriter;
}

#region Commands
[EditorBrowsable(EditorBrowsableState.Never)]
protected void SendCommandInternal(Type invokeClass, string cmdName, NetworkWriter writer, int channelId)
Expand Down

0 comments on commit 5dafc4d

Please sign in to comment.