From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754920AbbKCIlB (ORCPT ); Tue, 3 Nov 2015 03:41:01 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57729 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752179AbbKCIk7 (ORCPT ); Tue, 3 Nov 2015 03:40:59 -0500 Date: Tue, 3 Nov 2015 09:40:55 +0100 From: Jiri Olsa To: Namhyung Kim Cc: Arnaldo Carvalho de Melo , Ingo Molnar , Peter Zijlstra , LKML , Brendan Gregg , David Ahern , Frederic Weisbecker , Andi Kleen , Kan Liang Subject: Re: [PATCH v3 2/4] perf callchain: Abstract callchain print function Message-ID: <20151103084055.GH23878@krava.brq.redhat.com> References: <1446535111-31713-1-git-send-email-namhyung@kernel.org> <1446535111-31713-3-git-send-email-namhyung@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1446535111-31713-3-git-send-email-namhyung@kernel.org> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 03, 2015 at 04:18:29PM +0900, Namhyung Kim wrote: SNIP > while (rb_node) { > - double percent; > - > chain = rb_entry(rb_node, struct callchain_node, rb_node); > - percent = chain->hit * 100.0 / total_samples; > > - ret = percent_color_fprintf(fp, " %6.2f%%\n", percent); > + ret += fprintf(fp, " "); > + ret += callchain_node__fprintf_value(chain, fp, total_samples); > + ret += fprintf(fp, "\n"); > ret += __callchain__fprintf_flat(fp, chain, total_samples); > ret += fprintf(fp, "\n"); > if (++entries_printed == callchain_param.print_limit) > @@ -294,12 +294,11 @@ static size_t callchain__fprintf_folded(FILE *fp, struct rb_root *tree, > struct rb_node *rb_node = rb_first(tree); > > while (rb_node) { > - double percent; > > chain = rb_entry(rb_node, struct callchain_node, rb_node); > - percent = chain->hit * 100.0 / total_samples; > > - ret += fprintf(fp, "%.2f%% ", percent); > + ret += callchain_node__fprintf_value(chain, fp, total_samples); > + ret += fprintf(fp, " "); hum, the callchain_node__fprintf_value gets hits as callchain_cumul_hits(node) which is 'node->hit + node->children_hit' while the replaced code took only 'chain->hit' not sure now which one we actualy want here.. jirka > ret += __callchain__fprintf_folded(fp, chain); > ret += fprintf(fp, "\n"); > if (++entries_printed == callchain_param.print_limit) > diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c > index 08cb220ba5ea..44184d198855 100644 > --- a/tools/perf/util/callchain.c > +++ b/tools/perf/util/callchain.c > @@ -805,6 +805,31 @@ char *callchain_list__sym_name(struct callchain_list *cl, > return bf; > } > > +char *callchain_node__sprintf_value(struct callchain_node *node, > + char *bf, size_t bfsize, u64 total) > +{ > + double percent = 0.0; > + u64 cumul = callchain_cumul_hits(node); > + > + if (total) > + percent = cumul * 100.0 / total; > + > + scnprintf(bf, bfsize, "%6.2f%%", percent); > + return bf; > +} > + > +int callchain_node__fprintf_value(struct callchain_node *node, > + FILE *fp, u64 total) > +{ > + double percent = 0.0; > + u64 cumul = callchain_cumul_hits(node); > + > + if (total) > + percent = cumul * 100.0 / total; > + > + return percent_color_fprintf(fp, "%.2f%%", percent); > +} SNIP