Skip to content

Commit 5c19940

Browse files
committed
Avoid some allocations when pooling
1 parent b03e832 commit 5c19940

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

bitread/bitread.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const (
1818
// BitReader wraps github.com/markus-wa/gobitread.BitReader and provides additional functionality specific to CS:GO demos.
1919
type BitReader struct {
2020
bitread.BitReader
21-
buffer []byte
21+
buffer *[]byte
2222
}
2323

2424
// ReadString reads a variable length string.
@@ -86,32 +86,35 @@ var bitReaderPool sync.Pool = sync.Pool{
8686
// Pooling BitReaders improves performance by minimizing the amount newly allocated readers.
8787
func (r *BitReader) Pool() {
8888
r.Close()
89-
if len(r.buffer) == smallBuffer {
89+
if len(*r.buffer) == smallBuffer {
9090
smallBufferPool.Put(r.buffer)
9191
}
9292
r.buffer = nil
93+
9394
bitReaderPool.Put(r)
9495
}
9596

96-
func newBitReader(underlying io.Reader, buffer []byte) *BitReader {
97+
func newBitReader(underlying io.Reader, buffer *[]byte) *BitReader {
9798
br := bitReaderPool.Get().(*BitReader)
9899
br.buffer = buffer
99-
br.OpenWithBuffer(underlying, buffer)
100+
br.OpenWithBuffer(underlying, *buffer)
100101
return br
101102
}
102103

103104
var smallBufferPool sync.Pool = sync.Pool{
104105
New: func() interface{} {
105-
return make([]byte, smallBuffer)
106+
b := make([]byte, smallBuffer)
107+
return &b
106108
},
107109
}
108110

109111
// NewSmallBitReader returns a BitReader with a small buffer, suitable for short streams.
110112
func NewSmallBitReader(underlying io.Reader) *BitReader {
111-
return newBitReader(underlying, smallBufferPool.Get().([]byte))
113+
return newBitReader(underlying, smallBufferPool.Get().(*[]byte))
112114
}
113115

114116
// NewLargeBitReader returns a BitReader with a large buffer, suitable for long streams (main demo file).
115117
func NewLargeBitReader(underlying io.Reader) *BitReader {
116-
return newBitReader(underlying, make([]byte, largeBuffer))
118+
b := make([]byte, largeBuffer)
119+
return newBitReader(underlying, &b)
117120
}

0 commit comments

Comments
 (0)