spectator/stopwatch.py (14 lines of code) (raw):

from typing import Union from spectator.clock import Clock, SystemClock from spectator.meter.percentile_timer import PercentileTimer from spectator.meter.timer import Timer class StopWatch: """Context Manager that records the duration of a with-statement block in a Timer or PercentileTimer. It uses a custom Clock implementation to assist with unit testing.""" def __init__(self, timer: Union[PercentileTimer, Timer], clock: Clock = SystemClock()) -> None: self._clock = clock self._timer = timer def __enter__(self) -> None: self._start = self._clock.monotonic_time() def __exit__(self, type_, value, traceback) -> None: self._timer.record(self.duration()) def duration(self) -> float: return self._clock.monotonic_time() - self._start