github.com/Finschia/finschia-sdk@v0.48.1/codec/unknownproto/benchmarks_test.go (about) 1 package unknownproto_test 2 3 import ( 4 "sync" 5 "testing" 6 7 "github.com/gogo/protobuf/proto" 8 9 "github.com/Finschia/finschia-sdk/codec/unknownproto" 10 "github.com/Finschia/finschia-sdk/testutil/testdata" 11 ) 12 13 var n1BBlob []byte 14 15 func init() { 16 n1B := &testdata.Nested1B{ 17 Id: 1, 18 Age: 99, 19 Nested: &testdata.Nested2B{ 20 Id: 2, 21 Route: "Wintery route", 22 Fee: 99, 23 Nested: &testdata.Nested3B{ 24 Id: 3, 25 Name: "3A this one that one there those oens", 26 Age: 4588, 27 B4: []*testdata.Nested4B{ 28 { 29 Id: 4, 30 Age: 88, 31 Name: "Nested4B", 32 }, 33 }, 34 }, 35 }, 36 } 37 38 var err error 39 n1BBlob, err = proto.Marshal(n1B) 40 if err != nil { 41 panic(err) 42 } 43 } 44 45 func BenchmarkRejectUnknownFields_serial(b *testing.B) { 46 benchmarkRejectUnknownFields(b, false) 47 } 48 49 func BenchmarkRejectUnknownFields_parallel(b *testing.B) { 50 benchmarkRejectUnknownFields(b, true) 51 } 52 53 func benchmarkRejectUnknownFields(b *testing.B, parallel bool) { 54 b.ReportAllocs() 55 56 if !parallel { 57 b.ResetTimer() 58 for i := 0; i < b.N; i++ { 59 n1A := new(testdata.Nested1A) 60 if err := unknownproto.RejectUnknownFieldsStrict(n1BBlob, n1A, unknownproto.DefaultAnyResolver{}); err == nil { 61 b.Fatal("expected an error") 62 } 63 b.SetBytes(int64(len(n1BBlob))) 64 } 65 } else { 66 var mu sync.Mutex 67 b.ResetTimer() 68 b.RunParallel(func(pb *testing.PB) { 69 for pb.Next() { 70 // To simulate the conditions of multiple transactions being processed in parallel. 71 n1A := new(testdata.Nested1A) 72 if err := unknownproto.RejectUnknownFieldsStrict(n1BBlob, n1A, unknownproto.DefaultAnyResolver{}); err == nil { 73 b.Fatal("expected an error") 74 } 75 mu.Lock() 76 b.SetBytes(int64(len(n1BBlob))) 77 mu.Unlock() 78 } 79 }) 80 } 81 } 82 83 func BenchmarkProtoUnmarshal_serial(b *testing.B) { 84 benchmarkProtoUnmarshal(b, false) 85 } 86 87 func BenchmarkProtoUnmarshal_parallel(b *testing.B) { 88 benchmarkProtoUnmarshal(b, true) 89 } 90 91 func benchmarkProtoUnmarshal(b *testing.B, parallel bool) { 92 b.ReportAllocs() 93 94 if !parallel { 95 for i := 0; i < b.N; i++ { 96 n1A := new(testdata.Nested1A) 97 if err := proto.Unmarshal(n1BBlob, n1A); err == nil { 98 b.Fatal("expected an error") 99 } 100 b.SetBytes(int64(len(n1BBlob))) 101 } 102 } else { 103 var mu sync.Mutex 104 b.RunParallel(func(pb *testing.PB) { 105 for pb.Next() { 106 n1A := new(testdata.Nested1A) 107 if err := proto.Unmarshal(n1BBlob, n1A); err == nil { 108 b.Fatal("expected an error") 109 } 110 mu.Lock() 111 b.SetBytes(int64(len(n1BBlob))) 112 mu.Unlock() 113 } 114 }) 115 } 116 }