perf hists: Add support for showing relative percentage
When filtering by thread, dso or symbol on TUI it also update total period so that the output shows different result than no filter - the percentage changed to relative to filtered entries only. Sometimes this is not desired since users might expect same results with filter. So new filtered_* fields to hists->stats to count them separately. They'll be controlled/used by user later. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/1397145720-8063-2-git-send-email-namhyung@kernel.org Signed-off-by: Jiri Olsa <jolsa@redhat.com>
This commit is contained in:
@@ -674,8 +674,8 @@ void hists__output_resort(struct hists *hists)
|
||||
next = rb_first(root);
|
||||
hists->entries = RB_ROOT;
|
||||
|
||||
hists->nr_entries = 0;
|
||||
hists->stats.total_period = 0;
|
||||
hists->nr_entries = hists->nr_non_filtered_entries = 0;
|
||||
hists->stats.total_period = hists->stats.total_non_filtered_period = 0;
|
||||
hists__reset_col_len(hists);
|
||||
|
||||
while (next) {
|
||||
@@ -695,11 +695,16 @@ static void hists__remove_entry_filter(struct hists *hists, struct hist_entry *h
|
||||
return;
|
||||
|
||||
++hists->nr_entries;
|
||||
if (h->ms.unfolded)
|
||||
++hists->nr_non_filtered_entries;
|
||||
if (h->ms.unfolded) {
|
||||
hists->nr_entries += h->nr_rows;
|
||||
hists->nr_non_filtered_entries += h->nr_rows;
|
||||
}
|
||||
h->row_offset = 0;
|
||||
hists->stats.total_period += h->stat.period;
|
||||
hists->stats.total_non_filtered_period += h->stat.period;
|
||||
hists->stats.nr_events[PERF_RECORD_SAMPLE] += h->stat.nr_events;
|
||||
hists->stats.nr_non_filtered_samples += h->stat.nr_events;
|
||||
|
||||
hists__calc_col_len(hists, h);
|
||||
}
|
||||
@@ -722,7 +727,9 @@ void hists__filter_by_dso(struct hists *hists)
|
||||
struct rb_node *nd;
|
||||
|
||||
hists->nr_entries = hists->stats.total_period = 0;
|
||||
hists->nr_non_filtered_entries = hists->stats.total_non_filtered_period = 0;
|
||||
hists->stats.nr_events[PERF_RECORD_SAMPLE] = 0;
|
||||
hists->stats.nr_non_filtered_samples = 0;
|
||||
hists__reset_col_len(hists);
|
||||
|
||||
for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
|
||||
@@ -755,7 +762,9 @@ void hists__filter_by_thread(struct hists *hists)
|
||||
struct rb_node *nd;
|
||||
|
||||
hists->nr_entries = hists->stats.total_period = 0;
|
||||
hists->nr_non_filtered_entries = hists->stats.total_non_filtered_period = 0;
|
||||
hists->stats.nr_events[PERF_RECORD_SAMPLE] = 0;
|
||||
hists->stats.nr_non_filtered_samples = 0;
|
||||
hists__reset_col_len(hists);
|
||||
|
||||
for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
|
||||
@@ -786,7 +795,9 @@ void hists__filter_by_symbol(struct hists *hists)
|
||||
struct rb_node *nd;
|
||||
|
||||
hists->nr_entries = hists->stats.total_period = 0;
|
||||
hists->nr_non_filtered_entries = hists->stats.total_non_filtered_period = 0;
|
||||
hists->stats.nr_events[PERF_RECORD_SAMPLE] = 0;
|
||||
hists->stats.nr_non_filtered_samples = 0;
|
||||
hists__reset_col_len(hists);
|
||||
|
||||
for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
|
||||
|
Reference in New Issue
Block a user