blob: e39b70e496643c4a0cf463e72b2289cbf7d84d64 [file] [log] [blame]
package kotlinx.coroutines.experimental.io.internal
import kotlinx.io.pool.*
import java.nio.*
internal val BUFFER_SIZE = getIOIntProperty("BufferSize", 4096)
private val BUFFER_POOL_SIZE = getIOIntProperty("BufferPoolSize", 2048)
private val BUFFER_OBJECT_POOL_SIZE = getIOIntProperty("BufferObjectPoolSize", 1024)
// ------------- standard shared pool objects -------------
internal val BufferPool: ObjectPool<ByteBuffer> =
object : DefaultPool<ByteBuffer>(BUFFER_POOL_SIZE) {
override fun produceInstance(): ByteBuffer =
ByteBuffer.allocateDirect(BUFFER_SIZE)
override fun clearInstance(instance: ByteBuffer): ByteBuffer =
instance.also { it.clear() }
override fun validateInstance(instance: ByteBuffer) {
require(instance.capacity() == BUFFER_SIZE)
}
}
internal val BufferObjectPool: ObjectPool<ReadWriteBufferState.Initial> =
object: DefaultPool<ReadWriteBufferState.Initial>(BUFFER_OBJECT_POOL_SIZE) {
override fun produceInstance() =
ReadWriteBufferState.Initial(BufferPool.borrow())
override fun disposeInstance(instance: ReadWriteBufferState.Initial) {
BufferPool.recycle(instance.backingBuffer)
}
}
internal val BufferObjectNoPool: ObjectPool<ReadWriteBufferState.Initial> =
object : NoPoolImpl<ReadWriteBufferState.Initial>() {
override fun borrow(): ReadWriteBufferState.Initial =
ReadWriteBufferState.Initial(ByteBuffer.allocateDirect(BUFFER_SIZE))
}