aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tools/src
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2017-07-06 14:28:29 +0200
committerGitHub <[email protected]>2017-07-06 14:28:29 +0200
commit7ef43d456837b012bf0b5ff751701dc1c6becd25 (patch)
treec2ff759d0236b36830c5fe86ff8dfcef176935e9 /lib/tools/src
parent1f1d20a352d16741c272f14dd7d09632eef13509 (diff)
parent155f383b729406679c19098aee0386b9058d3161 (diff)
downloadotp-7ef43d456837b012bf0b5ff751701dc1c6becd25.tar.gz
otp-7ef43d456837b012bf0b5ff751701dc1c6becd25.tar.bz2
otp-7ef43d456837b012bf0b5ff751701dc1c6becd25.zip
johanclaesson/fprof/PR-1460/OTP-14500
fprof: Sum callers and callees
Diffstat (limited to 'lib/tools/src')
-rw-r--r--lib/tools/src/fprof.erl20
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,