github.com/cosmos/cosmos-sdk@v0.50.10/codec/bench_test.go (about) 1 package codec_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 protov2 "google.golang.org/protobuf/proto" 8 "google.golang.org/protobuf/types/dynamicpb" 9 10 bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" 11 12 codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" 13 codectypes "github.com/cosmos/cosmos-sdk/codec/types" 14 "github.com/cosmos/cosmos-sdk/testutil/testdata" 15 sdk "github.com/cosmos/cosmos-sdk/types" 16 banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" 17 ) 18 19 type bankSendWrapper struct { 20 *banktypes.MsgSend 21 } 22 23 func (msg bankSendWrapper) GetSigners() []sdk.AccAddress { 24 fromAddress, _ := sdk.AccAddressFromBech32(msg.FromAddress) 25 return []sdk.AccAddress{fromAddress} 26 } 27 28 func BenchmarkLegacyGetSigners(b *testing.B) { 29 _, _, addr := testdata.KeyTestPubAddr() 30 msg := bankSendWrapper{&banktypes.MsgSend{ 31 FromAddress: addr.String(), 32 ToAddress: "", 33 Amount: nil, 34 }} 35 36 b.ResetTimer() 37 for i := 0; i < b.N; i++ { 38 _ = msg.GetSigners() 39 } 40 } 41 42 func BenchmarkProtoreflectGetSigners(b *testing.B) { 43 cdc := codectestutil.CodecOptions{}.NewCodec() 44 signingCtx := cdc.InterfaceRegistry().SigningContext() 45 _, _, addr := testdata.KeyTestPubAddr() 46 // use a pulsar message 47 msg := &bankv1beta1.MsgSend{ 48 FromAddress: addr.String(), 49 ToAddress: "", 50 Amount: nil, 51 } 52 53 b.ResetTimer() 54 for i := 0; i < b.N; i++ { 55 _, err := signingCtx.GetSigners(msg) 56 if err != nil { 57 panic(err) 58 } 59 } 60 } 61 62 func BenchmarkProtoreflectGetSignersWithUnmarshal(b *testing.B) { 63 cdc := codectestutil.CodecOptions{}.NewCodec() 64 _, _, addr := testdata.KeyTestPubAddr() 65 // start with a protoreflect message 66 msg := &banktypes.MsgSend{ 67 FromAddress: addr.String(), 68 ToAddress: "", 69 Amount: nil, 70 } 71 // marshal to an any first because this is what we get from the wire 72 a, err := codectypes.NewAnyWithValue(msg) 73 require.NoError(b, err) 74 75 b.ResetTimer() 76 for i := 0; i < b.N; i++ { 77 _, _, err := cdc.GetMsgAnySigners(a) 78 if err != nil { 79 panic(err) 80 } 81 } 82 } 83 84 func BenchmarkProtoreflectGetSignersDynamicpb(b *testing.B) { 85 cdc := codectestutil.CodecOptions{}.NewCodec() 86 signingCtx := cdc.InterfaceRegistry().SigningContext() 87 _, _, addr := testdata.KeyTestPubAddr() 88 msg := &bankv1beta1.MsgSend{ 89 FromAddress: addr.String(), 90 ToAddress: "", 91 Amount: nil, 92 } 93 bz, err := protov2.Marshal(msg) 94 require.NoError(b, err) 95 96 dynamicmsg := dynamicpb.NewMessage(msg.ProtoReflect().Descriptor()) 97 err = protov2.Unmarshal(bz, dynamicmsg) 98 require.NoError(b, err) 99 100 b.ResetTimer() 101 for i := 0; i < b.N; i++ { 102 _, err := signingCtx.GetSigners(dynamicmsg) 103 if err != nil { 104 panic(err) 105 } 106 } 107 }