summaryrefslogtreecommitdiff
path: root/internal/io/pool
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2021-10-15 12:38:39 +0300
committerPaul Buetow <pbuetow@mimecast.com>2021-10-15 12:38:39 +0300
commit55ba72efa4e5d2363f8e0c2cf729c596e760e1c3 (patch)
tree72618e384626d9fc368994e3f24be9e9892d0610 /internal/io/pool
parentdccbee7dc355438d87baff45e054848e508b004d (diff)
parentd3549a3316a9917520ab5e6b0cd7b1846c59ad4b (diff)
merge from github.com/snonux/dtail
Diffstat (limited to 'internal/io/pool')
-rw-r--r--internal/io/pool/builder.go21
-rw-r--r--internal/io/pool/bytesbuffer.go22
2 files changed, 43 insertions, 0 deletions
diff --git a/internal/io/pool/builder.go b/internal/io/pool/builder.go
new file mode 100644
index 0000000..89fcf81
--- /dev/null
+++ b/internal/io/pool/builder.go
@@ -0,0 +1,21 @@
+package pool
+
+import (
+ "strings"
+ "sync"
+)
+
+// BuilderBuffer is there to optimize memory allocations (DTail allocates a lot
+// of memory while reading log data otherwise)
+var BuilderBuffer = sync.Pool{
+ New: func() interface{} {
+ sb := strings.Builder{}
+ return &sb
+ },
+}
+
+// RecycleBuilderBuffer recycles the buffer again.
+func RecycleBuilderBuffer(sb *strings.Builder) {
+ sb.Reset()
+ BuilderBuffer.Put(sb)
+}
diff --git a/internal/io/pool/bytesbuffer.go b/internal/io/pool/bytesbuffer.go
new file mode 100644
index 0000000..3d48f2c
--- /dev/null
+++ b/internal/io/pool/bytesbuffer.go
@@ -0,0 +1,22 @@
+package pool
+
+import (
+ "bytes"
+ "sync"
+)
+
+// BytesBuffer is there to optimize memory allocations. DTail otherwise allocates
+// a lot of memory while reading logs.
+var BytesBuffer = sync.Pool{
+ New: func() interface{} {
+ b := bytes.Buffer{}
+ b.Grow(128)
+ return &b
+ },
+}
+
+// RecycleBytesBuffer recycles the buffer again.
+func RecycleBytesBuffer(b *bytes.Buffer) {
+ b.Reset()
+ BytesBuffer.Put(b)
+}