diff options
-rw-r--r-- | tools/perf/builtin-top.c | 23 | ||||
-rw-r--r-- | tools/perf/util/hist.c | 22 | ||||
-rw-r--r-- | tools/perf/util/hist.h | 1 |
3 files changed, 40 insertions, 6 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 4b0e15c2b2a8..87a6615a40fa 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -276,11 +276,17 @@ static void perf_top__print_sym_table(struct perf_top *top) | |||
276 | return; | 276 | return; |
277 | } | 277 | } |
278 | 278 | ||
279 | if (top->zero) { | ||
280 | hists__delete_entries(&top->sym_evsel->hists); | ||
281 | } else { | ||
282 | hists__decay_entries(&top->sym_evsel->hists, | ||
283 | top->hide_user_symbols, | ||
284 | top->hide_kernel_symbols); | ||
285 | } | ||
286 | |||
279 | hists__collapse_resort(&top->sym_evsel->hists, NULL); | 287 | hists__collapse_resort(&top->sym_evsel->hists, NULL); |
280 | hists__output_resort(&top->sym_evsel->hists); | 288 | hists__output_resort(&top->sym_evsel->hists); |
281 | hists__decay_entries(&top->sym_evsel->hists, | 289 | |
282 | top->hide_user_symbols, | ||
283 | top->hide_kernel_symbols); | ||
284 | hists__output_recalc_col_len(&top->sym_evsel->hists, | 290 | hists__output_recalc_col_len(&top->sym_evsel->hists, |
285 | top->print_entries - printed); | 291 | top->print_entries - printed); |
286 | putchar('\n'); | 292 | putchar('\n'); |
@@ -542,11 +548,16 @@ static void perf_top__sort_new_samples(void *arg) | |||
542 | if (t->evlist->selected != NULL) | 548 | if (t->evlist->selected != NULL) |
543 | t->sym_evsel = t->evlist->selected; | 549 | t->sym_evsel = t->evlist->selected; |
544 | 550 | ||
551 | if (t->zero) { | ||
552 | hists__delete_entries(&t->sym_evsel->hists); | ||
553 | } else { | ||
554 | hists__decay_entries(&t->sym_evsel->hists, | ||
555 | t->hide_user_symbols, | ||
556 | t->hide_kernel_symbols); | ||
557 | } | ||
558 | |||
545 | hists__collapse_resort(&t->sym_evsel->hists, NULL); | 559 | hists__collapse_resort(&t->sym_evsel->hists, NULL); |
546 | hists__output_resort(&t->sym_evsel->hists); | 560 | hists__output_resort(&t->sym_evsel->hists); |
547 | hists__decay_entries(&t->sym_evsel->hists, | ||
548 | t->hide_user_symbols, | ||
549 | t->hide_kernel_symbols); | ||
550 | } | 561 | } |
551 | 562 | ||
552 | static void *display_thread_tui(void *arg) | 563 | static void *display_thread_tui(void *arg) |
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 30df6187ee02..86569fa3651d 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c | |||
@@ -277,6 +277,28 @@ void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel) | |||
277 | } | 277 | } |
278 | } | 278 | } |
279 | 279 | ||
280 | void hists__delete_entries(struct hists *hists) | ||
281 | { | ||
282 | struct rb_node *next = rb_first(&hists->entries); | ||
283 | struct hist_entry *n; | ||
284 | |||
285 | while (next) { | ||
286 | n = rb_entry(next, struct hist_entry, rb_node); | ||
287 | next = rb_next(&n->rb_node); | ||
288 | |||
289 | rb_erase(&n->rb_node, &hists->entries); | ||
290 | |||
291 | if (sort__need_collapse) | ||
292 | rb_erase(&n->rb_node_in, &hists->entries_collapsed); | ||
293 | |||
294 | --hists->nr_entries; | ||
295 | if (!n->filtered) | ||
296 | --hists->nr_non_filtered_entries; | ||
297 | |||
298 | hist_entry__free(n); | ||
299 | } | ||
300 | } | ||
301 | |||
280 | /* | 302 | /* |
281 | * histogram, sorted on item, collects periods | 303 | * histogram, sorted on item, collects periods |
282 | */ | 304 | */ |
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 95405a8fbd95..8c9c70e18cbb 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h | |||
@@ -152,6 +152,7 @@ void hists__output_resort(struct hists *hists); | |||
152 | void hists__collapse_resort(struct hists *hists, struct ui_progress *prog); | 152 | void hists__collapse_resort(struct hists *hists, struct ui_progress *prog); |
153 | 153 | ||
154 | void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel); | 154 | void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel); |
155 | void hists__delete_entries(struct hists *hists); | ||
155 | void hists__output_recalc_col_len(struct hists *hists, int max_rows); | 156 | void hists__output_recalc_col_len(struct hists *hists, int max_rows); |
156 | 157 | ||
157 | u64 hists__total_period(struct hists *hists); | 158 | u64 hists__total_period(struct hists *hists); |