package benchmarks import ( "testing" "time" "github.com/tendermint/go-amino" "github.com/tendermint/go-crypto" proto "github.com/tendermint/tendermint/benchmarks/proto" "github.com/tendermint/tendermint/p2p" ctypes "github.com/tendermint/tendermint/rpc/core/types" ) func BenchmarkEncodeStatusWire(b *testing.B) { b.StopTimer() cdc := amino.NewCodec() ctypes.RegisterAmino(cdc) nodeKey := p2p.NodeKey{PrivKey: crypto.GenPrivKeyEd25519()} status := &ctypes.ResultStatus{ NodeInfo: p2p.NodeInfo{ ID: nodeKey.ID(), Moniker: "SOMENAME", Network: "SOMENAME", ListenAddr: "SOMEADDR", Version: "SOMEVER", Other: []string{"SOMESTRING", "OTHERSTRING"}, }, SyncInfo: ctypes.SyncInfo{ LatestBlockHash: []byte("SOMEBYTES"), LatestBlockHeight: 123, LatestBlockTime: time.Unix(0, 1234), }, ValidatorInfo: ctypes.ValidatorInfo{ PubKey: nodeKey.PubKey(), }, } b.StartTimer() counter := 0 for i := 0; i < b.N; i++ { jsonBytes, err := cdc.MarshalJSON(status) if err != nil { panic(err) } counter += len(jsonBytes) } } func BenchmarkEncodeNodeInfoWire(b *testing.B) { b.StopTimer() cdc := amino.NewCodec() ctypes.RegisterAmino(cdc) nodeKey := p2p.NodeKey{PrivKey: crypto.GenPrivKeyEd25519()} nodeInfo := p2p.NodeInfo{ ID: nodeKey.ID(), Moniker: "SOMENAME", Network: "SOMENAME", ListenAddr: "SOMEADDR", Version: "SOMEVER", Other: []string{"SOMESTRING", "OTHERSTRING"}, } b.StartTimer() counter := 0 for i := 0; i < b.N; i++ { jsonBytes, err := cdc.MarshalJSON(nodeInfo) if err != nil { panic(err) } counter += len(jsonBytes) } } func BenchmarkEncodeNodeInfoBinary(b *testing.B) { b.StopTimer() cdc := amino.NewCodec() ctypes.RegisterAmino(cdc) nodeKey := p2p.NodeKey{PrivKey: crypto.GenPrivKeyEd25519()} nodeInfo := p2p.NodeInfo{ ID: nodeKey.ID(), Moniker: "SOMENAME", Network: "SOMENAME", ListenAddr: "SOMEADDR", Version: "SOMEVER", Other: []string{"SOMESTRING", "OTHERSTRING"}, } b.StartTimer() counter := 0 for i := 0; i < b.N; i++ { jsonBytes := cdc.MustMarshalBinaryBare(nodeInfo) counter += len(jsonBytes) } } func BenchmarkEncodeNodeInfoProto(b *testing.B) { b.StopTimer() nodeKey := p2p.NodeKey{PrivKey: crypto.GenPrivKeyEd25519()} nodeID := string(nodeKey.ID()) someName := "SOMENAME" someAddr := "SOMEADDR" someVer := "SOMEVER" someString := "SOMESTRING" otherString := "OTHERSTRING" nodeInfo := proto.NodeInfo{ Id: &proto.ID{Id: &nodeID}, Moniker: &someName, Network: &someName, ListenAddr: &someAddr, Version: &someVer, Other: []string{someString, otherString}, } b.StartTimer() counter := 0 for i := 0; i < b.N; i++ { bytes, err := nodeInfo.Marshal() if err != nil { b.Fatal(err) return } //jsonBytes := wire.JSONBytes(nodeInfo) counter += len(bytes) } }