-export(
[ start/0
, stop/1
+ , gc/1
, of_context_switches/1
, of_io/1
, of_reductions/1
true = ets:delete(TidErlangProcessInfoReductions),
{}.
+-spec gc(t()) ->
+ {}.
+gc(?T{erlang_process_info_reductions=Table}=T) ->
+ case ets:first(Table)
+ of '$end_of_table' ->
+ {}
+ ; FirstPid when is_pid(FirstPid) ->
+ gc(T, FirstPid)
+ end.
+
+-spec gc(t(), pid()) ->
+ {}.
+gc(?T{erlang_process_info_reductions=Table}=T, Pid) ->
+ Next = ets:next(Table, Pid),
+ case beam_stats_source:erlang_is_process_alive(Pid)
+ of true -> true
+ ; false -> ets:delete(Table, Pid)
+ end,
+ case Next
+ of '$end_of_table' ->
+ {}
+ ; NextPid when is_pid(NextPid) ->
+ gc(T, NextPid)
+ end.
+
-spec of_context_switches(t()) ->
non_neg_integer().
of_context_switches(?T{erlang_statistics=Table}) ->