github.com/Finschia/finschia-sdk@v0.48.1/x/bank/bench_test.go (about) 1 package bank_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 abci "github.com/tendermint/tendermint/abci/types" 8 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 9 10 ocabci "github.com/Finschia/ostracon/abci/types" 11 12 "github.com/Finschia/finschia-sdk/simapp" 13 simappparams "github.com/Finschia/finschia-sdk/simapp/params" 14 sdk "github.com/Finschia/finschia-sdk/types" 15 "github.com/Finschia/finschia-sdk/x/auth/types" 16 authtypes "github.com/Finschia/finschia-sdk/x/auth/types" 17 stakingtypes "github.com/Finschia/finschia-sdk/x/staking/types" 18 ) 19 20 var moduleAccAddr = authtypes.NewModuleAddress(stakingtypes.BondedPoolName) 21 22 func BenchmarkOneBankSendTxPerBlock(b *testing.B) { 23 b.ReportAllocs() 24 // Add an account at genesis 25 acc := authtypes.BaseAccount{ 26 Address: addr1.String(), 27 } 28 29 // construct genesis state 30 genAccs := []types.GenesisAccount{&acc} 31 benchmarkApp := simapp.SetupWithGenesisAccounts(genAccs) 32 ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{}) 33 34 // some value conceivably higher than the benchmarks would ever go 35 require.NoError(b, simapp.FundAccount(benchmarkApp, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000)))) 36 37 benchmarkApp.Commit() 38 txGen := simappparams.MakeTestEncodingConfig().TxConfig 39 40 // Precompute all txs 41 txs, err := simapp.GenSequenceOfTxs(txGen, []sdk.Msg{sendMsg1}, []uint64{0}, []uint64{uint64(0)}, b.N, priv1) 42 require.NoError(b, err) 43 b.ResetTimer() 44 45 height := int64(3) 46 47 // Run this with a profiler, so its easy to distinguish what time comes from 48 // Committing, and what time comes from Check/Deliver Tx. 49 for i := 0; i < b.N; i++ { 50 benchmarkApp.BeginBlock(ocabci.RequestBeginBlock{Header: tmproto.Header{Height: height}}) 51 _, err := benchmarkApp.Check(txGen.TxEncoder(), txs[i]) 52 if err != nil { 53 panic("something is broken in checking transaction") 54 } 55 56 _, _, err = benchmarkApp.Deliver(txGen.TxEncoder(), txs[i]) 57 require.NoError(b, err) 58 benchmarkApp.EndBlock(abci.RequestEndBlock{Height: height}) 59 benchmarkApp.Commit() 60 height++ 61 } 62 } 63 64 func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) { 65 b.ReportAllocs() 66 // Add an account at genesis 67 acc := authtypes.BaseAccount{ 68 Address: addr1.String(), 69 } 70 71 // Construct genesis state 72 genAccs := []authtypes.GenesisAccount{&acc} 73 benchmarkApp := simapp.SetupWithGenesisAccounts(genAccs) 74 ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{}) 75 76 // some value conceivably higher than the benchmarks would ever go 77 require.NoError(b, simapp.FundAccount(benchmarkApp, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000)))) 78 79 benchmarkApp.Commit() 80 txGen := simappparams.MakeTestEncodingConfig().TxConfig 81 82 // Precompute all txs 83 txs, err := simapp.GenSequenceOfTxs(txGen, []sdk.Msg{multiSendMsg1}, []uint64{0}, []uint64{uint64(0)}, b.N, priv1) 84 require.NoError(b, err) 85 b.ResetTimer() 86 87 height := int64(3) 88 89 // Run this with a profiler, so its easy to distinguish what time comes from 90 // Committing, and what time comes from Check/Deliver Tx. 91 for i := 0; i < b.N; i++ { 92 benchmarkApp.BeginBlock(ocabci.RequestBeginBlock{Header: tmproto.Header{Height: height}}) 93 _, err := benchmarkApp.Check(txGen.TxEncoder(), txs[i]) 94 if err != nil { 95 panic("something is broken in checking transaction") 96 } 97 98 _, _, err = benchmarkApp.Deliver(txGen.TxEncoder(), txs[i]) 99 require.NoError(b, err) 100 benchmarkApp.EndBlock(abci.RequestEndBlock{Height: height}) 101 benchmarkApp.Commit() 102 height++ 103 } 104 }