Skip to content

Commit e72383b

Browse files
committed
remove json serialization benchmark
1 parent 46ba9bd commit e72383b

File tree

3 files changed

+60
-77
lines changed

3 files changed

+60
-77
lines changed

benchmarks/Backdash.Benchmarks/Cases/SerializationBenchmark.cs

Lines changed: 36 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
using System.Buffers;
66
using System.Diagnostics;
77
using System.Runtime.InteropServices;
8-
using System.Text.Json;
9-
using System.Text.Json.Serialization;
108
using Backdash.Core;
119
using Backdash.Data;
1210
using Backdash.Network;
@@ -15,65 +13,36 @@
1513

1614
namespace Backdash.Benchmarks.Cases;
1715

18-
[RPlotExporter]
19-
[InProcess, MemoryDiagnoser, RankColumn]
16+
[InProcess, MemoryDiagnoser]
17+
[RPlotExporter, RankColumn]
2018
public class SerializationBenchmark
2119
{
2220
TestData data = null!;
2321
TestData result = null!;
2422

2523
readonly ArrayBufferWriter<byte> buffer = new((int)ByteSize.FromMebiBytes(10).ByteCount);
2624

27-
Utf8JsonWriter jsonWriter = null!;
28-
29-
readonly JsonSerializerOptions jsonOptions = new()
30-
{
31-
PreferredObjectCreationHandling = JsonObjectCreationHandling.Populate,
32-
WriteIndented = false,
33-
IncludeFields = true,
34-
};
35-
36-
static TestData NewTestData(Random random)
37-
{
38-
TestData testData = new()
39-
{
40-
Field1 = random.NextBool(),
41-
Field2 = random.Next<ulong>(),
42-
};
43-
44-
for (int i = 0; i < testData.Field3.Length; i++)
45-
{
46-
ref var entry = ref testData.Field3[i];
47-
entry.Field1 = random.Next();
48-
entry.Field2 = random.Next<uint>();
49-
entry.Field3 = random.Next<ulong>();
50-
entry.Field4 = random.Next<long>();
51-
entry.Field5 = random.Next<short>();
52-
entry.Field6 = random.Next<ushort>();
53-
entry.Field7 = random.Next<byte>();
54-
entry.Field8 = random.Next<sbyte>();
55-
random.Next(entry.Field9.AsSpan());
56-
}
57-
58-
return testData;
59-
}
60-
6125
[GlobalSetup]
6226
public void Setup()
6327
{
6428
Random random = new(42);
65-
data = NewTestData(random);
66-
jsonWriter = new(buffer);
29+
data = TestData.Generate(random);
6730
}
6831

6932
[IterationSetup]
7033
public void BeforeEach()
7134
{
7235
buffer.Clear();
73-
jsonWriter.Reset();
7436
result = new();
7537
}
7638

39+
[IterationCleanup]
40+
public void AfterEach()
41+
{
42+
var size = ByteSize.FromBytes(buffer.WrittenCount);
43+
Console.WriteLine($"Data Size: {size} ({size.ByteCount} bytes)");
44+
}
45+
7746
[Benchmark]
7847
public void Backdash()
7948
{
@@ -92,15 +61,6 @@ public void MemoryPack()
9261
MemoryPackSerializer.Deserialize(buffer.WrittenSpan, ref result!);
9362
Debug.Assert(data == result);
9463
}
95-
96-
[Benchmark]
97-
public void SystemJson()
98-
{
99-
JsonSerializer.Serialize(jsonWriter, data, jsonOptions);
100-
Utf8JsonReader reader = new(buffer.WrittenSpan);
101-
result = JsonSerializer.Deserialize<TestData>(ref reader, jsonOptions)!;
102-
Debug.Assert(data == result);
103-
}
10464
}
10565

10666
[MemoryPackable]
@@ -112,7 +72,7 @@ public sealed partial class TestData : IBinarySerializable, IEquatable<TestData>
11272

11373
public TestData()
11474
{
115-
Field3 = new TestEntryData[1_000];
75+
Field3 = new TestEntryData[20_000];
11676
for (var i = 0; i < Field3.Length; i++)
11777
Field3[i].Field9 = new int[10_000];
11878
}
@@ -148,6 +108,31 @@ public static bool Equals(TestData? left, TestData? right)
148108

149109
public static bool operator ==(TestData? left, TestData? right) => Equals(left, right);
150110
public static bool operator !=(TestData? left, TestData? right) => !Equals(left, right);
111+
112+
public static TestData Generate(Random random)
113+
{
114+
TestData testData = new()
115+
{
116+
Field1 = random.NextBool(),
117+
Field2 = random.Next<ulong>(),
118+
};
119+
120+
for (int i = 0; i < testData.Field3.Length; i++)
121+
{
122+
ref var entry = ref testData.Field3[i];
123+
entry.Field1 = random.Next();
124+
entry.Field2 = random.Next<uint>();
125+
entry.Field3 = random.Next<ulong>();
126+
entry.Field4 = random.Next<long>();
127+
entry.Field5 = random.Next<short>();
128+
entry.Field6 = random.Next<ushort>();
129+
entry.Field7 = random.Next<byte>();
130+
entry.Field8 = random.Next<sbyte>();
131+
random.Next(entry.Field9.AsSpan());
132+
}
133+
134+
return testData;
135+
}
151136
}
152137

153138
[MemoryPackable]

benchmarks/Backdash.Benchmarks/Program.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,4 @@
88
switcher.Run(args);
99
#endif
1010

11-
// BenchmarkRunner.Run<GetBitStringBenchmark>();
12-
// BenchmarkRunner.Run<UdpClientBenchmark>();
1311
// await new UdpClientBenchmark().Start(10, false).ConfigureAwait(false);

src/Backdash/Core/Mem.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -138,33 +138,33 @@ public static int PopCount<T>(in ReadOnlySpan<T> values) where T : unmanaged
138138
switch (remaining.Length)
139139
{
140140
case >= sizeof(ulong):
141-
{
142-
var value = MemoryMarshal.Read<ulong>(remaining[..sizeof(ulong)]);
143-
index += sizeof(ulong);
144-
count += BitOperations.PopCount(value);
145-
continue;
146-
}
141+
{
142+
var value = MemoryMarshal.Read<ulong>(remaining[..sizeof(ulong)]);
143+
index += sizeof(ulong);
144+
count += BitOperations.PopCount(value);
145+
continue;
146+
}
147147
case >= sizeof(uint):
148-
{
149-
var value = MemoryMarshal.Read<uint>(remaining[..sizeof(uint)]);
150-
index += sizeof(uint);
151-
count += BitOperations.PopCount(value);
152-
continue;
153-
}
148+
{
149+
var value = MemoryMarshal.Read<uint>(remaining[..sizeof(uint)]);
150+
index += sizeof(uint);
151+
count += BitOperations.PopCount(value);
152+
continue;
153+
}
154154
case >= sizeof(ushort):
155-
{
156-
var value = MemoryMarshal.Read<ushort>(remaining[..sizeof(ushort)]);
157-
index += sizeof(ushort);
158-
count += ushort.PopCount(value);
159-
continue;
160-
}
155+
{
156+
var value = MemoryMarshal.Read<ushort>(remaining[..sizeof(ushort)]);
157+
index += sizeof(ushort);
158+
count += ushort.PopCount(value);
159+
continue;
160+
}
161161
case >= sizeof(byte):
162-
{
163-
var value = remaining[0];
164-
index += sizeof(byte);
165-
count += byte.PopCount(value);
166-
break;
167-
}
162+
{
163+
var value = remaining[0];
164+
index += sizeof(byte);
165+
count += byte.PopCount(value);
166+
break;
167+
}
168168
}
169169
}
170170

0 commit comments

Comments
 (0)