File 0178-fprof-Sum-callers-and-callees.patch of Package erlang

From 155f383b729406679c19098aee0386b9058d3161 Mon Sep 17 00:00:00 2001
From: Johan Claesson <johan.claesson@ericsson.com>
Date: Mon, 15 May 2017 23:25:13 +0200
Subject: [PATCH] fprof: Sum callers and callees

When sampling multiple processes and analyzing with totals true sum
together all caller and callee entries which concerns the same
function.  Previous behaviour was to report each contributing entry.
---
 lib/tools/src/fprof.erl | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/lib/tools/src/fprof.erl b/lib/tools/src/fprof.erl
index d1a462441..436f68d12 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,
-- 
2.13.3

openSUSE Build Service is sponsored by