summaryrefslogtreecommitdiff
path: root/nemesis/causal_event_loop.py
diff options
context:
space:
mode:
Diffstat (limited to 'nemesis/causal_event_loop.py')
-rw-r--r--nemesis/causal_event_loop.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/nemesis/causal_event_loop.py b/nemesis/causal_event_loop.py
index b73458f..22ec65c 100644
--- a/nemesis/causal_event_loop.py
+++ b/nemesis/causal_event_loop.py
@@ -102,29 +102,36 @@ class CausalEventLoop(asyncio.SelectorEventLoop):
# the last time we entered the target coro
_time_entered_coro = None
_ready_events = []
+ # the time this experiment started
+ _start_time = None
def __init__(self) -> None:
super().__init__()
def set_speedup(self, speedup):
+ # print(self._coro_intervals)
+ # we want to delay the start time if we are starting a new experiment
+ # during the old experiment's interval
+ self._start_time = self.time() if not self._time_entered_coro else None
self._speedup = speedup
# reset experiment counters
- self._time_entered_coro = None
self._coro_intervals.clear()
self._completed_coros.clear()
def get_completed_coros(self):
return copy(self._completed_coros)
- def get_pause_time(self):
+ def get_run_time(self):
+ curr_time = self.time()
if not self._coro_intervals:
return 0
start_interval = self._coro_intervals[0][0]
- end_interval = self.time() if self._time_entered_coro else self._coro_intervals[-1][1]
+ end_interval = curr_time if self._time_entered_coro else self._coro_intervals[-1][1]
interval = (start_interval, end_interval)
- return self._get_pause_time(interval)
+ pause_time = self._get_pause_time(interval)
+ return (curr_time - self._start_time) - pause_time
def ping_enter_coro(self):
self._time_entered_coro = self.time()
@@ -135,7 +142,10 @@ class CausalEventLoop(asyncio.SelectorEventLoop):
except AssertionError as e:
print(f"Assertion failed: {e}")
sys.exit(1)
- self._coro_intervals.add((self._time_entered_coro, self.time()))
+ if self._start_time:
+ self._coro_intervals.add((self._time_entered_coro, self.time()))
+ else:
+ self._start_time = self.time()
self._time_entered_coro = None
def collect_ready_events(self, timeout=0):