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/

Reply via email to