On Tue, Aug 12, 2014 at 10:16 AM, Namhyung Kim <namhy...@kernel.org> wrote: > The current -z option does almost nothing. It doesn't zero the > existing samples so that we can see profiles of exited process after > last refresh. It seems it only affects annotation. > > This patch clears existing entries before processing if -z option is > given. For this original decaying logic also moved before processing. > Works for me now in TUI and stdio modes. Thanks for fixing this quickly.
Tested-by: Stephane Eranian <eran...@google.com> > Reported-by: Stephane Eranian <eran...@google.com> > Signed-off-by: Namhyung Kim <namhy...@kernel.org> > --- > tools/perf/builtin-top.c | 23 +++++++++++++++++------ > tools/perf/util/hist.c | 22 ++++++++++++++++++++++ > 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 4fb6f726271c..e486501b2067 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) > return; > } > > + if (top->zero) { > + hists__delete_entries(&top->sym_evsel->hists); > + } else { > + hists__decay_entries(&top->sym_evsel->hists, > + top->hide_user_symbols, > + top->hide_kernel_symbols); > + } > + > hists__collapse_resort(&top->sym_evsel->hists, NULL); > hists__output_resort(&top->sym_evsel->hists); > - hists__decay_entries(&top->sym_evsel->hists, > - top->hide_user_symbols, > - top->hide_kernel_symbols); > + > hists__output_recalc_col_len(&top->sym_evsel->hists, > top->print_entries - printed); > putchar('\n'); > @@ -542,11 +548,16 @@ static void perf_top__sort_new_samples(void *arg) > if (t->evlist->selected != NULL) > t->sym_evsel = t->evlist->selected; > > + if (t->zero) { > + hists__delete_entries(&t->sym_evsel->hists); > + } else { > + hists__decay_entries(&t->sym_evsel->hists, > + t->hide_user_symbols, > + t->hide_kernel_symbols); > + } > + > hists__collapse_resort(&t->sym_evsel->hists, NULL); > hists__output_resort(&t->sym_evsel->hists); > - hists__decay_entries(&t->sym_evsel->hists, > - t->hide_user_symbols, > - t->hide_kernel_symbols); > } > > 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) > } > } > > +void hists__delete_entries(struct hists *hists) > +{ > + struct rb_node *next = rb_first(&hists->entries); > + struct hist_entry *n; > + > + while (next) { > + n = rb_entry(next, struct hist_entry, rb_node); > + next = rb_next(&n->rb_node); > + > + rb_erase(&n->rb_node, &hists->entries); > + > + if (sort__need_collapse) > + rb_erase(&n->rb_node_in, &hists->entries_collapsed); > + > + --hists->nr_entries; > + if (!n->filtered) > + --hists->nr_non_filtered_entries; > + > + hist_entry__free(n); > + } > +} > + > /* > * histogram, sorted on item, collects periods > */ > 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); > void hists__collapse_resort(struct hists *hists, struct ui_progress *prog); > > void hists__decay_entries(struct hists *hists, bool zap_user, bool > zap_kernel); > +void hists__delete_entries(struct hists *hists); > void hists__output_recalc_col_len(struct hists *hists, int max_rows); > > u64 hists__total_period(struct hists *hists); > -- > 2.0.0 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/