static void hist_browser__update_nr_entries(struct hist_browser *hb);
 
 static struct rb_node *hists__filter_entries(struct rb_node *nd,
-                                            struct hists *hists,
                                             float min_pcnt);
 
 static bool hist_browser__has_filter(struct hist_browser *hb)
        struct hists *hists = browser->hists;
 
        for (nd = rb_first(&hists->entries);
-            (nd = hists__filter_entries(nd, hists, browser->min_pcnt)) != NULL;
+            (nd = hists__filter_entries(nd, browser->min_pcnt)) != NULL;
             nd = rb_next(nd)) {
                struct hist_entry *he = rb_entry(nd, struct hist_entry, rb_node);
                hist_entry__set_folding(he, unfold);
 
        for (nd = browser->top; nd; nd = rb_next(nd)) {
                struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
-               u64 total = hists__total_period(h->hists);
-               float percent = 0.0;
+               float percent;
 
                if (h->filtered)
                        continue;
 
-               if (total)
-                       percent = h->stat.period * 100.0 / total;
-
+               percent = hist_entry__get_percent_limit(h);
                if (percent < hb->min_pcnt)
                        continue;
 
 }
 
 static struct rb_node *hists__filter_entries(struct rb_node *nd,
-                                            struct hists *hists,
                                             float min_pcnt)
 {
        while (nd != NULL) {
                struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
-               u64 total = hists__total_period(hists);
-               float percent = 0.0;
-
-               if (total)
-                       percent = h->stat.period * 100.0 / total;
+               float percent = hist_entry__get_percent_limit(h);
 
                if (!h->filtered && percent >= min_pcnt)
                        return nd;
 }
 
 static struct rb_node *hists__filter_prev_entries(struct rb_node *nd,
-                                                 struct hists *hists,
                                                  float min_pcnt)
 {
        while (nd != NULL) {
                struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
-               u64 total = hists__total_period(hists);
-               float percent = 0.0;
-
-               if (total)
-                       percent = h->stat.period * 100.0 / total;
+               float percent = hist_entry__get_percent_limit(h);
 
                if (!h->filtered && percent >= min_pcnt)
                        return nd;
        switch (whence) {
        case SEEK_SET:
                nd = hists__filter_entries(rb_first(browser->entries),
-                                          hb->hists, hb->min_pcnt);
+                                          hb->min_pcnt);
                break;
        case SEEK_CUR:
                nd = browser->top;
                goto do_offset;
        case SEEK_END:
                nd = hists__filter_prev_entries(rb_last(browser->entries),
-                                               hb->hists, hb->min_pcnt);
+                                               hb->min_pcnt);
                first = false;
                break;
        default:
                                        break;
                                }
                        }
-                       nd = hists__filter_entries(rb_next(nd), hb->hists,
-                                                  hb->min_pcnt);
+                       nd = hists__filter_entries(rb_next(nd), hb->min_pcnt);
                        if (nd == NULL)
                                break;
                        --offset;
                                }
                        }
 
-                       nd = hists__filter_prev_entries(rb_prev(nd), hb->hists,
+                       nd = hists__filter_prev_entries(rb_prev(nd),
                                                        hb->min_pcnt);
                        if (nd == NULL)
                                break;
 static int hist_browser__fprintf(struct hist_browser *browser, FILE *fp)
 {
        struct rb_node *nd = hists__filter_entries(rb_first(browser->b.entries),
-                                                  browser->hists,
                                                   browser->min_pcnt);
        int printed = 0;
 
                struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
 
                printed += hist_browser__fprintf_entry(browser, h, fp);
-               nd = hists__filter_entries(rb_next(nd), browser->hists,
-                                          browser->min_pcnt);
+               nd = hists__filter_entries(rb_next(nd), browser->min_pcnt);
        }
 
        return printed;
                return;
        }
 
-       while ((nd = hists__filter_entries(nd, hb->hists,
-                                          hb->min_pcnt)) != NULL) {
+       while ((nd = hists__filter_entries(nd, hb->min_pcnt)) != NULL) {
                nr_entries++;
                nd = rb_next(nd);
        }