Skip to content

Commit a4a2635

Browse files
committed
refactor patch
1 parent fed25a8 commit a4a2635

7 files changed

Lines changed: 150 additions & 119 deletions

File tree

src/FastSerialization/FastSerialization.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
using System.Diagnostics;
1010
using System.IO;
1111
using System.Text; // For StringBuilder.
12-
using System.Buffers.Binary;
1312
using System.Runtime.InteropServices;
13+
using System.Buffers.Binary;
1414
// see #Introduction and #SerializerIntroduction
1515
namespace FastSerialization
1616
{
@@ -185,6 +185,10 @@ interface IStreamWriter : IDisposable
185185
/// </summary>
186186
void Write(int value);
187187
/// <summary>
188+
/// Write an blob to a stream
189+
/// </summary>
190+
void WriteBlobAsInt(int value);
191+
/// <summary>
188192
/// Write a long to a stream
189193
/// </summary>
190194
void Write(long value);
@@ -605,7 +609,7 @@ public Serializer(IStreamWriter writer, IFastSerializable entryObject)
605609
Log("<ForwardRefTable StreamLabel=\"0x" + forwardRefsLabel.ToString("x") + "\">");
606610
if (forwardReferenceDefinitions != null)
607611
{
608-
Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(forwardReferenceDefinitions.Count)));
612+
Write(forwardReferenceDefinitions.Count);
609613
for (int i = 0; i < forwardReferenceDefinitions.Count; i++)
610614
{
611615
Debug.Assert(forwardReferenceDefinitions[i] != StreamLabel.Invalid);
@@ -675,6 +679,14 @@ public void Write(int value)
675679
writer.Write(value);
676680
}
677681
/// <summary>
682+
/// Write an blob to a stream
683+
/// </summary>
684+
public void WriteBlobAsInt(int value)
685+
{
686+
Log("<Write Type=\"int\" Value=\"" + value + "\" StreamLabel=\"0x" + writer.GetLabel().ToString("x") + "\"/>");
687+
writer.WriteBlobAsInt(value);
688+
}
689+
/// <summary>
678690
/// Write a long to a stream
679691
/// </summary>
680692
public void Write(long value)
@@ -823,15 +835,15 @@ public void DefineForwardReference(ForwardReference forwardReference)
823835
/// <summary>
824836
/// Write a byte preceded by a tag that indicates its a short. These should be read with the corresponding TryReadTagged operation
825837
/// </summary>
826-
public void WriteTagged(short value) { WriteTag(Tags.Int16); Write(BinaryPrimitives.ReadInt16LittleEndian(BitConverter.GetBytes(value))); }
838+
public void WriteTagged(short value) { WriteTag(Tags.Int16); Write(value); }
827839
/// <summary>
828840
/// Write a byte preceded by a tag that indicates its a int. These should be read with the corresponding TryReadTagged operation
829841
/// </summary>
830-
public void WriteTagged(int value) { WriteTag(Tags.Int32); Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(value))); }
842+
public void WriteTagged(int value) { WriteTag(Tags.Int32); Write(value); }
831843
/// <summary>
832844
/// Write a byte preceded by a tag that indicates its a long. These should be read with the corresponding TryReadTagged operation
833845
/// </summary>
834-
public void WriteTagged(long value) { WriteTag(Tags.Int64); Write(BinaryPrimitives.ReadInt64LittleEndian(BitConverter.GetBytes(value))); }
846+
public void WriteTagged(long value) { WriteTag(Tags.Int64); Write(value); }
835847
/// <summary>
836848
/// Write a byte preceded by a tag that indicates its a string. These should be read with the corresponding TryReadTagged operation
837849
/// </summary>
@@ -1599,6 +1611,7 @@ public StreamLabel ResolveForwardReference(ForwardReference reference, bool pres
15991611
reader.GotoSuffixLabel();
16001612
Log("<Trailer StreamLabel=\"0x" + reader.Current.ToString("x") + "\"/>");
16011613
StreamLabel forwardRefsLabel = reader.ReadLabel();
1614+
16021615
Goto(forwardRefsLabel);
16031616
int fowardRefCount = reader.ReadInt32();
16041617
Log("<ForwardReferenceDefinitons StreamLabel=\"0x" + forwardRefsLabel.ToString("x") +
@@ -2233,7 +2246,7 @@ public void Write(Serializer serializer, Action toStream)
22332246
serializer.Log("<DeferedRegion>\r\n");
22342247
// We actually don't use the this pointer! We did this for symmetry with Read
22352248
ForwardReference endRegion = serializer.GetForwardReference();
2236-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes((int)endRegion))); // Allow the reader to skip this.
2249+
serializer.Write(endRegion); // Allow the reader to skip this.
22372250
toStream(); // Write the deferred data.
22382251
serializer.DefineForwardReference(endRegion);
22392252
serializer.Log("</DeferedRegion>\r\n");
@@ -2510,8 +2523,8 @@ internal SerializationType(string fullName, Deserializer deserializer)
25102523
}
25112524
void IFastSerializable.ToStream(Serializer serializer)
25122525
{
2513-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(version)));
2514-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(minimumReaderVersion)));
2526+
serializer.Write(version);
2527+
serializer.Write(minimumReaderVersion);
25152528
serializer.Write(fullName);
25162529
}
25172530
void IFastSerializable.FromStream(Deserializer deserializer)

