From b41513f64457464ce0e89faece22074768765c58 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Sat, 17 Nov 2018 19:47:30 +0100 Subject: [PATCH] benchmark pipe --- transport/pipe/impl.go | 7 ++++++- transport/pipe/pipe_test.go | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/transport/pipe/impl.go b/transport/pipe/impl.go index 3f15f900d..a2df2787d 100644 --- a/transport/pipe/impl.go +++ b/transport/pipe/impl.go @@ -120,7 +120,12 @@ func (p *pipe) writeMultiBufferInternal(mb buf.MultiBuffer) error { return err } - p.data, _ = buf.MergeMulti(p.data, mb) + if p.data == nil { + p.data = mb + } else { + p.data, _ = buf.MergeMulti(p.data, mb) + } + return nil } diff --git a/transport/pipe/pipe_test.go b/transport/pipe/pipe_test.go index 5fad05ca0..3a16041d2 100644 --- a/transport/pipe/pipe_test.go +++ b/transport/pipe/pipe_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "v2ray.com/core/common" "v2ray.com/core/common/buf" "v2ray.com/core/common/task" . "v2ray.com/core/transport/pipe" @@ -125,3 +126,18 @@ func TestInterfaces(t *testing.T) { assert((*Reader)(nil), Implements, (*buf.Reader)(nil)) assert((*Reader)(nil), Implements, (*buf.TimeoutReader)(nil)) } + +func BenchmarkPipeReadWrite(b *testing.B) { + reader, writer := New(WithoutSizeLimit()) + a := buf.New() + a.Extend(buf.Size) + c := buf.MultiBuffer{a} + + b.ResetTimer() + for i := 0; i < b.N; i++ { + common.Must(writer.WriteMultiBuffer(c)) + d, err := reader.ReadMultiBuffer() + common.Must(err) + c = d + } +}