Skip to content

Commit

Permalink
Garbage Optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
garrynewman committed Apr 28, 2016
1 parent 822a903 commit f00fe08
Show file tree
Hide file tree
Showing 13 changed files with 501 additions and 338 deletions.
43 changes: 30 additions & 13 deletions CodeGenerator/CodeGenerator/FieldSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,20 @@ public static bool FieldReader(Field f, CodeWriter cw)

if (f.ProtoType is ProtoMessage)
{
if (f.ProtoType.OptionType == "struct")
if ( f.ProtoType.OptionType == "struct")
{
cw.WriteLine(FieldReaderType(f, "stream", "br", "ref instance." + f.CsName) + ";");
if ( f.OptionUseReferences )
{
cw.WriteLine( FieldReaderType( f, "stream", "br", "ref instance." + f.CsName ) + ";" );
}
else
{
cw.WriteLine( "{" );
cw.WriteIndent( "var a = instance." + f.CsName + ";" );
cw.WriteIndent( "instance." + f.CsName + " = " + FieldReaderType( f, "stream", "br", "ref a" ) + ";" );
cw.WriteLine( "}" );
}

return true;
}

Expand Down Expand Up @@ -138,9 +149,11 @@ static string FieldReaderPrimitive(Field f, string stream, string binaryReader,
switch (f.ProtoType.ProtoName)
{
case ProtoBuiltin.Double:
return binaryReader + ".ReadDouble()";
//return binaryReader + ".ReadDouble()";
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadDouble(" + stream + ")";
case ProtoBuiltin.Float:
return binaryReader + ".ReadSingle()";
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadSingle(" + stream + ")";
// return binaryReader + ".ReadSingle()";
case ProtoBuiltin.Int32: //Wire format is 64 bit varint
return "(int)global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadUInt64(" + stream + ")";
case ProtoBuiltin.Int64:
Expand All @@ -154,6 +167,7 @@ static string FieldReaderPrimitive(Field f, string stream, string binaryReader,
case ProtoBuiltin.SInt64:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadZInt64(" + stream + ")";
case ProtoBuiltin.Fixed32:
//return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadSingle(" + stream + ")";
return binaryReader + ".ReadUInt32()";
case ProtoBuiltin.Fixed64:
return binaryReader + ".ReadUInt64()";
Expand Down Expand Up @@ -207,7 +221,7 @@ static void VarintWriter(string stream, uint value, CodeWriter cw)
b |= 0x80;
cw.WriteLine(stream + ".WriteByte(" + b + ");");
}
}
}

/// <summary>
/// Generates inline writer of a length delimited byte array
Expand Down Expand Up @@ -255,10 +269,11 @@ public static void FieldWriter(ProtoMessage m, Field f, CodeWriter cw)
{
//Un-optimized, unknown size
cw.WriteLine("msField.SetLength(0);");
if (f.IsUsingBinaryWriter)
cw.WriteLine("BinaryWriter bw" + f.ID + " = new BinaryWriter(ms" + f.ID + ");");
if ( f.IsUsingBinaryWriter )
throw new System.NotSupportedException();
//cw.WriteLine("BinaryWriter bw" + f.ID + " = new BinaryWriter(ms" + f.ID + ");");

cw.ForeachBracket("var i" + f.ID + " in instance." + f.CsName);
cw.ForeachBracket( "i" + f.ID, "instance." + f.CsName );
cw.WriteLine(FieldWriterType(f, "msField", "bw" + f.ID, "i" + f.ID));
cw.EndBracket();

Expand All @@ -272,7 +287,7 @@ public static void FieldWriter(ProtoMessage m, Field f, CodeWriter cw)
//For constant size messages we can skip serializing to the MemoryStream
cw.WriteLine("global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, " + f.ProtoType.WireSize + "u * (uint)instance." + f.CsName + ".Count);");

cw.ForeachBracket("var i" + f.ID + " in instance." + f.CsName);
cw.ForeachBracket( "i" + f.ID, "instance." + f.CsName );
cw.WriteLine(FieldWriterType(f, "stream", "bw", "i" + f.ID));
cw.EndBracket();
}
Expand All @@ -282,7 +297,7 @@ public static void FieldWriter(ProtoMessage m, Field f, CodeWriter cw)
{
//Repeated not packet
cw.IfBracket("instance." + f.CsName + " != null");
cw.ForeachBracket("var i" + f.ID + " in instance." + f.CsName);
cw.ForeachBracket( "i" + f.ID, "instance." + f.CsName );
KeyWriter("stream", f.ID, f.ProtoType.WireType, cw);
cw.WriteLine(FieldWriterType(f, "stream", "bw", "i" + f.ID));
cw.EndBracket();
Expand Down Expand Up @@ -369,18 +384,20 @@ static string FieldWriterPrimitive(Field f, string stream, string binaryWriter,
switch (f.ProtoType.ProtoName)
{
case ProtoBuiltin.Double:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteDouble(" + stream + ", " + instance + ");";
case ProtoBuiltin.Float:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteSingle(" + stream + ", " + instance + ");";
case ProtoBuiltin.Fixed32:
case ProtoBuiltin.Fixed64:
case ProtoBuiltin.SFixed32:
case ProtoBuiltin.SFixed64:
return binaryWriter + ".Write(" + instance + ");";
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUnimplemented(" + instance + ");";
case ProtoBuiltin.Int32: //Serialized as 64 bit varint
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(" + stream + ",(ulong)" + instance + ");";
case ProtoBuiltin.Int64:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(" + stream + ",(ulong)" + instance + ");";
case ProtoBuiltin.UInt32:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(" + stream + ", " + instance + ");";
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(" + stream + ",(uint)" + instance + ");";
case ProtoBuiltin.UInt64:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(" + stream + ", " + instance + ");";
case ProtoBuiltin.SInt32:
Expand All @@ -390,7 +407,7 @@ static string FieldWriterPrimitive(Field f, string stream, string binaryWriter,
case ProtoBuiltin.Bool:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(" + stream + ", " + instance + ");";
case ProtoBuiltin.String:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(" + stream + ", Encoding.UTF8.GetBytes(" + instance + "));";
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteString(" + stream + ", " + instance + " );";
case ProtoBuiltin.Bytes:
return "global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(" + stream + ", " + instance + ");";
}
Expand Down
8 changes: 4 additions & 4 deletions CodeGenerator/CodeGenerator/MessageCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,12 @@ static string GenerateProperty(Field f)
if (f.Rule == FieldRule.Repeated)
type = "List<" + type + ">";

if (f.OptionReadOnly)
if ( f.OptionReadOnly )
return f.OptionAccess + " readonly " + type + " " + f.CsName + " = new " + type + "();";
else if (f.ProtoType is ProtoMessage && f.ProtoType.OptionType == "struct")
return f.OptionAccess + " " + type + " " + f.CsName + ";";
else if ( f.ProtoType is ProtoMessage && f.ProtoType.OptionType == "struct" )
return "[System.NonSerialized] " + f.OptionAccess + " " + type + " " + f.CsName + ";";
else
return f.OptionAccess + " " + type + " " + f.CsName + " { get; set; }";
return "[System.NonSerialized] " + f.OptionAccess + " " + type + " " + f.CsName + ";";// { get; set; }";
}
}
}
Expand Down
Loading

0 comments on commit f00fe08

Please sign in to comment.