From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965218AbcATWTN (ORCPT ); Wed, 20 Jan 2016 17:19:13 -0500 Received: from mail.kernel.org ([198.145.29.136]:37018 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965061AbcATWTH (ORCPT ); Wed, 20 Jan 2016 17:19:07 -0500 Date: Wed, 20 Jan 2016 19:19:03 -0300 From: Arnaldo Carvalho de Melo To: Namhyung Kim Cc: Ingo Molnar , Peter Zijlstra , Jiri Olsa , LKML , David Ahern , Stephane Eranian , Andi Kleen , Wang Nan Subject: Re: [PATCH 03/17] perf hists: Add helper functions for hierarchy mode Message-ID: <20160120221903.GK18367@kernel.org> References: <1452960197-5323-1-git-send-email-namhyung@kernel.org> <1452960197-5323-4-git-send-email-namhyung@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1452960197-5323-4-git-send-email-namhyung@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Sun, Jan 17, 2016 at 01:03:03AM +0900, Namhyung Kim escreveu: > The rb_hierarchy_{first,last,next,prev} functions are to traverse all > hist entries in a hierarchy. They will be used by various function > which supports hierarchy output. > > Signed-off-by: Namhyung Kim > --- > tools/perf/util/hist.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ > tools/perf/util/hist.h | 9 +++++++++ > 2 files changed, 59 insertions(+) > > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c > index 931353f49c72..9354455aec5b 100644 > --- a/tools/perf/util/hist.c > +++ b/tools/perf/util/hist.c > @@ -1390,6 +1390,56 @@ void hists__output_resort(struct hists *hists, struct ui_progress *prog) > } > } > > +struct rb_node *rb_hierarchy_first(struct rb_node *node) > +{ > + return node; > +} rb_hierarchy_first() is not used in this patchkit, you end up starting from rb_first(&hists->entries), so I guess we can remove this one, if you ever need it, then reintroduce it. - Arnaldo > + > +struct rb_node *rb_hierarchy_last(struct rb_node *node) > +{ > + struct hist_entry *he = rb_entry(node, struct hist_entry, rb_node); > + > + while (he->unfolded && !he->leaf) { > + node = rb_last(&he->hroot_out); > + he = rb_entry(node, struct hist_entry, rb_node); > + } > + return node; > +} > + > +struct rb_node *rb_hierarchy_next(struct rb_node *node) > +{ > + struct hist_entry *he = rb_entry(node, struct hist_entry, rb_node); > + > + if (!he->leaf && he->unfolded) > + node = rb_first(&he->hroot_out); > + else > + node = rb_next(node); > + > + while (node == NULL) { > + he = he->parent_he; > + if (he == NULL) > + break; > + > + node = rb_next(&he->rb_node); > + } > + return node; > +} > + > +struct rb_node *rb_hierarchy_prev(struct rb_node *node) > +{ > + struct hist_entry *he = rb_entry(node, struct hist_entry, rb_node); > + > + node = rb_prev(node); > + if (node) > + return rb_hierarchy_last(node); > + > + he = he->parent_he; > + if (he == NULL) > + return NULL; > + > + return &he->rb_node; > +} > + > static void hists__remove_entry_filter(struct hists *hists, struct hist_entry *h, > enum hist_filter filter) > { > diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h > index d4ec4822a103..96b7ff817d3e 100644 > --- a/tools/perf/util/hist.h > +++ b/tools/perf/util/hist.h > @@ -381,4 +381,13 @@ int parse_filter_percentage(const struct option *opt __maybe_unused, > const char *arg, int unset __maybe_unused); > int perf_hist_config(const char *var, const char *value); > > +#define HIERARCHY_INDENT 3 > + > +int perf_hpp__count_sort_keys(void); > + > +struct rb_node *rb_hierarchy_first(struct rb_node *node); > +struct rb_node *rb_hierarchy_last(struct rb_node *node); > +struct rb_node *rb_hierarchy_next(struct rb_node *node); > +struct rb_node *rb_hierarchy_prev(struct rb_node *node); > + > #endif /* __PERF_HIST_H */ > -- > 2.6.4