-
-
Notifications
You must be signed in to change notification settings - Fork 360
Expand file tree
/
Copy pathcell_bench_test.go
More file actions
69 lines (62 loc) · 2.09 KB
/
Copy pathcell_bench_test.go
File metadata and controls
69 lines (62 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright 2026 The TCell Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tcell
import (
"testing"
)
func BenchmarkCellBufferPutCurrent(b *testing.B) {
benchCellBufferPut(b, "current", false, func(cb *CellBuffer, x, y int, str string, style Style) (string, int) {
return cb.Put(x, y, str, style)
})
}
func BenchmarkCellBufferPutSanitizedCurrent(b *testing.B) {
benchCellBufferPut(b, "sanitized", true, func(cb *CellBuffer, x, y int, str string, style Style) (string, int) {
return cb.Put(x, y, str, style)
})
}
func benchCellBufferPut(b *testing.B, name string, sanitize bool, put func(*CellBuffer, int, int, string, Style) (string, int)) {
cases := []struct {
name string
str string
}{
{name: "ascii", str: "Hello, terminal"},
{name: "combining", str: "e\u0301"},
{name: "wide", str: "宽"},
{name: "emoji", str: "👩🚀"},
}
for _, tc := range cases {
b.Run(name+"/"+tc.name, func(b *testing.B) {
cb := &CellBuffer{w: 8, h: 1, cells: make([]cell, 8), sanitizeContent: sanitize}
style := Style{}
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
cb.cells[0] = cell{}
_, _ = put(cb, 0, 0, tc.str, style)
}
})
}
}
// BenchmarkCellBufferPutRedraw measures re-Putting identical content into a
// cell, as a full-screen redraw does for the bulk of the screen.
func BenchmarkCellBufferPutRedraw(b *testing.B) {
cb := &CellBuffer{w: 8, h: 1, cells: make([]cell, 8)}
style := Style{}
cb.Put(0, 0, "x", style) // prime: measure the cell once
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, _ = cb.Put(0, 0, "x", style)
}
}