mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-06 15:08:39 +00:00
eth/filters: add limit-aware benchmark variants
This commit is contained in:
parent
571dd8332f
commit
3c1b7bd7ff
1 changed files with 26 additions and 8 deletions
|
|
@ -47,18 +47,30 @@ func makeReceipt(addr common.Address) *types.Receipt {
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkFiltersIndexed(b *testing.B) {
|
func BenchmarkFiltersIndexed(b *testing.B) {
|
||||||
benchmarkFilters(b, 0, false)
|
benchmarkFilters(b, 0, false, 0, 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkFiltersHalfIndexed(b *testing.B) {
|
func BenchmarkFiltersHalfIndexed(b *testing.B) {
|
||||||
benchmarkFilters(b, 50000, false)
|
benchmarkFilters(b, 50000, false, 0, 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkFiltersUnindexed(b *testing.B) {
|
func BenchmarkFiltersUnindexed(b *testing.B) {
|
||||||
benchmarkFilters(b, 0, true)
|
benchmarkFilters(b, 0, true, 0, 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
func benchmarkFilters(b *testing.B, history uint64, noHistory bool) {
|
func BenchmarkFiltersIndexedLimit1(b *testing.B) {
|
||||||
|
benchmarkFilters(b, 0, false, 1, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkFiltersHalfIndexedLimit1(b *testing.B) {
|
||||||
|
benchmarkFilters(b, 50000, false, 1, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkFiltersUnindexedLimit1(b *testing.B) {
|
||||||
|
benchmarkFilters(b, 0, true, 1, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func benchmarkFilters(b *testing.B, history uint64, noHistory bool, limit uint64, expected int) {
|
||||||
var (
|
var (
|
||||||
db = rawdb.NewMemoryDatabase()
|
db = rawdb.NewMemoryDatabase()
|
||||||
backend, sys = newTestFilterSystem(db, Config{})
|
backend, sys = newTestFilterSystem(db, Config{})
|
||||||
|
|
@ -109,12 +121,18 @@ func benchmarkFilters(b *testing.B, history uint64, noHistory bool) {
|
||||||
backend.startFilterMaps(history, noHistory, filtermaps.DefaultParams)
|
backend.startFilterMaps(history, noHistory, filtermaps.DefaultParams)
|
||||||
defer backend.stopFilterMaps()
|
defer backend.stopFilterMaps()
|
||||||
|
|
||||||
filter := sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), []common.Address{addr1, addr2, addr3, addr4}, nil, 0)
|
var filter *Filter
|
||||||
|
if limit > 0 {
|
||||||
|
filter = sys.NewRangeFilterWithLimit(0, int64(rpc.LatestBlockNumber), []common.Address{addr1, addr2, addr3, addr4}, nil, 0, limit)
|
||||||
|
} else {
|
||||||
|
filter = sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), []common.Address{addr1, addr2, addr3, addr4}, nil, 0)
|
||||||
|
}
|
||||||
|
ctx := context.Background()
|
||||||
for b.Loop() {
|
for b.Loop() {
|
||||||
filter.begin = 0
|
filter.begin = 0
|
||||||
logs, _ := filter.Logs(context.Background())
|
logs, _ := filter.Logs(ctx)
|
||||||
if len(logs) != 4 {
|
if len(logs) != expected {
|
||||||
b.Fatal("expected 4 logs, got", len(logs))
|
b.Fatal("expected", expected, "logs, got", len(logs))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue