Merge branches 'x86-boot-for-linus' and 'x86-cleanups-for-linus' of git://git.kernel...
[cascardo/linux.git] / tools / perf / ui / hist.c
index 4bf91b0..0a19328 100644 (file)
@@ -1,4 +1,5 @@
 #include <math.h>
+#include <linux/compiler.h>
 
 #include "../util/hist.h"
 #include "../util/util.h"
@@ -79,7 +80,8 @@ static int __hpp__fmt(struct perf_hpp *hpp, struct hist_entry *he,
 }
 
 #define __HPP_HEADER_FN(_type, _str, _min_width, _unit_width)          \
-static int hpp__header_##_type(struct perf_hpp *hpp)                   \
+static int hpp__header_##_type(struct perf_hpp_fmt *fmt __maybe_unused,        \
+                              struct perf_hpp *hpp)                    \
 {                                                                      \
        int len = _min_width;                                           \
                                                                        \
@@ -92,7 +94,8 @@ static int hpp__header_##_type(struct perf_hpp *hpp)                  \
 }
 
 #define __HPP_WIDTH_FN(_type, _min_width, _unit_width)                         \
-static int hpp__width_##_type(struct perf_hpp *hpp __maybe_unused)     \
+static int hpp__width_##_type(struct perf_hpp_fmt *fmt __maybe_unused, \
+                             struct perf_hpp *hpp __maybe_unused)      \
 {                                                                      \
        int len = _min_width;                                           \
                                                                        \
@@ -110,14 +113,16 @@ static u64 he_get_##_field(struct hist_entry *he)                         \
        return he->stat._field;                                                 \
 }                                                                              \
                                                                                \
-static int hpp__color_##_type(struct perf_hpp *hpp, struct hist_entry *he)     \
+static int hpp__color_##_type(struct perf_hpp_fmt *fmt __maybe_unused,         \
+                             struct perf_hpp *hpp, struct hist_entry *he)      \
 {                                                                              \
        return __hpp__fmt(hpp, he, he_get_##_field, " %6.2f%%",                 \
                          (hpp_snprint_fn)percent_color_snprintf, true);        \
 }
 
 #define __HPP_ENTRY_PERCENT_FN(_type, _field)                                  \
