blob: 75f8ce5491be14ac3eb98d631f70b7325939b3c7 [file] [log] [blame]
/*
* Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
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))
}