perf hists: Fix recalculation of total_period when sorting entries

We were doing parts of it in hists__collapse_resort and parts of it in
hists__output_resort, leading to a bogus total_period.

Fix it by doing just the filtering operation when collapsing because
there we know that the Zoom operations adds filters just  what is in
hists->entries, not to the new batch of entries being collapsed.

And move all the nr_entries + total_period recalculation to
hists__output_resort since we will traverse all entries anyway there.

Problem introduced when developing threaded addition of new batches
of hist_entries, i.e. post v3.1.
Reported-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-8xyh165h7hmwy0696hu25en6@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent a9072bc0
...@@ -365,7 +365,6 @@ static void __hists__collapse_resort(struct hists *hists, bool threaded) ...@@ -365,7 +365,6 @@ static void __hists__collapse_resort(struct hists *hists, bool threaded)
root = hists__get_rotate_entries_in(hists); root = hists__get_rotate_entries_in(hists);
next = rb_first(root); next = rb_first(root);
hists->stats.total_period = 0;
while (next) { while (next) {
n = rb_entry(next, struct hist_entry, rb_node_in); n = rb_entry(next, struct hist_entry, rb_node_in);
...@@ -379,7 +378,6 @@ static void __hists__collapse_resort(struct hists *hists, bool threaded) ...@@ -379,7 +378,6 @@ static void __hists__collapse_resort(struct hists *hists, bool threaded)
* been set by, say, the hist_browser. * been set by, say, the hist_browser.
*/ */
hists__apply_filters(hists, n); hists__apply_filters(hists, n);
hists__inc_nr_entries(hists, n);
} }
} }
} }
...@@ -442,6 +440,7 @@ static void __hists__output_resort(struct hists *hists, bool threaded) ...@@ -442,6 +440,7 @@ static void __hists__output_resort(struct hists *hists, bool threaded)
hists->entries = RB_ROOT; hists->entries = RB_ROOT;
hists->nr_entries = 0; hists->nr_entries = 0;
hists->stats.total_period = 0;
hists__reset_col_len(hists); hists__reset_col_len(hists);
while (next) { while (next) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment