blob: e39b70e496643c4a0cf463e72b2289cbf7d84d64 [file] [log] [blame]
Sergey Mashkov86f70612017-07-25 10:59:44 +03001package kotlinx.coroutines.experimental.io.internal
2
Sergey Mashkov6d059932017-10-06 18:46:23 +03003import kotlinx.io.pool.*
4import java.nio.*
Sergey Mashkova10b6922017-08-03 13:41:54 +03005
Roman Elizarov83762032017-08-08 19:58:40 +03006internal val BUFFER_SIZE = getIOIntProperty("BufferSize", 4096)
7private val BUFFER_POOL_SIZE = getIOIntProperty("BufferPoolSize", 2048)
8private val BUFFER_OBJECT_POOL_SIZE = getIOIntProperty("BufferObjectPoolSize", 1024)
Sergey Mashkova10b6922017-08-03 13:41:54 +03009
Roman Elizarov83762032017-08-08 19:58:40 +030010// ------------- standard shared pool objects -------------
11
12internal val BufferPool: ObjectPool<ByteBuffer> =
Sergey Mashkov6d059932017-10-06 18:46:23 +030013 object : DefaultPool<ByteBuffer>(BUFFER_POOL_SIZE) {
Roman Elizarov83762032017-08-08 19:58:40 +030014 override fun produceInstance(): ByteBuffer =
15 ByteBuffer.allocateDirect(BUFFER_SIZE)
16 override fun clearInstance(instance: ByteBuffer): ByteBuffer =
17 instance.also { it.clear() }
18 override fun validateInstance(instance: ByteBuffer) {
19 require(instance.capacity() == BUFFER_SIZE)
20 }
Sergey Mashkova10b6922017-08-03 13:41:54 +030021 }
Sergey Mashkov86f70612017-07-25 10:59:44 +030022
Roman Elizarov83762032017-08-08 19:58:40 +030023internal val BufferObjectPool: ObjectPool<ReadWriteBufferState.Initial> =
Sergey Mashkov6d059932017-10-06 18:46:23 +030024 object: DefaultPool<ReadWriteBufferState.Initial>(BUFFER_OBJECT_POOL_SIZE) {
Roman Elizarov83762032017-08-08 19:58:40 +030025 override fun produceInstance() =
26 ReadWriteBufferState.Initial(BufferPool.borrow())
27 override fun disposeInstance(instance: ReadWriteBufferState.Initial) {
28 BufferPool.recycle(instance.backingBuffer)
29 }
30 }
Sergey Mashkov86f70612017-07-25 10:59:44 +030031
Roman Elizarov83762032017-08-08 19:58:40 +030032internal val BufferObjectNoPool: ObjectPool<ReadWriteBufferState.Initial> =
33 object : NoPoolImpl<ReadWriteBufferState.Initial>() {
34 override fun borrow(): ReadWriteBufferState.Initial =
35 ReadWriteBufferState.Initial(ByteBuffer.allocateDirect(BUFFER_SIZE))
36 }