summaryrefslogtreecommitdiff
path: root/opendc-simulator/opendc-simulator-flow/src/main
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-10-08 12:23:48 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-10-08 17:11:53 +0200
commitf9483bc5782d86637777c0d21c383ce3e2c0851b (patch)
treec3c5af29adfc82f56a172d1de728c936d3cb87da /opendc-simulator/opendc-simulator-flow/src/main
parent4623316cb23ce95cb8ce8db0987f948a8dc1a349 (diff)
perf(simulator): Optimize clock storage
Diffstat (limited to 'opendc-simulator/opendc-simulator-flow/src/main')
-rw-r--r--opendc-simulator/opendc-simulator-flow/src/main/kotlin/org/opendc/simulator/flow/internal/FlowEngineImpl.kt13
1 files changed, 10 insertions, 3 deletions
diff --git a/opendc-simulator/opendc-simulator-flow/src/main/kotlin/org/opendc/simulator/flow/internal/FlowEngineImpl.kt b/opendc-simulator/opendc-simulator-flow/src/main/kotlin/org/opendc/simulator/flow/internal/FlowEngineImpl.kt
index a9234abf..450556f8 100644
--- a/opendc-simulator/opendc-simulator-flow/src/main/kotlin/org/opendc/simulator/flow/internal/FlowEngineImpl.kt
+++ b/opendc-simulator/opendc-simulator-flow/src/main/kotlin/org/opendc/simulator/flow/internal/FlowEngineImpl.kt
@@ -38,7 +38,7 @@ import kotlin.coroutines.CoroutineContext
* @param context The coroutine context to use.
* @param clock The virtual simulation clock.
*/
-internal class FlowEngineImpl(private val context: CoroutineContext, override val clock: Clock) : FlowEngine, Runnable {
+internal class FlowEngineImpl(private val context: CoroutineContext, clock: Clock) : FlowEngine, Runnable {
/**
* The [Delay] instance that provides scheduled execution of [Runnable]s.
*/
@@ -71,6 +71,13 @@ internal class FlowEngineImpl(private val context: CoroutineContext, override va
private var batchIndex = 0
/**
+ * The virtual [Clock] of this engine.
+ */
+ override val clock: Clock
+ get() = _clock
+ private val _clock: Clock = clock
+
+ /**
* Update the specified [ctx] synchronously.
*/
fun scheduleSync(now: Long, ctx: FlowConsumerContextImpl) {
@@ -113,7 +120,7 @@ internal class FlowEngineImpl(private val context: CoroutineContext, override va
try {
// Flush the work if the engine is not already running
if (batchIndex == 1 && queue.isNotEmpty()) {
- doRunEngine(clock.millis())
+ doRunEngine(_clock.millis())
}
} finally {
batchIndex--
@@ -122,7 +129,7 @@ internal class FlowEngineImpl(private val context: CoroutineContext, override va
/* Runnable */
override fun run() {
- val now = clock.millis()
+ val now = _clock.millis()
val invocation = futureInvocations.poll() // Clear invocation from future invocation queue
assert(now >= invocation.timestamp) { "Future invocations invariant violated" }