From 2321895fe2a2def7b511453329f4cd8662230256 Mon Sep 17 00:00:00 2001 From: Martin Möhrmann Date: Wed, 7 Sep 2016 08:59:00 +0200 Subject: bytes: improve WriteRune performance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the runeBytes buffer and write the utf8 encoding directly to the internal buf byte slice. name old time/op new time/op delta WriteRune-4 80.5µs ± 2% 57.1µs ± 2% -29.06% (p=0.000 n=20+20) name old speed new speed delta WriteRune-4 153MB/s ± 2% 215MB/s ± 2% +40.96% (p=0.000 n=20+20) Change-Id: Ic15f6e2d6e56a3d15c74f56159e2eae020ba73ba Reviewed-on: https://go-review.googlesource.com/28816 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/bytes/buffer_test.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/bytes/buffer_test.go') diff --git a/src/bytes/buffer_test.go b/src/bytes/buffer_test.go index 7de17ae47e..b1b85f979a 100644 --- a/src/bytes/buffer_test.go +++ b/src/bytes/buffer_test.go @@ -514,6 +514,19 @@ func TestBufferGrowth(t *testing.T) { } } +func BenchmarkWriteRune(b *testing.B) { + const n = 4 << 10 + const r = '☺' + b.SetBytes(int64(n * utf8.RuneLen(r))) + buf := NewBuffer(make([]byte, n*utf8.UTFMax)) + for i := 0; i < b.N; i++ { + buf.Reset() + for i := 0; i < n; i++ { + buf.WriteRune(r) + } + } +} + // From Issue 5154. func BenchmarkBufferNotEmptyWriteRead(b *testing.B) { buf := make([]byte, 1024) -- cgit v1.3