Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
[cascardo/linux.git] / tools / perf / util / hist.c
index abef270..6f505d1 100644 (file)
@@ -76,21 +76,21 @@ static void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
        }
 }
 
-static void hist_entry__add_cpumode_period(struct hist_entry *self,
+static void hist_entry__add_cpumode_period(struct hist_entry *he,
                                           unsigned int cpumode, u64 period)
 {
        switch (cpumode) {
        case PERF_RECORD_MISC_KERNEL:
-               self->period_sys += period;
+               he->period_sys += period;
                break;
        case PERF_RECORD_MISC_USER:
-               self->period_us += period;
+               he->period_us += period;
                break;
        case PERF_RECORD_MISC_GUEST_KERNEL:
-               self->period_guest_sys += period;
+               he->period_guest_sys += period;
                break;
        case PERF_RECORD_MISC_GUEST_USER:
-               self->period_guest_us += period;
+               he->period_guest_us += period;
                break;
        default:
                break;
@@ -165,18 +165,18 @@ void hists__decay_entries_threaded(struct hists *hists,
 static struct hist_entry *hist_entry__new(struct hist_entry *template)
 {
        size_t callchain_size = symbol_conf.use_callchain ? sizeof(struct callchain_root) : 0;
-       struct hist_entry *self = malloc(sizeof(*self) + callchain_size);
+       struct hist_entry *he = malloc(sizeof(*he) + callchain_size);
 
-       if (self != NULL) {
-               *self = *template;
-               self->nr_events = 1;
-               if (self->ms.map)
-                       self->ms.map->referenced = true;
+       if (he != NULL) {
+               *he = *template;
+               he->nr_events = 1;
+               if (he->ms.map)
+                       he->ms.map->referenced = true;
                if (symbol_conf.use_callchain)
-                       callchain_init(self->callchain);
+                       callchain_init(he->callchain);
        }
 
-       return self;
+       return he;
 }
 
 static void hists__inc_nr_entries(struct hists *hists, struct hist_entry *h)
@@ -677,15 +677,16 @@ static size_t callchain__fprintf_flat(FILE *fp, struct callchain_node *self,
        return ret;
 }
 
-static size_t hist_entry_callchain__fprintf(FILE *fp, struct hist_entry *self,
-                                           u64 total_samples, int left_margin)
+static size_t hist_entry_callchain__fprintf(struct hist_entry *he,
+                                           u64 total_samples, int left_margin,
+                                           FILE *fp)
 {
        struct rb_node *rb_node;
        struct callchain_node *chain;
        size_t ret = 0;
        u32 entries_printed = 0;
 
-       rb_node = rb_first(&self->sorted_chain);
+       rb_node = rb_first(&he->sorted_chain);
        while (rb_node) {
                double percent;
 
@@ -730,35 +731,35 @@ void hists__output_recalc_col_len(struct hists *hists, int max_rows)
        }
 }
 
-static int hist_entry__pcnt_snprintf(struct hist_entry *self, char *s,
+static int hist_entry__pcnt_snprintf(struct hist_entry *he, char *s,
                                     size_t size, struct hists *pair_hists,
                                     bool show_displacement, long displacement,
-                                    bool color, u64 session_total)
+                                    bool color, u64 total_period)
 {
        u64 period, total, period_sys, period_us, period_guest_sys, period_guest_us;
        u64 nr_events;
        const char *sep = symbol_conf.field_sep;
        int ret;
 
-       if (symbol_conf.exclude_other && !self->parent)
+       if (symbol_conf.exclude_other && !he->parent)
                return 0;
 
        if (pair_hists) {
-               period = self->pair ? self->pair->period : 0;
-               nr_events = self->pair ? self->pair->nr_events : 0;
+               period = he->pair ? he->pair->period : 0;
+               nr_events = he->pair ? he->pair->nr_events : 0;
                total = pair_hists->stats.total_period;
-               period_sys = self->pair ? self->pair->period_sys : 0;
-               period_us = self->pair ? self->pair->period_us : 0;
-               period_guest_sys = self->pair ? self->pair->period_guest_sys : 0;
-               period_guest_us = self->pair ? self->pair->period_guest_us : 0;
+               period_sys = he->pair ? he->pair->period_sys : 0;
+               period_us = he->pair ? he->pair->period_us : 0;
+               period_guest_sys = he->pair ? he->pair->period_guest_sys : 0;
+               period_guest_us = he->pair ? he->pair->period_guest_us : 0;
        } else {
-               period = self->period;
-               nr_events = self->nr_events;
-               total = session_total;
-               period_sys = self->period_sys;
-               period_us = self->period_us;
-               period_guest_sys = self->period_guest_sys;
-               period_guest_us = self->period_guest_us;
+               period = he->period;
+               nr_events = he->nr_events;
+               total = total_period;
+               period_sys = he->period_sys;
+               period_us = he->period_us;
+               period_guest_sys = he->period_guest_sys;
+               period_guest_us = he->period_guest_us;
        }
 
        if (total) {
@@ -812,8 +813,8 @@ static int hist_entry__pcnt_snprintf(struct hist_entry *self, char *s,
 
                if (total > 0)
                        old_percent = (period * 100.0) / total;
-               if (session_total > 0)
-                       new_percent = (self->period * 100.0) / session_total;
+               if (total_period > 0)
+                       new_percent = (he->period * 100.0) / total_period;
 
                diff = new_percent - old_percent;
 
@@ -862,9 +863,10 @@ int hist_entry__snprintf(struct hist_entry *he, char *s, size_t size,
        return ret;
 }
 
-int hist_entry__fprintf(struct hist_entry *he, size_t size, struct hists *hists,
-                       struct hists *pair_hists, bool show_displacement,
-                       long displacement, FILE *fp, u64 session_total)
+static int hist_entry__fprintf(struct hist_entry *he, size_t size,
+                              struct hists *hists, struct hists *pair_hists,
+                              bool show_displacement, long displacement,
+                              u64 total_period, FILE *fp)
 {
        char bf[512];
        int ret;
@@ -874,14 +876,14 @@ int hist_entry__fprintf(struct hist_entry *he, size_t size, struct hists *hists,
 
        ret = hist_entry__pcnt_snprintf(he, bf, size, pair_hists,
                                        show_displacement, displacement,
-                                       true, session_total);
+                                       true, total_period);
        hist_entry__snprintf(he, bf + ret, size - ret, hists);
        return fprintf(fp, "%s\n", bf);
 }
 
-static size_t hist_entry__fprintf_callchain(struct hist_entry *self,
-                                           struct hists *hists, FILE *fp,
-                                           u64 session_total)
+static size_t hist_entry__fprintf_callchain(struct hist_entry *he,
+                                           struct hists *hists,
+                                           u64 total_period, FILE *fp)
 {
        int left_margin = 0;
 
@@ -889,11 +891,10 @@ static size_t hist_entry__fprintf_callchain(struct hist_entry *self,
                struct sort_entry *se = list_first_entry(&hist_entry__sort_list,
                                                         typeof(*se), list);
                left_margin = hists__col_len(hists, se->se_width_idx);
-               left_margin -= thread__comm_len(self->thread);
+               left_margin -= thread__comm_len(he->thread);
        }
 
-       return hist_entry_callchain__fprintf(fp, self, session_total,
-                                            left_margin);
+       return hist_entry_callchain__fprintf(he, total_period, left_margin, fp);
 }
 
 size_t hists__fprintf(struct hists *hists, struct hists *pair,
@@ -903,6 +904,7 @@ size_t hists__fprintf(struct hists *hists, struct hists *pair,
        struct sort_entry *se;
        struct rb_node *nd;
        size_t ret = 0;
+       u64 total_period;
        unsigned long position = 1;
        long displacement = 0;
        unsigned int width;
@@ -917,20 +919,6 @@ size_t hists__fprintf(struct hists *hists, struct hists *pair,
 
        fprintf(fp, "# %s", pair ? "Baseline" : "Overhead");
 
-       if (symbol_conf.show_nr_samples) {
-               if (sep)
-                       fprintf(fp, "%cSamples", *sep);
-               else
-                       fputs("  Samples  ", fp);
-       }
-
-       if (symbol_conf.show_total_period) {
-               if (sep)
-                       ret += fprintf(fp, "%cPeriod", *sep);
-               else
-                       ret += fprintf(fp, "   Period    ");
-       }
-
        if (symbol_conf.show_cpu_utilization) {
                if (sep) {
                        ret += fprintf(fp, "%csys", *sep);
@@ -940,8 +928,8 @@ size_t hists__fprintf(struct hists *hists, struct hists *pair,
                                ret += fprintf(fp, "%cguest us", *sep);
                        }
                } else {
-                       ret += fprintf(fp, "  sys  ");
-                       ret += fprintf(fp, "  us  ");
+                       ret += fprintf(fp, "     sys  ");
+                       ret += fprintf(fp, "      us  ");
                        if (perf_guest) {
                                ret += fprintf(fp, "  guest sys  ");
                                ret += fprintf(fp, "  guest us  ");
@@ -949,6 +937,20 @@ size_t hists__fprintf(struct hists *hists, struct hists *pair,
                }
        }
 
+       if (symbol_conf.show_nr_samples) {
+               if (sep)
+                       fprintf(fp, "%cSamples", *sep);
+               else
+                       fputs("  Samples  ", fp);
+       }
+
+       if (symbol_conf.show_total_period) {
+               if (sep)
+                       ret += fprintf(fp, "%cPeriod", *sep);
+               else
+                       ret += fprintf(fp, "   Period    ");
+       }
+
        if (pair) {
                if (sep)
                        ret += fprintf(fp, "%cDelta", *sep);
@@ -993,6 +995,8 @@ size_t hists__fprintf(struct hists *hists, struct hists *pair,
                goto print_entries;
 
        fprintf(fp, "# ........");
+       if (symbol_conf.show_cpu_utilization)
+               fprintf(fp, "   .......   .......");
        if (symbol_conf.show_nr_samples)
                fprintf(fp, " ..........");
        if (symbol_conf.show_total_period)
@@ -1025,6 +1029,8 @@ size_t hists__fprintf(struct hists *hists, struct hists *pair,
                goto out;
 
 print_entries:
+       total_period = hists->stats.total_period;
+
        for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
                struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
 
@@ -1040,11 +1046,10 @@ print_entries:
                        ++position;
                }
                ret += hist_entry__fprintf(h, max_cols, hists, pair, show_displacement,
-                                          displacement, fp, hists->stats.total_period);
+                                          displacement, total_period, fp);
 
                if (symbol_conf.use_callchain)
-                       ret += hist_entry__fprintf_callchain(h, hists, fp,
-                                                            hists->stats.total_period);
+                       ret += hist_entry__fprintf_callchain(h, hists, total_period, fp);
                if (max_rows && ++nr_rows >= max_rows)
                        goto out;