From e87069ebbc2cb49e2db3a261f9e4df16703762a9 Mon Sep 17 00:00:00 2001 From: Edgar Espina Date: Sun, 26 May 2024 13:53:04 -0300 Subject: [PATCH] buffer: allow to configure default buffer initial capacity - set initial capacity to 1024 bytes --- .../java/io/jooby/buffer/DataBufferFactory.java | 14 ++++++++++++++ .../io/jooby/buffer/DefaultDataBufferFactory.java | 15 +++++++++++++-- .../netty/buffer/NettyDataBufferFactory.java | 15 +++++++++++++-- .../jooby/buffer/LeakAwareDataBufferFactory.java | 11 +++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/jooby/src/main/java/io/jooby/buffer/DataBufferFactory.java b/jooby/src/main/java/io/jooby/buffer/DataBufferFactory.java index 0f08b77d6f..a5326aa642 100644 --- a/jooby/src/main/java/io/jooby/buffer/DataBufferFactory.java +++ b/jooby/src/main/java/io/jooby/buffer/DataBufferFactory.java @@ -17,6 +17,20 @@ * @see DataBuffer */ public interface DataBufferFactory { + /** + * Buffer of a default initial capacity. Default capacity is 1024 bytes. + * + * @return buffer of a default initial capacity. + */ + int getDefaultInitialCapacity(); + + /** + * Set default buffer initial capacity. + * + * @param defaultInitialCapacity Default initial buffer capacity. + * @return This buffer factory. + */ + DataBufferFactory setDefaultInitialCapacity(int defaultInitialCapacity); /** * Allocate a data buffer of a default initial capacity. Depending on the underlying diff --git a/jooby/src/main/java/io/jooby/buffer/DefaultDataBufferFactory.java b/jooby/src/main/java/io/jooby/buffer/DefaultDataBufferFactory.java index 2ea42dfbd4..016818b9db 100644 --- a/jooby/src/main/java/io/jooby/buffer/DefaultDataBufferFactory.java +++ b/jooby/src/main/java/io/jooby/buffer/DefaultDataBufferFactory.java @@ -24,7 +24,7 @@ public class DefaultDataBufferFactory implements DataBufferFactory { * @see #DefaultDataBufferFactory() * @see #DefaultDataBufferFactory(boolean) */ - public static final int DEFAULT_INITIAL_CAPACITY = 4096; + public static final int DEFAULT_INITIAL_CAPACITY = 1024; /** * Shared instance based on the default constructor. @@ -35,7 +35,7 @@ public class DefaultDataBufferFactory implements DataBufferFactory { private final boolean preferDirect; - private final int defaultInitialCapacity; + private int defaultInitialCapacity; /** * Creates a new {@code DefaultDataBufferFactory} with default settings. @@ -69,6 +69,17 @@ public DefaultDataBufferFactory(boolean preferDirect, int defaultInitialCapacity this.defaultInitialCapacity = defaultInitialCapacity; } + @Override + public int getDefaultInitialCapacity() { + return defaultInitialCapacity; + } + + @Override + public DataBufferFactory setDefaultInitialCapacity(int defaultInitialCapacity) { + this.defaultInitialCapacity = defaultInitialCapacity; + return this; + } + @Override public DefaultDataBuffer allocateBuffer() { return allocateBuffer(this.defaultInitialCapacity); diff --git a/modules/jooby-netty/src/main/java/io/jooby/netty/buffer/NettyDataBufferFactory.java b/modules/jooby-netty/src/main/java/io/jooby/netty/buffer/NettyDataBufferFactory.java index 312a5c8a20..9963362b3e 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/netty/buffer/NettyDataBufferFactory.java +++ b/modules/jooby-netty/src/main/java/io/jooby/netty/buffer/NettyDataBufferFactory.java @@ -41,6 +41,7 @@ public class NettyDataBufferFactory implements DataBufferFactory { } private final ByteBufAllocator byteBufAllocator; + private int defaultInitialCapacity = 1024; /** * Create a new {@code NettyDataBufferFactory} based on the given factory. @@ -63,10 +64,20 @@ public ByteBufAllocator getByteBufAllocator() { return this.byteBufAllocator; } + @Override + public int getDefaultInitialCapacity() { + return defaultInitialCapacity; + } + + @Override + public NettyDataBufferFactory setDefaultInitialCapacity(int defaultInitialCapacity) { + this.defaultInitialCapacity = defaultInitialCapacity; + return this; + } + @Override public NettyDataBuffer allocateBuffer() { - ByteBuf byteBuf = this.byteBufAllocator.buffer(); - return new NettyDataBuffer(byteBuf, this); + return allocateBuffer(defaultInitialCapacity); } @Override diff --git a/tests/src/test/java/io/jooby/buffer/LeakAwareDataBufferFactory.java b/tests/src/test/java/io/jooby/buffer/LeakAwareDataBufferFactory.java index 709862feb1..ae5bd88246 100644 --- a/tests/src/test/java/io/jooby/buffer/LeakAwareDataBufferFactory.java +++ b/tests/src/test/java/io/jooby/buffer/LeakAwareDataBufferFactory.java @@ -56,6 +56,17 @@ public LeakAwareDataBufferFactory(DataBufferFactory delegate) { this.delegate = delegate; } + @Override + public int getDefaultInitialCapacity() { + return delegate.getDefaultInitialCapacity(); + } + + @Override + public DataBufferFactory setDefaultInitialCapacity(int defaultInitialCapacity) { + delegate.setDefaultInitialCapacity(defaultInitialCapacity); + return this; + } + /** * Checks whether all the data buffers allocated by this factory have also been released. If not, * then an {@link AssertionError} is thrown. Typically used from a JUnit after method.