diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2016-08-14 00:39:44 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2016-08-14 00:41:30 +0900 |
commit | 1d4057c20907b7d263d6f2b8cb4350a024859dfe (patch) | |
tree | adb1edd9c4f1806cd65f8c5117645c22618c7301 /src/terminal.go | |
parent | 822b86942c4ffb0dbf7fd096584d2970675f3ebc (diff) |
[perf] Avoid allocating rune array for ascii string
In the best case (all ascii), this reduces the memory footprint by 60%
and the response time by 15% to 20%. In the worst case (every line has
non-ascii characters), 3 to 4% overhead is observed.
Diffstat (limited to 'src/terminal.go')
-rw-r--r-- | src/terminal.go | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/terminal.go b/src/terminal.go index 213d3b06..ff1120a0 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -564,7 +564,7 @@ func (t *Terminal) printHeader() { trimmed, colors, newState := extractColor(lineStr, state, nil) state = newState item := &Item{ - text: []rune(trimmed), + text: util.RunesToChars([]rune(trimmed)), colors: colors, rank: buildEmptyRank(0)} @@ -663,8 +663,8 @@ func (t *Terminal) printHighlighted(item *Item, bold bool, col1 int, col2 int, c } // Overflow - text := make([]rune, len(item.text)) - copy(text, item.text) + text := make([]rune, item.text.Length()) + copy(text, item.text.ToRunes()) offsets := item.colorOffsets(col2, bold, current) maxWidth := t.window.Width - 3 maxe = util.Constrain(maxe+util.Min(maxWidth/2-2, t.hscrollOff), 0, len(text)) |