src/FastSerialization/StreamReaderWriter.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,15 +260,15 @@ public MemoryStreamWriter(SerializationSettings settings, int initialSize = 64)
260260
writeLabel = (value) =>
261261
{
262262
Debug.Assert((long)value <= int.MaxValue);
263-
Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes((int)value)));
263+
Write((int)value);
264264
};
265265
}
266266
else
267267
{
268268
writeLabel = (value) =>
269269
{
270270
Debug.Assert((long)value <= long.MaxValue);
271-
Write(BinaryPrimitives.ReadInt64LittleEndian(BitConverter.GetBytes((long)value)));
271+
Write((long)value);
272272
};
273273
}
274274

@@ -329,6 +329,7 @@ public void Write(byte value)
329329
/// </summary>
330330
public unsafe void Write(short value)
331331
{
332+
value = BinaryPrimitives.ReadInt16LittleEndian(BitConverter.GetBytes(value));
332333
if (endPosition + sizeof(short) > bytes.Length)
333334
{
334335
MakeSpace();
@@ -345,6 +346,24 @@ public unsafe void Write(short value)
345346
/// Implementation of IStreamWriter
346347
/// </summary>
347348
public unsafe void Write(int value)
349+
{
350+
value = BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(value));
351+
if (endPosition + sizeof(int) > bytes.Length)
352+
{
353+
MakeSpace();
354+
}
355+
356+
fixed (byte* data = bytes)
357+
{
358+
*(int*)(data + endPosition) = value;
359+
}
360+
361+
endPosition += sizeof(int);
362+
}
363+
/// <summary>
364+
/// Write an blob to a stream
365+
/// </summary>
366+
public unsafe void WriteBlobAsInt(int value)
348367
{
349368
if (endPosition + sizeof(int) > bytes.Length)
350369
{
@@ -363,6 +382,7 @@ public unsafe void Write(int value)
363382
/// </summary>
364383
public unsafe void Write(long value)
365384
{
385+
value = BinaryPrimitives.ReadInt64LittleEndian(BitConverter.GetBytes(value));
366386
if (endPosition + sizeof(long) > bytes.Length)
367387
{
368388
MakeSpace();
@@ -393,7 +413,7 @@ public void Write(string value)
393413
}
394414
else
395415
{
396-
Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(value.Length)));
416+
Write(value.Length);
397417
for (int i = 0; i < value.Length; i++)
398418
{
399419
char c = value[i];

src/TraceEvent/DynamicTraceEventParser.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
using System.Text.RegularExpressions;
1313
using System.Xml;
1414
using Address = System.UInt64;
15-
using System.Buffers.Binary;
15+
1616
namespace Microsoft.Diagnostics.Tracing.Parsers
1717
{
1818
/// <summary>
@@ -1830,11 +1830,11 @@ public override string ToString()
18301830

18311831
public void ToStream(Serializer serializer)
18321832
{
1833-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes((int)eventID)));
1834-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes((int)task)));
1833+
serializer.Write((int)eventID);
1834+
serializer.Write((int)task);
18351835
serializer.Write(taskName);
18361836
serializer.Write(taskGuid);
1837-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes((int)opcode)));
1837+
serializer.Write((int)opcode);
18381838
serializer.Write(opcodeName);
18391839
serializer.Write(providerGuid);
18401840
serializer.Write(providerName);
@@ -1843,13 +1843,13 @@ public void ToStream(Serializer serializer)
18431843
serializer.Write(lookupAsWPP);
18441844
serializer.Write(containsSelfDescribingMetadata);
18451845

