mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Most of the time (1-2 seconds) is going to flight plan layout. There don't seem to be any easy opportunities for improvement.
36 lines
999 B
Python
36 lines
999 B
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
import timeit
|
|
from collections import defaultdict
|
|
from contextlib import contextmanager
|
|
from datetime import timedelta
|
|
from typing import Iterator
|
|
|
|
|
|
@contextmanager
|
|
def logged_duration(event: str) -> Iterator[None]:
|
|
start = timeit.default_timer()
|
|
yield
|
|
end = timeit.default_timer()
|
|
logging.debug("%s took %s", event, timedelta(seconds=end - start))
|
|
|
|
|
|
class MultiEventTracer:
|
|
def __init__(self) -> None:
|
|
self.events: dict[str, timedelta] = defaultdict(timedelta)
|
|
|
|
def __enter__(self) -> MultiEventTracer:
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
|
|
for event, duration in self.events.items():
|
|
logging.debug("%s took %s", event, duration)
|
|
|
|
@contextmanager
|
|
def trace(self, event: str) -> Iterator[None]:
|
|
start = timeit.default_timer()
|
|
yield
|
|
end = timeit.default_timer()
|
|
self.events[event] += timedelta(seconds=end - start)
|