Skip to content

Commit a6c0d86

Browse files
rucchoNoelStephensUnity
authored andcommitted
reduce type resolution for extension methods in NetworkBehaviourILPP
1 parent d9a09a3 commit a6c0d86

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -968,11 +968,42 @@ private bool ImportReferences(ModuleDefinition moduleDefinition, string[] assemb
968968
continue;
969969
}
970970

971+
// to reduce unnecessary type resolution, we first check if it can be an extension without type resolution
972+
973+
var mayHaveExtension = false;
974+
975+
foreach (var attr in method.CustomAttributes)
976+
{
977+
if (attr.Constructor.DeclaringType.FullName == extensionConstructor.DeclaringType.FullName)
978+
{
979+
mayHaveExtension = true;
980+
break;
981+
}
982+
}
983+
984+
if (!mayHaveExtension)
985+
{
986+
continue;
987+
}
988+
989+
var parameters = method.Parameters;
990+
991+
if (parameters.Count != 2 || parameters[0].ParameterType is not ByReferenceType byRefType)
992+
{
993+
continue;
994+
}
995+
996+
if (byRefType.ElementType.FullName != m_FastBufferWriter_TypeRef.FullName && byRefType.ElementType.FullName != m_FastBufferReader_TypeRef.FullName)
997+
{
998+
continue;
999+
}
1000+
9711001
var isExtension = false;
9721002

9731003
foreach (var attr in method.CustomAttributes)
9741004
{
975-
if (attr.Constructor.Resolve() == extensionConstructor.Resolve())
1005+
if (attr.Constructor.DeclaringType.FullName == extensionConstructor.DeclaringType.FullName &&
1006+
attr.Constructor.Resolve() == extensionConstructor.Resolve())
9761007
{
9771008
isExtension = true;
9781009
}
@@ -983,13 +1014,11 @@ private bool ImportReferences(ModuleDefinition moduleDefinition, string[] assemb
9831014
continue;
9841015
}
9851016

986-
var parameters = method.Parameters;
987-
988-
if (parameters.Count == 2 && parameters[0].ParameterType.Resolve() == m_FastBufferWriter_TypeRef.MakeByReferenceType().Resolve())
1017+
if (parameters[0].ParameterType.Resolve() == m_FastBufferWriter_TypeRef.MakeByReferenceType().Resolve())
9891018
{
9901019
m_FastBufferWriter_ExtensionMethodRefs.Add(m_MainModule.ImportReference(method));
9911020
}
992-
else if (parameters.Count == 2 && parameters[0].ParameterType.Resolve() == m_FastBufferReader_TypeRef.MakeByReferenceType().Resolve())
1021+
else if (parameters[0].ParameterType.Resolve() == m_FastBufferReader_TypeRef.MakeByReferenceType().Resolve())
9931022
{
9941023
m_FastBufferReader_ExtensionMethodRefs.Add(m_MainModule.ImportReference(method));
9951024
}

0 commit comments

Comments
 (0)