1package html
2
3import (
4 "fmt"
5 "testing"
6
7 "github.com/bnema/vev-vt/core"
8)
9
10func BenchmarkRenderer(b *testing.B) {
11 for _, size := range []struct{ width, height int }{{80, 24}, {120, 40}, {240, 80}} {
12 frame := core.NewFrame(size.width, size.height)
13 for y := range size.height {
14 for x := range size.width {
15 frame.Set(x, y, core.Cell{Rune: rune('A' + (x+y)%26), Style: core.DefaultStyle()})
16 }
17 }
18 b.Run(fmt.Sprintf("snapshot-%dx%d", size.width, size.height), func(b *testing.B) {
19 b.ReportAllocs()
20 for range b.N {
21 renderer, err := New(Options{})
22 if err != nil {
23 b.Fatal(err)
24 }
25 prepared, err := renderer.Prepare(frame, nil, true, Cursor{})
26 if err != nil {
27 b.Fatal(err)
28 }
29 if err := prepared.Commit(); err != nil {
30 b.Fatal(err)
31 }
32 }
33 })
34 b.Run(fmt.Sprintf("one-row-%dx%d", size.width, size.height), func(b *testing.B) {
35 renderer, err := New(Options{})
36 if err != nil {
37 b.Fatal(err)
38 }
39 first, err := renderer.Prepare(frame, nil, false, Cursor{})
40 if err != nil {
41 b.Fatal(err)
42 }
43 if err := first.Commit(); err != nil {
44 b.Fatal(err)
45 }
46 left := frame.Clone()
47 right := frame.Clone()
48 right.Set(0, size.height/2, core.Cell{Rune: 'Z', Style: core.DefaultStyle()})
49 b.ReportAllocs()
50 b.ResetTimer()
51 for index := range b.N {
52 candidate := left
53 if index%2 == 0 {
54 candidate = right
55 }
56 prepared, err := renderer.Prepare(candidate, nil, false, Cursor{})
57 if err != nil {
58 b.Fatal(err)
59 }
60 if err := prepared.Commit(); err != nil {
61 b.Fatal(err)
62 }
63 }
64 })
65 }
66}