}
 }
 
-int hist_entry__snprintf(struct hist_entry *self, char *s, size_t size,
-                        struct hists *hists, struct hists *pair_hists,
-                        bool show_displacement, long displacement,
-                        bool color, u64 session_total)
+static int hist_entry__pcnt_snprintf(struct hist_entry *self, char *s,
+                                    size_t size, struct hists *pair_hists,
+                                    bool show_displacement, long displacement,
+                                    bool color, u64 session_total)
 {
-       struct sort_entry *se;
        u64 period, total, period_sys, period_us, period_guest_sys, period_guest_us;
        u64 nr_events;
        const char *sep = symbol_conf.field_sep;
                }
        }
 
+       return ret;
+}
+
+int hist_entry__snprintf(struct hist_entry *he, char *s, size_t size,
+                        struct hists *hists)
+{
+       const char *sep = symbol_conf.field_sep;
+       struct sort_entry *se;
+       int ret = 0;
+
        list_for_each_entry(se, &hist_entry__sort_list, list) {
                if (se->elide)
                        continue;
 
                ret += snprintf(s + ret, size - ret, "%s", sep ?: "  ");
-               ret += se->se_snprintf(self, s + ret, size - ret,
+               ret += se->se_snprintf(he, s + ret, size - ret,
                                       hists__col_len(hists, se->se_width_idx));
        }
 
                        long displacement, FILE *fp, u64 session_total)
 {
        char bf[512];
+       int ret;
 
        if (size == 0 || size > sizeof(bf))
                size = sizeof(bf);
 
-       hist_entry__snprintf(he, bf, size, hists, pair_hists,
-                            show_displacement, displacement,
-                            true, session_total);
+       ret = hist_entry__pcnt_snprintf(he, bf, size, pair_hists,
+                                       show_displacement, displacement,
+                                       true, session_total);
+       hist_entry__snprintf(he, bf + ret, size - ret, hists);
        return fprintf(fp, "%s\n", bf);
 }
 
 
                        struct hists *pair_hists, bool show_displacement,
                        long displacement, FILE *fp, u64 session_total);
 int hist_entry__snprintf(struct hist_entry *self, char *bf, size_t size,
-                        struct hists *hists, struct hists *pair_hists,
-                        bool show_displacement, long displacement,
-                        bool color, u64 total);
+                        struct hists *hists);
 void hist_entry__free(struct hist_entry *);
 
 void hists__output_resort(struct hists *self);
 
        char s[256];
        double percent;
        int printed = 0;
-       int width = self->b.width;
+       int width = self->b.width - 6; /* The percentage */
        char folded_sign = ' ';
        bool current_entry = ui_browser__is_current_entry(&self->b, row);
        off_t row_offset = entry->row_offset;
        }
 
        if (row_offset == 0) {
-               hist_entry__snprintf(entry, s, sizeof(s), self->hists, NULL, false,
-                                    0, false, self->hists->stats.total_period);
+               hist_entry__snprintf(entry, s, sizeof(s), self->hists);
                percent = (entry->period * 100.0) / self->hists->stats.total_period;
 
                ui_browser__set_percent_color(&self->b, percent, current_entry);
                        width -= 2;
                }
 
+               slsmg_printf(" %5.2f%%", percent);
+
                /* The scroll bar isn't being used */
                if (!self->b.navkeypressed)
                        width += 1;