-static int hpp__entry_##_type(struct perf_hpp *hpp, struct hist_entry *he)     \
+static int hpp__entry_##_type(struct perf_hpp_fmt *_fmt __maybe_unused,                \
+                             struct perf_hpp *hpp, struct hist_entry *he)      \
 {                                                                              \
        const char *fmt = symbol_conf.field_sep ? " %.2f" : " %6.2f%%";         \
        return __hpp__fmt(hpp, he, he_get_##_field, fmt,                        \
@@ -130,7 +135,8 @@ static u64 he_get_raw_##_field(struct hist_entry *he)                               \
        return he->stat._field;                                                 \
 }                                                                              \
                                                                                \
-static int hpp__entry_##_type(struct perf_hpp *hpp, struct hist_entry *he)     \
+static int hpp__entry_##_type(struct perf_hpp_fmt *_fmt __maybe_unused,                \
+                             struct perf_hpp *hpp, struct hist_entry *he)      \
 {                                                                              \
        const char *fmt = symbol_conf.field_sep ? " %"PRIu64 : " %11"PRIu64;    \
        return __hpp__fmt(hpp, he, he_get_raw_##_field, fmt, scnprintf, false); \
@@ -157,196 +163,6 @@ HPP_PERCENT_FNS(overhead_guest_us, "guest usr", period_guest_us, 9, 8)
 HPP_RAW_FNS(samples, "Samples", nr_events, 12, 12)
 HPP_RAW_FNS(period, "Period", period, 12, 12)
 
-
-static int hpp__header_baseline(struct perf_hpp *hpp)
-{
-       return scnprintf(hpp->buf, hpp->size, "Baseline");
-}
-
-static int hpp__width_baseline(struct perf_hpp *hpp __maybe_unused)
-{
-       return 8;
-}
-
-static double baseline_percent(struct hist_entry *he)
-{
-       struct hist_entry *pair = hist_entry__next_pair(he);
-       struct hists *pair_hists = pair ? pair->hists : NULL;
-       double percent = 0.0;
-
-       if (pair) {
-               u64 total_period = pair_hists->stats.total_period;
-               u64 base_period  = pair->stat.period;
-
-               percent = 100.0 * base_period / total_period;
-       }
-
-       return percent;
-}
-
-static int hpp__color_baseline(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       double percent = baseline_percent(he);
-
-       if (hist_entry__has_pairs(he) || symbol_conf.field_sep)
-               return percent_color_snprintf(hpp->buf, hpp->size, " %6.2f%%", percent);
-       else
-               return scnprintf(hpp->buf, hpp->size, "        ");
-}
-
-static int hpp__entry_baseline(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       double percent = baseline_percent(he);
-       const char *fmt = symbol_conf.field_sep ? "%.2f" : " %6.2f%%";
-
-       if (hist_entry__has_pairs(he) || symbol_conf.field_sep)
-               return scnprintf(hpp->buf, hpp->size, fmt, percent);
-       else
-               return scnprintf(hpp->buf, hpp->size, "            ");
-}
-
-static int hpp__header_period_baseline(struct perf_hpp *hpp)
-{
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%12s";
-
-       return scnprintf(hpp->buf, hpp->size, fmt, "Period Base");
-}
-
-static int hpp__width_period_baseline(struct perf_hpp *hpp __maybe_unused)
-{
-       return 12;
-}
-
-static int hpp__entry_period_baseline(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       struct hist_entry *pair = hist_entry__next_pair(he);
-       u64 period = pair ? pair->stat.period : 0;
-       const char *fmt = symbol_conf.field_sep ? "%" PRIu64 : "%12" PRIu64;
-
-       return scnprintf(hpp->buf, hpp->size, fmt, period);
-}
-
-static int hpp__header_delta(struct perf_hpp *hpp)
-{
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%7s";
-
-       return scnprintf(hpp->buf, hpp->size, fmt, "Delta");
-}
-
-static int hpp__width_delta(struct perf_hpp *hpp __maybe_unused)
-{
-       return 7;
-}
-
-static int hpp__entry_delta(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       struct hist_entry *pair = hist_entry__next_pair(he);
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%7.7s";
-       char buf[32] = " ";
-       double diff = 0.0;
-
-       if (pair) {
-               if (he->diff.computed)
-                       diff = he->diff.period_ratio_delta;
-               else
-                       diff = perf_diff__compute_delta(he, pair);
-       } else
-               diff = perf_diff__period_percent(he, he->stat.period);
-
-       if (fabs(diff) >= 0.01)
-               scnprintf(buf, sizeof(buf), "%+4.2F%%", diff);
-
-       return scnprintf(hpp->buf, hpp->size, fmt, buf);
-}
-
-static int hpp__header_ratio(struct perf_hpp *hpp)
-{
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%14s";
-
-       return scnprintf(hpp->buf, hpp->size, fmt, "Ratio");
-}
-
-static int hpp__width_ratio(struct perf_hpp *hpp __maybe_unused)
-{
-       return 14;
-}
-
-static int hpp__entry_ratio(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       struct hist_entry *pair = hist_entry__next_pair(he);
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%14s";
-       char buf[32] = " ";
-       double ratio = 0.0;
-
-       if (pair) {
-               if (he->diff.computed)
-                       ratio = he->diff.period_ratio;
-               else
-                       ratio = perf_diff__compute_ratio(he, pair);
-       }
-
-       if (ratio > 0.0)
-               scnprintf(buf, sizeof(buf), "%+14.6F", ratio);
-
-       return scnprintf(hpp->buf, hpp->size, fmt, buf);
-}
-
-static int hpp__header_wdiff(struct perf_hpp *hpp)
-{
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%14s";
-
-       return scnprintf(hpp->buf, hpp->size, fmt, "Weighted diff");
-}
-
-static int hpp__width_wdiff(struct perf_hpp *hpp __maybe_unused)
-{
-       return 14;
-}
-
-static int hpp__entry_wdiff(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       struct hist_entry *pair = hist_entry__next_pair(he);
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%14s";
-       char buf[32] = " ";
-       s64 wdiff = 0;
-
-       if (pair) {
-               if (he->diff.computed)
-                       wdiff = he->diff.wdiff;
-               else
-                       wdiff = perf_diff__compute_wdiff(he, pair);
-       }
-
-       if (wdiff != 0)
-               scnprintf(buf, sizeof(buf), "%14ld", wdiff);
-
-       return scnprintf(hpp->buf, hpp->size, fmt, buf);
-}
-
-static int hpp__header_formula(struct perf_hpp *hpp)
-{
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%70s";
-
-       return scnprintf(hpp->buf, hpp->size, fmt, "Formula");
-}
-
-static int hpp__width_formula(struct perf_hpp *hpp __maybe_unused)
-{
-       return 70;
-}
-
-static int hpp__entry_formula(struct perf_hpp *hpp, struct hist_entry *he)
-{
-       struct hist_entry *pair = hist_entry__next_pair(he);
-       const char *fmt = symbol_conf.field_sep ? "%s" : "%-70s";
-       char buf[96] = " ";
-
-       if (pair)
-               perf_diff__formula(he, pair, buf, sizeof(buf));
-
-       return scnprintf(hpp->buf, hpp->size, fmt, buf);
-}
-
 #define HPP__COLOR_PRINT_FNS(_name)                    \
        {                                               \
                .header = hpp__header_ ## _name,        \
@@ -363,19 +179,13 @@ static int hpp__entry_formula(struct perf_hpp *hpp, struct hist_entry *he)
        }
 
 struct perf_hpp_fmt perf_hpp__format[] = {
-       HPP__COLOR_PRINT_FNS(baseline),
        HPP__COLOR_PRINT_FNS(overhead),
        HPP__COLOR_PRINT_FNS(overhead_sys),
        HPP__COLOR_PRINT_FNS(overhead_us),
        HPP__COLOR_PRINT_FNS(overhead_guest_sys),
        HPP__COLOR_PRINT_FNS(overhead_guest_us),
        HPP__PRINT_FNS(samples),
-       HPP__PRINT_FNS(period),
-       HPP__PRINT_FNS(period_baseline),
-       HPP__PRINT_FNS(delta),
-       HPP__PRINT_FNS(ratio),
-       HPP__PRINT_FNS(wdiff),
-       HPP__PRINT_FNS(formula)
+       HPP__PRINT_FNS(period)
 };
 
 LIST_HEAD(perf_hpp__list);
@@ -396,6 +206,8 @@ LIST_HEAD(perf_hpp__list);
 
 void perf_hpp__init(void)
 {
+       perf_hpp__column_enable(PERF_HPP__OVERHEAD);
+
        if (symbol_conf.show_cpu_utilization) {
                perf_hpp__column_enable(PERF_HPP__OVERHEAD_SYS);
                perf_hpp__column_enable(PERF_HPP__OVERHEAD_US);
@@ -424,46 +236,6 @@ void perf_hpp__column_enable(unsigned col)
        perf_hpp__column_register(&perf_hpp__format[col]);
 }
 
-static inline void advance_hpp(struct perf_hpp *hpp, int inc)
-{
-       hpp->buf  += inc;
-       hpp->size -= inc;
-}
-
-int hist_entry__period_snprintf(struct perf_hpp *hpp, struct hist_entry *he,
-                               bool color)
-{
-       const char *sep = symbol_conf.field_sep;
-       struct perf_hpp_fmt *fmt;
-       char *start = hpp->buf;
-       int ret;
-       bool first = true;
-
-       if (symbol_conf.exclude_other && !he->parent)
-               return 0;
-
-       perf_hpp__for_each_format(fmt) {
-               /*
-                * If there's no field_sep, we still need
-                * to display initial '  '.
-                */
-               if (!sep || !first) {
-                       ret = scnprintf(hpp->buf, hpp->size, "%s", sep ?: "  ");
-                       advance_hpp(hpp, ret);
-               } else
-                       first = false;
-
-               if (color && fmt->color)
-                       ret = fmt->color(hpp, he);
-               else
-                       ret = fmt->entry(hpp, he);
-
-               advance_hpp(hpp, ret);
-       }
-
-       return hpp->buf - start;
-}
-
 int hist_entry__sort_snprintf(struct hist_entry *he, char *s, size_t size,
                              struct hists *hists)
 {
@@ -499,7 +271,7 @@ unsigned int hists__sort_list_width(struct hists *hists)
                if (i)
                        ret += 2;
 
-               ret += fmt->width(&dummy_hpp);
+               ret += fmt->width(fmt, &dummy_hpp);
        }
 
        list_for_each_entry(se, &hist_entry__sort_list, list)