5
5
#include < bench/bench.h>
6
6
#include < blockfilter.h>
7
7
8
- static void ConstructGCSFilter (benchmark::Bench& bench )
8
+ static const GCSFilter::ElementSet GenerateGCSTestElements ( )
9
9
{
10
10
GCSFilter::ElementSet elements;
11
11
for (int i = 0 ; i < 10000 ; ++i) {
@@ -15,29 +15,56 @@ static void ConstructGCSFilter(benchmark::Bench& bench)
15
15
elements.insert (std::move (element));
16
16
}
17
17
18
+ return elements;
19
+ }
20
+
21
+ static void GCSBlockFilterGetHash (benchmark::Bench& bench)
22
+ {
23
+ auto elements = GenerateGCSTestElements ();
24
+
25
+ GCSFilter filter ({0 , 0 , BASIC_FILTER_P, BASIC_FILTER_M}, elements);
26
+ BlockFilter block_filter (BlockFilterType::BASIC, {}, filter.GetEncoded (), /* skip_decode_check=*/ false );
27
+
28
+ bench.run ([&] {
29
+ block_filter.GetHash ();
30
+ });
31
+ }
32
+
33
+ static void GCSFilterConstruct (benchmark::Bench& bench)
34
+ {
35
+ auto elements = GenerateGCSTestElements ();
36
+
18
37
uint64_t siphash_k0 = 0 ;
19
38
bench.batch (elements.size ()).unit (" elem" ).run ([&] {
20
- GCSFilter filter ({siphash_k0, 0 , 20 , 1 << 20 }, elements);
39
+ GCSFilter filter ({siphash_k0, 0 , BASIC_FILTER_P, BASIC_FILTER_M }, elements);
21
40
22
41
siphash_k0++;
23
42
});
24
43
}
25
44
26
- static void MatchGCSFilter (benchmark::Bench& bench)
45
+ static void GCSFilterDecode (benchmark::Bench& bench)
27
46
{
28
- GCSFilter::ElementSet elements;
29
- for (int i = 0 ; i < 10000 ; ++i) {
30
- GCSFilter::Element element (32 );
31
- element[0 ] = static_cast <unsigned char >(i);
32
- element[1 ] = static_cast <unsigned char >(i >> 8 );
33
- elements.insert (std::move (element));
34
- }
35
- GCSFilter filter ({0 , 0 , 20 , 1 << 20 }, elements);
47
+ auto elements = GenerateGCSTestElements ();
36
48
37
- bench.unit (" elem" ).run ([&] {
38
- filter.Match (GCSFilter::Element ());
49
+ GCSFilter filter ({0 , 0 , BASIC_FILTER_P, BASIC_FILTER_M}, elements);
50
+ auto encoded = filter.GetEncoded ();
51
+
52
+ bench.run ([&] {
53
+ GCSFilter filter ({0 , 0 , BASIC_FILTER_P, BASIC_FILTER_M}, encoded, /* skip_decode_check=*/ false );
39
54
});
40
55
}
41
56
42
- BENCHMARK (ConstructGCSFilter);
43
- BENCHMARK (MatchGCSFilter);
57
+ static void GCSFilterMatch (benchmark::Bench& bench)
58
+ {
59
+ auto elements = GenerateGCSTestElements ();
60
+
61
+ GCSFilter filter ({0 , 0 , BASIC_FILTER_P, BASIC_FILTER_M}, elements);
62
+
63
+ bench.run ([&] {
64
+ filter.Match (GCSFilter::Element ());
65
+ });
66
+ }
67
+ BENCHMARK (GCSBlockFilterGetHash);
68
+ BENCHMARK (GCSFilterConstruct);
69
+ BENCHMARK (GCSFilterDecode);
70
+ BENCHMARK (GCSFilterMatch);
0 commit comments