Skip to content

Commit 8e211fa

Browse files
iahsfacebook-github-bot
authored andcommitted
Add sparse struct to ProtocolBench
Summary: All of the test data is dense, but production data tends to be sparse. Make sure we capture this in benchmarks. Reviewed By: thedavekwon Differential Revision: D83204608 fbshipit-source-id: 51c45ad557c497aa3ef65697201df952cf6ec82e
1 parent 2083ec4 commit 8e211fa

File tree

3 files changed

+241
-3
lines changed

3 files changed

+241
-3
lines changed

thrift/lib/cpp2/test/ProtocolBench.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ constexpr SerializerMethod getSerializerMethod(std::string_view prefix) {
154154
X1(Prefix, proto, write, bench, Op) \
155155
X1(Prefix, proto, read, bench, Op)
156156

157-
#define APPLY(M, Prefix, proto) \
157+
#define APPLY(M, Prefix, proto) \
158158
M(Prefix, proto, Empty) \
159159
M(Prefix, proto, SmallInt) \
160160
M(Prefix, proto, BigInt) \
@@ -165,6 +165,7 @@ constexpr SerializerMethod getSerializerMethod(std::string_view prefix) {
165165
M(Prefix, proto, Mixed) \
166166
M(Prefix, proto, MixedInt) \
167167
M(Prefix, proto, LargeMixed) \
168+
M(Prefix, proto, LargeMixedSparse) \
168169
M(Prefix, proto, SmallListInt) \
169170
M(Prefix, proto, BigListByte) \
170171
M(Prefix, proto, BigListShort) \
@@ -185,7 +186,7 @@ constexpr SerializerMethod getSerializerMethod(std::string_view prefix) {
185186
M(Prefix, proto, UnorderedMapInt) \
186187
M(Prefix, proto, NestedMap) \
187188
M(Prefix, proto, SortedVecNestedMap) \
188-
M(Prefix, proto, ComplexStruct)\
189+
M(Prefix, proto, ComplexStruct) \
189190
M(Prefix, proto, ComplexUnion)
190191

191192
#define X(Prefix, proto) APPLY(X2, Prefix, proto)

thrift/lib/cpp2/test/ProtocolBenchData.thrift

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,109 @@ struct LargeMixed {
298298
100: string var100;
299299
}
300300

301+
struct LargeMixedSparse {
302+
1: optional i32 var1;
303+
2: optional i64 var2;
304+
3: optional bool var3;
305+
4: optional string var4;
306+
5: optional i32 var5;
307+
6: optional i64 var6;
308+
7: optional bool var7;
309+
8: optional string var8;
310+
9: optional i32 var9;
311+
10: optional i64 var10;
312+
11: optional bool var11;
313+
12: optional string var12;
314+
13: optional i32 var13;
315+
14: optional i64 var14;
316+
15: optional bool var15;
317+
16: optional string var16;
318+
17: optional i32 var17;
319+
18: optional i64 var18;
320+
19: optional bool var19;
321+
20: optional string var20;
322+
21: optional i32 var21;
323+
22: optional i64 var22;
324+
23: optional bool var23;
325+
24: optional string var24;
326+
25: optional i32 var25;
327+
26: optional i64 var26;
328+
27: optional bool var27;
329+
28: optional string var28;
330+
29: optional i32 var29;
331+
30: optional i64 var30;
332+
31: optional bool var31;
333+
32: optional string var32;
334+
33: optional i32 var33;
335+
34: optional i64 var34;
336+
35: optional bool var35;
337+
36: optional string var36;
338+
37: optional i32 var37;
339+
38: optional i64 var38;
340+
39: optional bool var39;
341+
40: optional string var40;
342+
41: optional i32 var41;
343+
42: optional i64 var42;
344+
43: optional bool var43;
345+
44: optional string var44;
346+
45: optional i32 var45;
347+
46: optional i64 var46;
348+
47: optional bool var47;
349+
48: optional string var48;
350+
49: optional i32 var49;
351+
50: optional i64 var50;
352+
51: optional bool var51;
353+
52: optional string var52;
354+
53: optional i32 var53;
355+
54: optional i64 var54;
356+
55: optional bool var55;
357+
56: optional string var56;
358+
57: optional i32 var57;
359+
58: optional i64 var58;
360+
59: optional bool var59;
361+
60: optional string var60;
362+
61: optional i32 var61;
363+
62: optional i64 var62;
364+
63: optional bool var63;
365+
64: optional string var64;
366+
65: optional i32 var65;
367+
66: optional i64 var66;
368+
67: optional bool var67;
369+
68: optional string var68;
370+
69: optional i32 var69;
371+
70: optional i64 var70;
372+
71: optional bool var71;
373+
72: optional string var72;
374+
73: optional i32 var73;
375+
74: optional i64 var74;
376+
75: optional bool var75;
377+
76: optional string var76;
378+
77: optional i32 var77;
379+
78: optional i64 var78;
380+
79: optional bool var79;
381+
80: optional string var80;
382+
81: optional i32 var81;
383+
82: optional i64 var82;
384+
83: optional bool var83;
385+
84: optional string var84;
386+
85: optional i32 var85;
387+
86: optional i64 var86;
388+
87: optional bool var87;
389+
88: optional string var88;
390+
89: optional i32 var89;
391+
90: optional i64 var90;
392+
91: optional bool var91;
393+
92: optional string var92;
394+
93: optional i32 var93;
395+
94: optional i64 var94;
396+
95: optional bool var95;
397+
96: optional string var96;
398+
97: optional i32 var97;
399+
98: optional i64 var98;
400+
99: optional bool var99;
401+
100: optional string var100;
402+
}
403+
301404
struct MixedInt {
302405
1: i32 var1;
303406
2: i32 var2;
@@ -647,6 +750,110 @@ struct OpLargeMixed {
647750
100: string var100;
648751
}
649752

753+
@cpp.UseOpEncode
754+
struct OpLargeMixedSparse {
755+
1: optional i32 var1;
756+
2: optional i64 var2;
757+
3: optional bool var3;
758+
4: optional string var4;
759+
5: optional i32 var5;
760+
6: optional i64 var6;
761+
7: optional bool var7;
762+
8: optional string var8;
763+
9: optional i32 var9;
764+
10: optional i64 var10;
765+
11: optional bool var11;
766+
12: optional string var12;
767+
13: optional i32 var13;
768+
14: optional i64 var14;
769+
15: optional bool var15;
770+
16: optional string var16;
771+
17: optional i32 var17;
772+
18: optional i64 var18;
773+
19: optional bool var19;
774+
20: optional string var20;
775+
21: optional i32 var21;
776+
22: optional i64 var22;
777+
23: optional bool var23;
778+
24: optional string var24;
779+
25: optional i32 var25;
780+
26: optional i64 var26;
781+
27: optional bool var27;
782+
28: optional string var28;
783+
29: optional i32 var29;
784+
30: optional i64 var30;
785+
31: optional bool var31;
786+
32: optional string var32;
787+
33: optional i32 var33;
788+
34: optional i64 var34;
789+
35: optional bool var35;
790+
36: optional string var36;
791+
37: optional i32 var37;
792+
38: optional i64 var38;
793+
39: optional bool var39;
794+
40: optional string var40;
795+
41: optional i32 var41;
796+
42: optional i64 var42;
797+
43: optional bool var43;
798+
44: optional string var44;
799+
45: optional i32 var45;
800+
46: optional i64 var46;
801+
47: optional bool var47;
802+
48: optional string var48;
803+
49: optional i32 var49;
804+
50: optional i64 var50;
805+
51: optional bool var51;
806+
52: optional string var52;
807+
53: optional i32 var53;
808+
54: optional i64 var54;
809+
55: optional bool var55;
810+
56: optional string var56;
811+
57: optional i32 var57;
812+
58: optional i64 var58;
813+
59: optional bool var59;
814+
60: optional string var60;
815+
61: optional i32 var61;
816+
62: optional i64 var62;
817+
63: optional bool var63;
818+
64: optional string var64;
819+
65: optional i32 var65;
820+
66: optional i64 var66;
821+
67: optional bool var67;
822+
68: optional string var68;
823+
69: optional i32 var69;
824+
70: optional i64 var70;
825+
71: optional bool var71;
826+
72: optional string var72;
827+
73: optional i32 var73;
828+
74: optional i64 var74;
829+
75: optional bool var75;
830+
76: optional string var76;
831+
77: optional i32 var77;
832+
78: optional i64 var78;
833+
79: optional bool var79;
834+
80: optional string var80;
835+
81: optional i32 var81;
836+
82: optional i64 var82;
837+
83: optional bool var83;
838+
84: optional string var84;
839+
85: optional i32 var85;
840+
86: optional i64 var86;
841+
87: optional bool var87;
842+
88: optional string var88;
843+
89: optional i32 var89;
844+
90: optional i64 var90;
845+
91: optional bool var91;
846+
92: optional string var92;
847+
93: optional i32 var93;
848+
94: optional i64 var94;
849+
95: optional bool var95;
850+
96: optional string var96;
851+
97: optional i32 var97;
852+
98: optional i64 var98;
853+
99: optional bool var99;
854+
100: optional string var100;
855+
}
856+
650857
@cpp.UseOpEncode
651858
struct OpMixedInt {
652859
1: i32 var1;

thrift/lib/cpp2/test/ThriftStructs-inl.h

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,10 +590,40 @@ inline thrift::benchmark::LargeMixed create<thrift::benchmark::LargeMixed>() {
590590
template <>
591591
inline thrift::benchmark::OpLargeMixed
592592
create<thrift::benchmark::OpLargeMixed>() {
593-
thrift::benchmark::OpLargeMixed d;
594593
return createLargeMixed<thrift::benchmark::OpLargeMixed>();
595594
}
596595

596+
template <class T>
597+
inline T createLargeMixedSparse() {
598+
T d;
599+
600+
// Set exactly 10% of the 100 fields (10 fields) with a good distribution
601+
d.var3() = true;
602+
d.var11() = "hello";
603+
d.var23() = true;
604+
d.var31() = true;
605+
d.var42() = 12345;
606+
d.var57() = 5;
607+
d.var68() = "hello";
608+
d.var74() = 12345;
609+
d.var89() = 5;
610+
d.var95() = true;
611+
612+
return d;
613+
}
614+
615+
template <>
616+
inline thrift::benchmark::LargeMixedSparse
617+
create<thrift::benchmark::LargeMixedSparse>() {
618+
return createLargeMixedSparse<thrift::benchmark::LargeMixedSparse>();
619+
}
620+
621+
template <>
622+
inline thrift::benchmark::OpLargeMixedSparse
623+
create<thrift::benchmark::OpLargeMixedSparse>() {
624+
return createLargeMixedSparse<thrift::benchmark::OpLargeMixedSparse>();
625+
}
626+
597627
template <class T>
598628
inline T createMixedInt() {
599629
std::mt19937 rng;

0 commit comments

Comments
 (0)