From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756886AbcAUD7P (ORCPT ); Wed, 20 Jan 2016 22:59:15 -0500 Received: from LGEAMRELO12.lge.com ([156.147.23.52]:46615 "EHLO lgeamrelo12.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755364AbcAUD7M (ORCPT ); Wed, 20 Jan 2016 22:59:12 -0500 X-Original-SENDERIP: 156.147.1.127 X-Original-MAILFROM: namhyung@kernel.org X-Original-SENDERIP: 165.244.98.203 X-Original-MAILFROM: namhyung@kernel.org X-Original-SENDERIP: 10.177.227.17 X-Original-MAILFROM: namhyung@kernel.org Date: Thu, 21 Jan 2016 12:59:07 +0900 From: Namhyung Kim To: Arnaldo Carvalho de Melo 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: <20160121035907.GA10179@sejong> References: <1452960197-5323-1-git-send-email-namhyung@kernel.org> <1452960197-5323-4-git-send-email-namhyung@kernel.org> <20160120221903.GK18367@kernel.org> MIME-Version: 1.0 In-Reply-To: <20160120221903.GK18367@kernel.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-MIMETrack: Itemize by SMTP Server on LGEKRMHUB02/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/01/21 12:59:07, Serialize by Router on LGEKRMHUB02/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/01/21 12:59:07, Serialize complete at 2016/01/21 12:59:07 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Arnaldo, On Wed, Jan 20, 2016 at 07:19:03PM -0300, Arnaldo Carvalho de Melo wrote: > 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. Right. I firstly thought it might be needed, but it's not. Will remove. Thanks, Namhyung > > + > > +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