Browse Source

benchmark pipe

Darien Raymond 7 years ago
parent
commit
b41513f644
2 changed files with 22 additions and 1 deletions
  1. 6 1
      transport/pipe/impl.go
  2. 16 0
      transport/pipe/pipe_test.go

+ 6 - 1
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
 }
 

+ 16 - 0
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
+	}
+}