perf ui/stdio: Fix invalid output on event group report
authorNamhyung Kim <namhyung@kernel.org>
Mon, 3 Mar 2014 01:14:02 +0000 (10:14 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 14 Mar 2014 21:08:37 +0000 (18:08 -0300)
When some of group member has 0 overhead, it printed previous percentage
instead of 0.00%.  It's because passing integer 0 as a percent rather
than double 0.0 so the remaining bits came from garbage.  The TUI and
GTK don't have this problem since they pass 0.0.

Before:

  # Samples: 845  of event 'anon group { cycles, cache-references, cache-misses }'
  # Event count (approx.): 174775051
  #
  #                 Overhead                               Samples
  # ........................  ....................................
  #
      20.32%   8.58%  73.51%            45          30         138
       6.87%   6.87%   6.87%            21           0           0
       5.29%   0.31%   0.31%            10           1           0
       1.89%   1.89%   1.89%             6           0           0
       1.76%   1.76%   1.76%             2           0           0

After:

  #                 Overhead                               Samples
  # ........................  ....................................
  #
      20.32%   8.58%  73.51%            45          30         138
       6.87%   0.00%   0.00%            21           0           0
       5.29%   0.31%   0.00%            10           1           0
       1.89%   0.00%   0.00%             6           0           0
       1.76%   0.00%   0.00%             2           0           0

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1393809254-4480-2-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/hist.c

index 78f4c92e9b73c1c55e5699bce4b628f551348beb..6094562c95232f60bb5493ed23839b83d65d655d 100644 (file)
@@ -52,8 +52,15 @@ static int __hpp__fmt(struct perf_hpp *hpp, struct hist_entry *he,
                                 * zero-fill group members in the middle which
                                 * have no sample
                                 */
-                               ret += print_fn(hpp->buf + ret, hpp->size - ret,
-                                               fmt, 0);
+                               if (fmt_percent) {
+                                       ret += print_fn(hpp->buf + ret,
+                                                       hpp->size - ret,
+                                                       fmt, 0.0);
+                               } else {
+                                       ret += print_fn(hpp->buf + ret,
+                                                       hpp->size - ret,
+                                                       fmt, 0ULL);
+                               }
                        }
 
                        if (fmt_percent)
@@ -72,8 +79,13 @@ static int __hpp__fmt(struct perf_hpp *hpp, struct hist_entry *he,
                        /*
                         * zero-fill group members at last which have no sample
                         */
-                       ret += print_fn(hpp->buf + ret, hpp->size - ret,
-                                       fmt, 0);
+                       if (fmt_percent) {
+                               ret += print_fn(hpp->buf + ret, hpp->size - ret,
+                                               fmt, 0.0);
+                       } else {
+                               ret += print_fn(hpp->buf + ret, hpp->size - ret,
+                                               fmt, 0ULL);
+                       }
                }
        }
        return ret;