diff options
author | Lukas Larsson <[email protected]> | 2017-07-06 14:28:29 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2017-07-06 14:28:29 +0200 |
commit | 7ef43d456837b012bf0b5ff751701dc1c6becd25 (patch) | |
tree | c2ff759d0236b36830c5fe86ff8dfcef176935e9 | |
parent | 1f1d20a352d16741c272f14dd7d09632eef13509 (diff) | |
parent | 155f383b729406679c19098aee0386b9058d3161 (diff) | |
download | otp-7ef43d456837b012bf0b5ff751701dc1c6becd25.tar.gz otp-7ef43d456837b012bf0b5ff751701dc1c6becd25.tar.bz2 otp-7ef43d456837b012bf0b5ff751701dc1c6becd25.zip |
johanclaesson/fprof/PR-1460/OTP-14500
fprof: Sum callers and callees
-rw-r--r-- | lib/tools/src/fprof.erl | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/tools/src/fprof.erl b/lib/tools/src/fprof.erl index d1a4624419..436f68d12b 100644 --- a/lib/tools/src/fprof.erl +++ b/lib/tools/src/fprof.erl @@ -2636,22 +2636,32 @@ funcstat_pd(Pid, Func1, Func0, Clocks) -> #funcstat{callers_sum = CallersSum, callers = Callers} = FuncstatCallers -> FuncstatCallers#funcstat{ - callers_sum = clocks_sum(CallersSum, Clocks, Func0), - callers = [Clocks#clocks{id = Func1} | Callers]} - end), + callers_sum = clocks_sum(CallersSum, Clocks, Func0), + callers = insert_call(Clocks, Func1, Callers)} + end), put({Pid, Func1}, case get({Pid, Func1}) of undefined -> - #funcstat{callers_sum = #clocks{id = Func1}, + #funcstat{callers_sum = #clocks{id = Func1}, called_sum = Clocks#clocks{id = Func1}, called = [Clocks#clocks{id = Func0}]}; #funcstat{called_sum = CalledSum, called = Called} = FuncstatCalled -> FuncstatCalled#funcstat{ called_sum = clocks_sum(CalledSum, Clocks, Func1), - called = [Clocks#clocks{id = Func0} | Called]} + called = insert_call(Clocks, Func0, Called)} end). +insert_call(Clocks, Func, ClocksList) -> + insert_call(Clocks, Func, ClocksList, []). + +insert_call(Clocks, Func, [#clocks{id = Func} = C | T], Acc) -> + [clocks_sum(C, Clocks, Func) | T ++ Acc]; +insert_call(Clocks, Func, [H | T], Acc) -> + insert_call(Clocks, Func, T, [H | Acc]); +insert_call(Clocks, Func, [], Acc) -> + [Clocks#clocks{id = Func} | Acc]. + %% Sort a list of funcstat records, |