| | from unittest import mock |
| |
|
| | from mlagents_envs import timers |
| |
|
| |
|
| | @timers.timed |
| | def decorated_func(x: int = 0, y: float = 1.0) -> str: |
| | timers.set_gauge("my_gauge", x + y) |
| | return f"{x} + {y} = {x + y}" |
| |
|
| |
|
| | def test_timers() -> None: |
| | test_timer = timers.TimerStack() |
| | with mock.patch("mlagents_envs.timers._get_thread_timer", return_value=test_timer): |
| | |
| | with timers.hierarchical_timer("top_level"): |
| | for i in range(3): |
| | with timers.hierarchical_timer("multiple"): |
| | decorated_func(i, i) |
| |
|
| | raised = False |
| | try: |
| | with timers.hierarchical_timer("raises"): |
| | raise RuntimeError("timeout!") |
| | except RuntimeError: |
| | raised = True |
| |
|
| | with timers.hierarchical_timer("post_raise"): |
| | assert raised |
| | pass |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | root = test_timer.root |
| | assert root.children.keys() == {"top_level"} |
| |
|
| | top_level = root.children["top_level"] |
| | assert top_level.children.keys() == {"multiple", "raises", "post_raise"} |
| |
|
| | |
| | raises = top_level.children["raises"] |
| | assert raises.count == 1 |
| |
|
| | multiple = top_level.children["multiple"] |
| | assert multiple.count == 3 |
| |
|
| | timer_tree = test_timer.get_timing_tree() |
| |
|
| | expected_tree = { |
| | "name": "root", |
| | "total": mock.ANY, |
| | "count": 1, |
| | "self": mock.ANY, |
| | "children": { |
| | "top_level": { |
| | "total": mock.ANY, |
| | "count": 1, |
| | "self": mock.ANY, |
| | "children": { |
| | "multiple": { |
| | "total": mock.ANY, |
| | "count": 3, |
| | "self": mock.ANY, |
| | "children": { |
| | "decorated_func": { |
| | "total": mock.ANY, |
| | "count": 3, |
| | "self": mock.ANY, |
| | } |
| | }, |
| | }, |
| | "raises": {"total": mock.ANY, "count": 1, "self": mock.ANY}, |
| | "post_raise": {"total": mock.ANY, "count": 1, "self": mock.ANY}, |
| | }, |
| | } |
| | }, |
| | "gauges": {"my_gauge": {"value": 4.0, "max": 4.0, "min": 0.0, "count": 3}}, |
| | "metadata": { |
| | "timer_format_version": timers.TIMER_FORMAT_VERSION, |
| | "start_time_seconds": mock.ANY, |
| | "end_time_seconds": mock.ANY, |
| | "python_version": mock.ANY, |
| | "command_line_arguments": mock.ANY, |
| | }, |
| | } |
| |
|
| | assert timer_tree == expected_tree |
| |
|