X-Git-Url: https://git.xandkar.net/?p=beam_stats.git;a=blobdiff_plain;f=src%2Fbeam_stats_delta.erl;fp=src%2Fbeam_stats_delta.erl;h=8820d71b380703ac8b59b6365476b95e05c83c94;hp=45cfdb007a0065bef733a11465cb161e3550f876;hb=140077ceda11a34f4880fd2f4871b3aaab34f13d;hpb=7dbc59b67d2cebe0e498ac4fd167cbaabed0e55b diff --git a/src/beam_stats_delta.erl b/src/beam_stats_delta.erl index 45cfdb0..8820d71 100644 --- a/src/beam_stats_delta.erl +++ b/src/beam_stats_delta.erl @@ -7,6 +7,7 @@ -export( [ start/0 , stop/1 + , gc/1 , of_context_switches/1 , of_io/1 , of_reductions/1 @@ -47,6 +48,30 @@ stop(?T 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) -> + case beam_stats_source:erlang_is_process_alive(Pid) + of true -> true + ; false -> ets:delete(Table, Pid) + end, + case ets:next(Table, Pid) + 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}) ->