package html import ( "fmt" "testing" "github.com/bnema/vev-vt/core" ) func BenchmarkRenderer(b *testing.B) { for _, size := range []struct{ width, height int }{{80, 24}, {120, 40}, {240, 80}} { frame := core.NewFrame(size.width, size.height) for y := range size.height { for x := range size.width { frame.Set(x, y, core.Cell{Rune: rune('A' + (x+y)%26), Style: core.DefaultStyle()}) } } b.Run(fmt.Sprintf("snapshot-%dx%d", size.width, size.height), func(b *testing.B) { b.ReportAllocs() for range b.N { renderer, err := New(Options{}) if err != nil { b.Fatal(err) } prepared, err := renderer.Prepare(frame, nil, true, Cursor{}) if err != nil { b.Fatal(err) } if err := prepared.Commit(); err != nil { b.Fatal(err) } } }) b.Run(fmt.Sprintf("one-row-%dx%d", size.width, size.height), func(b *testing.B) { renderer, err := New(Options{}) if err != nil { b.Fatal(err) } first, err := renderer.Prepare(frame, nil, false, Cursor{}) if err != nil { b.Fatal(err) } if err := first.Commit(); err != nil { b.Fatal(err) } left := frame.Clone() right := frame.Clone() right.Set(0, size.height/2, core.Cell{Rune: 'Z', Style: core.DefaultStyle()}) b.ReportAllocs() b.ResetTimer() for index := range b.N { candidate := left if index%2 == 0 { candidate = right } prepared, err := renderer.Prepare(candidate, nil, false, Cursor{}) if err != nil { b.Fatal(err) } if err := prepared.Commit(); err != nil { b.Fatal(err) } } }) } }