Skip to content

Commit 87ad62d

Browse files
authored
Add TypeFilter enabled benchmark (#283)
1 parent d8c7ea1 commit 87ad62d

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

src/Hyperion.Benchmarks/SerializeClassesBenchmark.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#endregion
99

1010
using System;
11+
using System.Runtime.CompilerServices;
1112
using BenchmarkDotNet.Attributes;
1213

1314
namespace Hyperion.Benchmarks
@@ -20,9 +21,25 @@ public class SerializeClassesBenchmark : HyperionBenchmark
2021
private LargeSealedClass sealedObject;
2122
private GenericClass<int, string, bool, DateTime, Guid> genericObject;
2223

24+
private Serializer _filteredSerializer;
25+
2326
protected override void Init()
2427
{
25-
Serializer = new Serializer(new SerializerOptions(preserveObjectReferences:true));
28+
var baseOptions = new SerializerOptions(preserveObjectReferences: true);
29+
Serializer = new Serializer(baseOptions);
30+
31+
var filteredOptions = baseOptions
32+
.WithTypeFilter(
33+
TypeFilterBuilder.Create()
34+
.Include<CyclicClassA>()
35+
.Include<CyclicClassB>()
36+
.Include<VirtualTestClass>()
37+
.Include<LargeSealedClass>()
38+
.Include<GenericClass<int, string, bool, DateTime, Guid>>()
39+
.Include<TestEnum>()
40+
.Build());
41+
_filteredSerializer = new Serializer(filteredOptions);
42+
2643
var a = new CyclicClassA();
2744
var b = new CyclicClassB();
2845
a.B = b;
@@ -45,9 +62,23 @@ protected override void Init()
4562
#endregion
4663

4764
[Benchmark] public void Cyclic_References() => SerializeAndDeserialize(cyclic);
65+
[Benchmark] public void Filtered_Cyclic_References() => SerializeAndFilteredDeserialize(cyclic);
4866
[Benchmark] public void Virtual_Classes() => SerializeAndDeserialize(virtualObject);
67+
[Benchmark] public void Filtered_Virtual_Classes() => SerializeAndFilteredDeserialize(virtualObject);
4968
[Benchmark] public void Large_Sealed_Classes() => SerializeAndDeserialize(sealedObject);
69+
[Benchmark] public void Filtered_Large_Sealed_Classes() => SerializeAndFilteredDeserialize(sealedObject);
5070
[Benchmark] public void Generic_Classes() => SerializeAndDeserialize(genericObject);
71+
[Benchmark] public void Filtered_Generic_Classes() => SerializeAndFilteredDeserialize(genericObject);
72+
73+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
74+
private void SerializeAndFilteredDeserialize<T>(T elem)
75+
{
76+
Serializer.Serialize(elem, Stream);
77+
Stream.Position = 0;
78+
79+
_filteredSerializer.Deserialize<T>(Stream);
80+
Stream.Position = 0;
81+
}
5182
}
5283

5384
#region test data types

src/Hyperion.Benchmarks/SerializeStructsBenchmark.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// -----------------------------------------------------------------------
88
#endregion
99

10+
using System.Runtime.CompilerServices;
1011
using System.Runtime.InteropServices;
1112
using BenchmarkDotNet.Attributes;
1213

@@ -15,13 +16,25 @@ namespace Hyperion.Benchmarks
1516
public class SerializeStructsBenchmark : HyperionBenchmark
1617
{
1718
#region init
19+
private Serializer _filteredSerializer;
20+
1821
private StandardStruct standardValue;
1922
private BlittableStruct blittableValue;
2023
private TestEnum testEnum;
2124

2225
protected override void Init()
2326
{
2427
base.Init();
28+
29+
var filteredOptions = SerializerOptions.Default
30+
.WithTypeFilter(
31+
TypeFilterBuilder.Create()
32+
.Include<StandardStruct>()
33+
.Include<BlittableStruct>()
34+
.Include<TestEnum>()
35+
.Build());
36+
_filteredSerializer = new Serializer(filteredOptions);
37+
2538
standardValue = new StandardStruct(1, "John", "Doe", isLoggedIn: false);
2639
blittableValue = new BlittableStruct(59, 92);
2740
testEnum = TestEnum.HatesAll;
@@ -30,8 +43,21 @@ protected override void Init()
3043
#endregion
3144

3245
[Benchmark] public void Enums() => SerializeAndDeserialize(testEnum);
46+
[Benchmark] public void Filtered_Enums() => SerializeAndFilteredDeserialize(testEnum);
3347
[Benchmark] public void Standard_Value_Types() => SerializeAndDeserialize(standardValue);
48+
[Benchmark] public void Filtered_Standard_Value_Types() => SerializeAndFilteredDeserialize(standardValue);
3449
[Benchmark] public void Blittable_Value_Types() => SerializeAndDeserialize(blittableValue);
50+
[Benchmark] public void Filtered_Blittable_Value_Types() => SerializeAndFilteredDeserialize(blittableValue);
51+
52+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
53+
private void SerializeAndFilteredDeserialize<T>(T elem)
54+
{
55+
Serializer.Serialize(elem, Stream);
56+
Stream.Position = 0;
57+
58+
_filteredSerializer.Deserialize<T>(Stream);
59+
Stream.Position = 0;
60+
}
3561
}
3662

3763
#region test data types

0 commit comments

Comments
 (0)