diff --git a/lib/trinity/sim_system.ex b/lib/trinity/sim_system.ex index dfa6603..677e48b 100644 --- a/lib/trinity/sim_system.ex +++ b/lib/trinity/sim_system.ex @@ -6,15 +6,22 @@ defmodule Trinity.SimSystem do defp get_sim, do: Process.get(simulation_key()) @spec monotonic_time :: integer - def monotonic_time do + def monotonic_time(unit \\ :native) do case get_sim() do - nil -> System.monotonic_time() - _sim -> sim_monotonic_time() + nil -> System.monotonic_time(unit) + _sim -> sim_monotonic_time(unit) end end - defp sim_monotonic_time do + defp sim_monotonic_time(unit) do %{now: now} = get_sim() - :atomics.get(now, 1) + + time = :atomics.get(now, 1) + case unit do + :native -> time + :millisecond -> time + :microsecond -> time * 1000 + _ -> raise ArgumentError, "Unsupported unit #{inspect(unit)}" + end end end