diff options
author | Sverker Eriksson <sverker@erlang.org> | 2022-01-11 23:14:21 +0100 |
---|---|---|
committer | Sverker Eriksson <sverker@erlang.org> | 2022-01-11 23:14:21 +0100 |
commit | 70a36dc442feda69eef375a7ffb15d4a7fb98269 (patch) | |
tree | 430e816276ba7b266c377da10a7f1a8d4c6560e0 /lib/runtime_tools/src | |
parent | f518b5d3a9bde82ebcd16697f01ed2fd1fcfd0cb (diff) | |
parent | d33bb24ef66be325282fc75bee00dec066e6c11c (diff) | |
download | erlang-70a36dc442feda69eef375a7ffb15d4a7fb98269.tar.gz |
Merge branch 'maint'
Diffstat (limited to 'lib/runtime_tools/src')
-rw-r--r-- | lib/runtime_tools/src/scheduler.erl | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/lib/runtime_tools/src/scheduler.erl b/lib/runtime_tools/src/scheduler.erl index c896b671ac..114dfa17fe 100644 --- a/lib/runtime_tools/src/scheduler.erl +++ b/lib/runtime_tools/src/scheduler.erl @@ -23,8 +23,8 @@ -module(scheduler). --export([sample/0, - sample_all/0, +-export([sample/0, get_sample/0, + sample_all/0, get_sample_all/0, utilization/1, utilization/2]). @@ -54,12 +54,32 @@ sample(Stats) -> sample(Stats); List -> - Sorted = lists:sort(List), - Tagged = lists:map(fun({I, A, T}) -> {sched_tag(I), I, A, T} end, - Sorted), - {Stats, Tagged} + create_sample(Stats, List) end. +-spec get_sample() -> sched_sample() | undefined. +get_sample() -> + get_sample(scheduler_wall_time). + +-spec get_sample_all() -> sched_sample() | undefined. +get_sample_all() -> + get_sample(scheduler_wall_time_all). + +get_sample(Stats) -> + case erlang:statistics(Stats) of + undefined -> + undefined; + List -> + create_sample(Stats, List) + end. + +create_sample(Stats, List) -> + Sorted = lists:sort(List), + Tagged = lists:map(fun({I, A, T}) -> {sched_tag(I), I, A, T} end, + Sorted), + {Stats, Tagged}. + + -type sched_util_result() :: [{sched_type(), sched_id(), float(), string()} | {total, float(), string()} | @@ -70,16 +90,11 @@ sample(Stats) -> (Sample) -> sched_util_result() when Sample :: sched_sample(). utilization(Seconds) when is_integer(Seconds), Seconds > 0 -> - OldFlag = erlang:system_flag(scheduler_wall_time, true), + _ = erlang:system_flag(scheduler_wall_time, true), T0 = sample(), receive after Seconds*1000 -> ok end, T1 = sample(), - case OldFlag of - false -> - erlang:system_flag(scheduler_wall_time, OldFlag); - true -> - ok - end, + _ = erlang:system_flag(scheduler_wall_time, false), utilization(T0,T1); utilization({Stats, _}=T0) when Stats =:= scheduler_wall_time; |