Properly implement buffer pool
It wasn't reusing buffers, idiot idiot idiot...
This commit is contained in:
@@ -16,8 +16,8 @@ func TestRetrieveBufferOfRequestedSize(t *testing.T) {
|
||||
t.Fatalf("Expected buffer, got nil")
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,8 +31,8 @@ func TestRequestBufferSizeZero(t *testing.T) {
|
||||
t.Fatalf("Expected buffer, got nil")
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,8 +51,8 @@ func TestConcurrentAccessToBufferPool(t *testing.T) {
|
||||
if buffer == nil {
|
||||
t.Errorf("Expected buffer, got nil")
|
||||
}
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}()
|
||||
}
|
||||
@@ -70,8 +70,8 @@ func TestGetBufferLockUnlock(t *testing.T) {
|
||||
t.Fatalf("Expected buffer, got nil")
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,8 +85,8 @@ func TestVerifyPoolCreationForNewSizes(t *testing.T) {
|
||||
t.Fatalf("Expected buffer, got nil")
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,8 +100,8 @@ func TestBufferPoolManagerGetBuffer(t *testing.T) {
|
||||
t.Fatalf("Expected buffer, got nil")
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,8 +116,8 @@ func TestGetBufferWithMultipleSizes(t *testing.T) {
|
||||
t.Fatalf("Expected buffer for size %d, got nil", size)
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -133,8 +133,8 @@ func TestGetBufferIsAlwaysZero(t *testing.T) {
|
||||
t.Fatalf("Expected buffer for size %d, got nil", size)
|
||||
}
|
||||
|
||||
if buffer.Len() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Len())
|
||||
if buffer.Cap() != size {
|
||||
t.Errorf("Expected buffer size %d, got %d", size, buffer.Cap())
|
||||
}
|
||||
|
||||
for _, b := range buffer.Bytes() {
|
||||
@@ -147,6 +147,23 @@ func TestGetBufferIsAlwaysZero(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPoolReusesBuffers(t *testing.T) {
|
||||
bpm := NewBufferPoolManager()
|
||||
|
||||
size := 1024
|
||||
buffer := bpm.Get(size)
|
||||
initialPtr := buffer
|
||||
bpm.Put(buffer)
|
||||
for i := 0; i < 1000; i++ {
|
||||
buffer = bpm.Get(size)
|
||||
if buffer != initialPtr {
|
||||
t.Errorf("Expected initial buffer (%p) to be reused, got %p", initialPtr, buffer)
|
||||
}
|
||||
bpm.Put(buffer)
|
||||
}
|
||||
}
|
||||
|
||||
// region benchmark
|
||||
func BenchmarkBufferPoolManager(b *testing.B) {
|
||||
bpm := NewBufferPoolManager()
|
||||
bufSize := 128 * 1024 // a PDU should not be larger than this... Even this is way too large
|
||||
@@ -195,7 +212,7 @@ func BenchmarkBufferPoolManager_Memory(b *testing.B) {
|
||||
|
||||
// Simulate some work
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
for _ = range buf.Bytes() {
|
||||
for range buf.Bytes() {
|
||||
buf.WriteByte(i % 255)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user