1846-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(payloadNames.Length)));
1846+
serializer.Write(payloadNames.Length);
18471847
foreach (var payloadName in payloadNames)
18481848
{
18491849
serializer.Write(payloadName);
18501850
}
18511851

1852-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(payloadFetches.Length)));
1852+
serializer.Write(payloadFetches.Length);
18531853
foreach (var payloadFetch in payloadFetches)
18541854
{
18551855
payloadFetch.ToStream(serializer);
@@ -1983,7 +1983,7 @@ internal class DynamicTraceEventParserState : IFastSerializable
19831983

19841984
void IFastSerializable.ToStream(Serializer serializer)
19851985
{
1986-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(providers.Count)));
1986+
serializer.Write(providers.Count);
19871987
foreach (ProviderManifest provider in providers.Values)
19881988
{
19891989
serializer.Write(provider);

src/TraceEvent/Parsers/ClrTraceEventParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Diagnostics;
77
using System.Runtime.InteropServices;
88
using System.Text;
9+
using System.Buffers.Binary;
910
using Address = System.UInt64;
1011

1112
// This file was generated with the following command:
@@ -4811,7 +4812,6 @@ public sealed class GCBulkNodeTraceData : TraceEvent
48114812
ret->EdgeCount = BinaryPrimitives.ReadInt64LittleEndian(BitConverter.GetBytes(ret->EdgeCount));
48124813
}
48134814
}
4814-
48154815
Debug.Assert((ret->Address & 0xFF00000000000003L) == 0);
48164816
Debug.Assert((ret->TypeID & 0xFF00000000000001L) == 0);
48174817
Debug.Assert(ret->Size < 0x80000000L);

src/TraceEvent/RegisteredTraceEventParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
using System.Text;
1212
using System.Text.RegularExpressions;
1313
using System.Xml;
14-
using System.Buffers.Binary;
14+
1515
namespace Microsoft.Diagnostics.Tracing.Parsers
1616
{
1717
/// <summary>
@@ -1567,7 +1567,7 @@ public virtual void ToStream(Serializer serializer)
15671567
}
15681568
}
15691569

1570-
serializer.Write(BinaryPrimitives.ReadInt32LittleEndian(BitConverter.GetBytes(count)));
1570+
serializer.Write(count);
15711571
foreach (var template in m_templates.Values)
15721572
{
15731573
if (template != null)

src/TraceEvent/TraceEvent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4667,7 +4667,7 @@ internal static unsafe string ReadUnicodeString(IntPtr pointer, int offset, int
46674667
curPos++;
46684668

46694669
}
4670-
return new string(temp, 0 curPos);
4670+
return new string(temp, 0, curPos);
46714671
}
46724672

46734673
char* charEnd = (char*)(ptr + bufferLength);

0 commit comments

Comments
 (0)