Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-04 Thread Namhyung Kim
Hi Arnaldo,

On Tue, 4 Dec 2012 10:50:49 -0300, Arnaldo Carvalho de Melo wrote:
> Em Tue, Dec 04, 2012 at 06:16:59PM +0900, Namhyung Kim escreveu:
>> On Fri, Nov 30, 2012 at 10:52 PM, Arnaldo Carvalho de Melo wrote:
>
>> Ah, I missed your point.  Just got it now, will try this approach.  So
>> you want to see no "0.00%" for a dummy entry, right?
>
> That wasn't the point, and perhaps printing 0.00% pollutes the screen
> needlessly or may be a help in seeing the columns more clearly, no
> strong opinion at this point, please experiment.
>
> The point was that there seems to be no need for the temporary array.

Yeah, it shows my really bad writing skill. :(

I meant I got your point of not using a temporary array.  And asked
additional question of your preference in a dummy entry.

Sorry for confusing you.

Btw, I found that printing 0.00% is useful for a case of field_sep and
GTK+ output.  So unless someone objects, I'll keep it.

Thanks,
Namhyung
--
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/


Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-04 Thread Arnaldo Carvalho de Melo
Em Tue, Dec 04, 2012 at 06:16:59PM +0900, Namhyung Kim escreveu:
> On Fri, Nov 30, 2012 at 10:52 PM, Arnaldo Carvalho de Melo wrote:

> Ah, I missed your point.  Just got it now, will try this approach.  So
> you want to see no "0.00%" for a dummy entry, right?

That wasn't the point, and perhaps printing 0.00% pollutes the screen
needlessly or may be a help in seeing the columns more clearly, no
strong opinion at this point, please experiment.

The point was that there seems to be no need for the temporary array.

- Arnaldo
--
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/


Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-04 Thread Namhyung Kim
On Fri, Nov 30, 2012 at 10:52 PM, Arnaldo Carvalho de Melo
 wrote:
> Em Fri, Nov 30, 2012 at 02:29:43PM +0100, Jiri Olsa escreveu:
>> On Thu, Nov 29, 2012 at 03:38:40PM +0900, Namhyung Kim wrote:
>> > +#define __HPP_COLOR_PERCENT_FN(_type, _field) 
>> >  \
>> > +static int hpp__color_##_type(struct perf_hpp *hpp, struct hist_entry 
>> > *he) \
>> > +{ 
>> >  \
>> > +   int ret;   
>> >  \
>> > +   double percent = 0.0;  
>> >  \
>> > +   struct hists *hists = he->hists;   
>> >  \
>> > +  
>> >  \
>> > +   if (hists->stats.total_period) 
>> >  \
>> > +   percent = 100.0 * he->stat._field / hists->stats.total_period; 
>> >  \
>> > +  
>> >  \
>> > +   ret = percent_color_snprintf(hpp->buf, hpp->size, " %6.2f%%", 
>> > percent); \
>> > +  
>> >  \
>> > +   if (symbol_conf.event_group) { 
>> >  \
>> > +   int i; 
>> >  \
>> > +   struct perf_evsel *evsel = hists_to_evsel(hists);  
>> >  \
>> > +   struct hist_entry *pair;   
>> >  \
>> > +   int nr_members = evsel->nr_members;
>> >  \
>> > +   double *percents;  
>> >  \
>> > +  
>> >  \
>> > +   if (nr_members <= 1)   
>> >  \
>> > +   return ret;
>> >  \
>> > +  
>> >  \
>> > +   percents = zalloc(sizeof(*percents) * nr_members); 
>> >  \
>> > +   if (percents == NULL) {
>> >  \
>> > +   pr_warning("Not enough memory!\n");
>> >  \
>> > +   return ret;
>> >  \
>> > +   }  
>> >  \
>
> Why do we need to zalloc this percents array?
>
>> > +   list_for_each_entry(pair, &he->pairs.head, pairs.node) {   
>> >  \
>> > +   u64 period = pair->stat._field;
>> >  \
>> > +   u64 total = pair->hists->stats.total_period;   
>> >  \
>> > +  
>> >  \
>> > +   if (!total)
>> >  \
>> > +   continue;  
>> >  \
>> > +  
>> >  \
>> > +   evsel = hists_to_evsel(pair->hists);   
>> >  \
>> > +   i = perf_evsel__group_idx(evsel);  
>> >  \
>> > +   percents[i] = 100.0 * period / total;  
>> >  \
>
> Why not use percent_color_snprintf here, using some "%*s" thing that
> uses i to position the output in the right column? This way the
> following loop can be ditched as well. No?
>
>> > +   }  
>> >  \
>> > +  
>> >  \
>> > +   for (i = 1; i < nr_members; i++) { 
>> >  \
>> > +   ret += percent_color_snprintf(hpp->buf + ret,  
>> >  \
>> > + hpp->size - ret, 
>> >  \
>> > + " %6.2f%%", 
>> > percents[i]); \
>> > +   }  
>> >  \
>> > +   free(percents);
>> >  \
>> > +   }  
>> >  \
>> > +   return ret;
>> >  \
>
> - Arnaldo

Ah, I missed your point.  Just got it now, will try this approach.  So
you want to see no "0.00%" for a dummy entry, right?

Thanks,
Namhyung
--
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 t

Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-03 Thread Namhyung Kim
On Mon, 3 Dec 2012 16:57:36 +0100, Jiri Olsa wrote:
> On Mon, Dec 03, 2012 at 07:39:31PM +0900, Namhyung Kim wrote:
>> On Mon, 3 Dec 2012 11:23:27 +0100, Jiri Olsa wrote:
>> > On Mon, Dec 03, 2012 at 10:56:28AM +0900, Namhyung Kim wrote:
>> >> On Fri, Nov 30, 2012 at 10:29 PM, Jiri Olsa  wrote:
>> >> > ok, so this is the part thats common for both multi diff and group
>> >> > report and hugely depends on how we link matching hist_entry
>
> SNIP
>
>> > we discussed with Arnaldo and decided to stay with current approach and
>> > make the change later if needed.. to be able to see/meassure the benefit
>> >
>> > I made some initial attempt to workaround this and it appears to be
>> > not that bad ;) I'll repost my changes shortly..
>> 
>> Hmm.. so are you OK with this patch now?
>
> yep, well except for following macros:
>
>   __HPP_COLOR_PERCENT_FN
>   __HPP_ENTRY_PERCENT_FN
>   __HPP_ENTRY_RAW_FN
>
> being so long.. any chance the main part of it being in function?
>
> Seems like '_type' is just in function name, but the '_field' might
> be the killer ;) maybe it could be 'used' in such function via PERF_HPP__*
> enums instead..?

Okay, I'll re-think about it tomorrow.

Thanks,
Namhyung
--
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/


Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-03 Thread Jiri Olsa
On Mon, Dec 03, 2012 at 07:39:31PM +0900, Namhyung Kim wrote:
> On Mon, 3 Dec 2012 11:23:27 +0100, Jiri Olsa wrote:
> > On Mon, Dec 03, 2012 at 10:56:28AM +0900, Namhyung Kim wrote:
> >> On Fri, Nov 30, 2012 at 10:29 PM, Jiri Olsa  wrote:
> >> > ok, so this is the part thats common for both multi diff and group
> >> > report and hugely depends on how we link matching hist_entry

SNIP

> > we discussed with Arnaldo and decided to stay with current approach and
> > make the change later if needed.. to be able to see/meassure the benefit
> >
> > I made some initial attempt to workaround this and it appears to be
> > not that bad ;) I'll repost my changes shortly..
> 
> Hmm.. so are you OK with this patch now?

yep, well except for following macros:

__HPP_COLOR_PERCENT_FN
__HPP_ENTRY_PERCENT_FN
__HPP_ENTRY_RAW_FN

being so long.. any chance the main part of it being in function?

Seems like '_type' is just in function name, but the '_field' might
be the killer ;) maybe it could be 'used' in such function via PERF_HPP__*
enums instead..?

thanks,
jirka
--
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/


Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-03 Thread Namhyung Kim
On Mon, 3 Dec 2012 11:23:27 +0100, Jiri Olsa wrote:
> On Mon, Dec 03, 2012 at 10:56:28AM +0900, Namhyung Kim wrote:
>> On Fri, Nov 30, 2012 at 10:29 PM, Jiri Olsa  wrote:
>> > ok, so this is the part thats common for both multi diff and group
>> > report and hugely depends on how we link matching hist_entry
>> >
>> > To sum to what group report does here:
>> >
>> > 1) starting with event group
>> > 2) the function 'he' belongs to leader hists
>> > 3) display leaders data value
>> > 4) if 'symbol_conf.event_group' is enabled, we want to display all
>> >group members data values in a column
>> > 5) say we have group of 3 events 'e1,e2,e3' and e1 being the leader,
>> >we have following possibilities:
>> >- e1 have no pairs
>> >- e1 is paired with e2
>> >- e1 is paired with e3
>> >- e1 is paired with e2 and e3 (e1 could also be dummy one)
>> > 6) need to display 3 values wrt to e1,e2,e3 output order
>> > 7) because events belongs to a group, each evsel carries group idx
>> > 8) so we walk all pairs and compute the eX value and put it
>> >into temporary array based on its group idx
>> > 9) finally we display all temporary array values
>> >
>> >
>> > To sum up what multi diff needs to do here:
>> >
>> > 1) starting with 3 separate matching events from different
>> >evlists(sessions)
>> > 2 - 5) are similar
>> > 6) need to display single diff value of hist_entry that
>> >belongs to evsel, that belongs to a column we are just
>> >displaying value for
>> > 7) events are not part of group; based on
>> >[PATCH 02/14] perf tool: Add struct perf_hpp_fmt into hpp callbacks
>> >we can tell what column we are in -> session -> evlist
>> > 8) we need to walk all pairs and for each hist_entry:
>> >- compare all evsels (from point 7 evlist)
>> >  and match hists pointer
>> >- when found, we have a matching hist_entry for this column
>> > 9) print out the value of matching hist_entry
>> >
>> >
>> > I think both this processing could be simplified by having hist_entry
>> > pairs connected via array and not linked list.
>> >
>> >
>> > For group report, each leader hist_entry would have 'pairs' array
>> > with the size of event group. Then we could omit the temporary array
>> > creation by:
>> >   - walking the leaders pairs
>> >   - when pair is found -> compute data -> display
>> >   - when pair is NULL  -> display 0
>> >
>> >
>> > For multi diff, each baseline hist_entry would have 'pairs' array
>> > with the size equal to number of data files on diff command input.
>> > This way we could use the data from point 7 to directly access
>> > related hist_entry.
>> >
>> >
>> > ufff... thoughts? ;-)
>> 
>> Nice summary, really! :)
>> 
>> Yeah, I do think it's better to use array for this.  If Arnaldo has no
>> objection to this approach, I'll convert my code to use the array.
>
> we discussed with Arnaldo and decided to stay with current approach and
> make the change later if needed.. to be able to see/meassure the benefit
>
> I made some initial attempt to workaround this and it appears to be
> not that bad ;) I'll repost my changes shortly..

Hmm.. so are you OK with this patch now?

Thanks,
Namhyung
--
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/


Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-03 Thread Jiri Olsa
On Mon, Dec 03, 2012 at 10:56:28AM +0900, Namhyung Kim wrote:
> Hi Jiri,
> 
> On Fri, Nov 30, 2012 at 10:29 PM, Jiri Olsa  wrote:
> > On Thu, Nov 29, 2012 at 03:38:40PM +0900, Namhyung Kim wrote:
> >
> > SNIP
> >
> >> +#define __HPP_COLOR_PERCENT_FN(_type, _field) 
> >>\
> >> +static int hpp__color_##_type(struct perf_hpp *hpp, struct hist_entry 
> >> *he)   \
> >> +{ 
> >>\
> >> + int ret; 
> >>\
> >> + double percent = 0.0;
> >>\
> >> + struct hists *hists = he->hists; 
> >>\
> >> +  
> >>\
> >> + if (hists->stats.total_period)   
> >>\
> >> + percent = 100.0 * he->stat._field / 
> >> hists->stats.total_period;  \
> >> +  
> >>\
> >> + ret = percent_color_snprintf(hpp->buf, hpp->size, " %6.2f%%", 
> >> percent); \
> >> +  
> >>\
> >> + if (symbol_conf.event_group) {   
> >>\
> >> + int i;   
> >>\
> >> + struct perf_evsel *evsel = hists_to_evsel(hists);
> >>\
> >> + struct hist_entry *pair; 
> >>\
> >> + int nr_members = evsel->nr_members;  
> >>\
> >> + double *percents;
> >>\
> >> +  
> >>\
> >> + if (nr_members <= 1) 
> >>\
> >> + return ret;  
> >>\
> >> +  
> >>\
> >> + percents = zalloc(sizeof(*percents) * nr_members);   
> >>\
> >> + if (percents == NULL) {  
> >>\
> >> + pr_warning("Not enough memory!\n");  
> >>\
> >> + return ret;  
> >>\
> >> + }
> >>\
> >> +  
> >>\
> >> + list_for_each_entry(pair, &he->pairs.head, pairs.node) { 
> >>\
> >> + u64 period = pair->stat._field;  
> >>\
> >> + u64 total = pair->hists->stats.total_period; 
> >>\
> >> +  
> >>\
> >> + if (!total)  
> >>\
> >> + continue;
> >>\
> >> +  
> >>\
> >> + evsel = hists_to_evsel(pair->hists); 
> >>\
> >> + i = perf_evsel__group_idx(evsel);
> >>\
> >> + percents[i] = 100.0 * period / total;
> >>\
> >> + }
> >>\
> >> +  
> >>\
> >> + for (i = 1; i < nr_members; i++) {   
> >>\
> >> + ret += percent_color_snprintf(hpp->buf + ret,
> >>\
> >> +   hpp->size - ret,   
> >>\
> >> +   " %6.2f%%", 
> >> percents[i]); \
> >> + }
> >>\
> >> + free(percents);  
> >>\
> >> + }
> >>\
> >> + return ret;  
> >>\
> >> +}
> >
> > ok, so this is the part thats common for both multi diff and group
> > report and hugely depends on how we link matching hist_entry
> >
> > To sum to what group report does here:
> >
> > 1) starting with event group
> > 2) the function 'he' belongs to leader hists
> > 3) display leaders data value
> > 4) if 'symbol_conf.event_group' is enabled, we want to display all
> >group members dat

Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-02 Thread Namhyung Kim
Hi Jiri,

On Fri, Nov 30, 2012 at 10:29 PM, Jiri Olsa  wrote:
> On Thu, Nov 29, 2012 at 03:38:40PM +0900, Namhyung Kim wrote:
>
> SNIP
>
>> +#define __HPP_COLOR_PERCENT_FN(_type, _field)   
>>  \
>> +static int hpp__color_##_type(struct perf_hpp *hpp, struct hist_entry *he)  
>>  \
>> +{   
>>  \
>> + int ret;   
>>  \
>> + double percent = 0.0;  
>>  \
>> + struct hists *hists = he->hists;   
>>  \
>> +
>>  \
>> + if (hists->stats.total_period) 
>>  \
>> + percent = 100.0 * he->stat._field / hists->stats.total_period; 
>>  \
>> +
>>  \
>> + ret = percent_color_snprintf(hpp->buf, hpp->size, " %6.2f%%", 
>> percent); \
>> +
>>  \
>> + if (symbol_conf.event_group) { 
>>  \
>> + int i; 
>>  \
>> + struct perf_evsel *evsel = hists_to_evsel(hists);  
>>  \
>> + struct hist_entry *pair;   
>>  \
>> + int nr_members = evsel->nr_members;
>>  \
>> + double *percents;  
>>  \
>> +
>>  \
>> + if (nr_members <= 1)   
>>  \
>> + return ret;
>>  \
>> +
>>  \
>> + percents = zalloc(sizeof(*percents) * nr_members); 
>>  \
>> + if (percents == NULL) {
>>  \
>> + pr_warning("Not enough memory!\n");
>>  \
>> + return ret;
>>  \
>> + }  
>>  \
>> +
>>  \
>> + list_for_each_entry(pair, &he->pairs.head, pairs.node) {   
>>  \
>> + u64 period = pair->stat._field;
>>  \
>> + u64 total = pair->hists->stats.total_period;   
>>  \
>> +
>>  \
>> + if (!total)
>>  \
>> + continue;  
>>  \
>> +
>>  \
>> + evsel = hists_to_evsel(pair->hists);   
>>  \
>> + i = perf_evsel__group_idx(evsel);  
>>  \
>> + percents[i] = 100.0 * period / total;  
>>  \
>> + }  
>>  \
>> +
>>  \
>> + for (i = 1; i < nr_members; i++) { 
>>  \
>> + ret += percent_color_snprintf(hpp->buf + ret,  
>>  \
>> +   hpp->size - ret, 
>>  \
>> +   " %6.2f%%", 
>> percents[i]); \
>> + }  
>>  \
>> + free(percents);
>>  \
>> + }  
>>  \
>> + return ret;
>>  \
>> +}
>
> ok, so this is the part thats common for both multi diff and group
> report and hugely depends on how we link matching hist_entry
>
> To sum to what group report does here:
>
> 1) starting with event group
> 2) the function 'he' belongs to leader hists
> 3) display leaders data value
> 4) if 'symbol_conf.event_group' is enabled, we want to display all
>group members data values in a column
> 5) say we have group of 3 events 'e1,e2,e3' and e1 being the leader,
>we have following possibilities:
>- e1 have no pairs
>- e1 is paired with e2
>- e1 is paired with e3
>- e1 is paired with e2 and e3 (e1 could also be dummy one)
> 6) need to displ

Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-12-02 Thread Namhyung Kim
On Fri, 30 Nov 2012 10:52:15 -0300, Arnaldo Carvalho de Melo wrote:
> Em Fri, Nov 30, 2012 at 02:29:43PM +0100, Jiri Olsa escreveu:
>> On Thu, Nov 29, 2012 at 03:38:40PM +0900, Namhyung Kim wrote:
>> > +#define __HPP_COLOR_PERCENT_FN(_type, _field) 
>> > \
>> > +static int hpp__color_##_type(struct perf_hpp *hpp, struct hist_entry 
>> > *he)\
>> > +{ 
>> > \
>> > +  int ret;
>> > \
>> > +  double percent = 0.0;   
>> > \
>> > +  struct hists *hists = he->hists;
>> > \
>> > +  
>> > \
>> > +  if (hists->stats.total_period)  
>> > \
>> > +  percent = 100.0 * he->stat._field / hists->stats.total_period;  
>> > \
>> > +  
>> > \
>> > +  ret = percent_color_snprintf(hpp->buf, hpp->size, " %6.2f%%", percent); 
>> > \
>> > +  
>> > \
>> > +  if (symbol_conf.event_group) {  
>> > \
>> > +  int i;  
>> > \
>> > +  struct perf_evsel *evsel = hists_to_evsel(hists);   
>> > \
>> > +  struct hist_entry *pair;
>> > \
>> > +  int nr_members = evsel->nr_members; 
>> > \
>> > +  double *percents;   
>> > \
>> > +  
>> > \
>> > +  if (nr_members <= 1)
>> > \
>> > +  return ret; 
>> > \
>> > +  
>> > \
>> > +  percents = zalloc(sizeof(*percents) * nr_members);  
>> > \
>> > +  if (percents == NULL) { 
>> > \
>> > +  pr_warning("Not enough memory!\n"); 
>> > \
>> > +  return ret; 
>> > \
>> > +  }   
>> > \
>
> Why do we need to zalloc this percents array?
>
>> > +  list_for_each_entry(pair, &he->pairs.head, pairs.node) {
>> > \
>> > +  u64 period = pair->stat._field; 
>> > \
>> > +  u64 total = pair->hists->stats.total_period;
>> > \
>> > +  
>> > \
>> > +  if (!total) 
>> > \
>> > +  continue;   
>> > \
>> > +  
>> > \
>> > +  evsel = hists_to_evsel(pair->hists);
>> > \
>> > +  i = perf_evsel__group_idx(evsel);   
>> > \
>> > +  percents[i] = 100.0 * period / total;   
>> > \
>
> Why not use percent_color_snprintf here, using some "%*s" thing that
> uses i to position the output in the right column? This way the
> following loop can be ditched as well. No?

It's because it's possible that an entry didn't have pairs for every
group member.  Say, there's a group consists of 3 members (1 leader + 2
member).  It's quite legitimate that a leader hist entry has just one
pair for a member and miss another.  So I allocated a zero-filled array,
and filled what it has, and print them all in the for loop below.

Thanks,
Namhyung

>
>> > +  }   
>> > \
>> > +  
>> > \
>> > +  for (i = 1; i < nr_members; i++) {  
>> > \
>> > +  ret += percent_color_snprintf(hpp->buf + ret,   
>> > \
>> > +hpp->size - ret,  
>> > \
>> > +" %6.2f%%", percents[i]); 
>> > \
>> > +  }   
>> > \
>> > +  free(percents); 
>> > \
>> > +  }   
>> > \
>> > +  return ret; 
>> > \
>
> - Arnaldo
--
To unsubscribe from this 

Re: [PATCH 12/18] perf ui/hist: Add support for event group view

2012-11-30 Thread Arnaldo Carvalho de Melo
Em Fri, Nov 30, 2012 at 02:29:43PM +0100, Jiri Olsa escreveu:
> On Thu, Nov 29, 2012 at 03:38:40PM +0900, Namhyung Kim wrote:
> > +#define __HPP_COLOR_PERCENT_FN(_type, _field)  
> > \
> > +static int hpp__color_##_type(struct perf_hpp *hpp, struct hist_entry *he) 
> > \
> > +{  
> > \
> > +   int ret;
> > \
> > +   double percent = 0.0;   
> > \
> > +   struct hists *hists = he->hists;
> > \
> > +   
> > \
> > +   if (hists->stats.total_period)  
> > \
> > +   percent = 100.0 * he->stat._field / hists->stats.total_period;  
> > \
> > +   
> > \
> > +   ret = percent_color_snprintf(hpp->buf, hpp->size, " %6.2f%%", percent); 
> > \
> > +   
> > \
> > +   if (symbol_conf.event_group) {  
> > \
> > +   int i;  
> > \
> > +   struct perf_evsel *evsel = hists_to_evsel(hists);   
> > \
> > +   struct hist_entry *pair;
> > \
> > +   int nr_members = evsel->nr_members; 
> > \
> > +   double *percents;   
> > \
> > +   
> > \
> > +   if (nr_members <= 1)
> > \
> > +   return ret; 
> > \
> > +   
> > \
> > +   percents = zalloc(sizeof(*percents) * nr_members);  
> > \
> > +   if (percents == NULL) { 
> > \
> > +   pr_warning("Not enough memory!\n"); 
> > \
> > +   return ret; 
> > \
> > +   }   
> > \

Why do we need to zalloc this percents array?

> > +   list_for_each_entry(pair, &he->pairs.head, pairs.node) {
> > \
> > +   u64 period = pair->stat._field; 
> > \
> > +   u64 total = pair->hists->stats.total_period;
> > \
> > +   
> > \
> > +   if (!total) 
> > \
> > +   continue;   
> > \
> > +   
> > \
> > +   evsel = hists_to_evsel(pair->hists);
> > \
> > +   i = perf_evsel__group_idx(evsel);   
> > \
> > +   percents[i] = 100.0 * period / total;   
> > \

Why not use percent_color_snprintf here, using some "%*s" thing that
uses i to position the output in the right column? This way the
following loop can be ditched as well. No?

> > +   }   
> > \
> > +   
> > \
> > +   for (i = 1; i < nr_members; i++) {  
> > \
> > +   ret += percent_color_snprintf(hpp->buf + ret,   
> > \
> > + hpp->size - ret,  
> > \
> > + " %6.2f%%", percents[i]); 
> > \
> > +   }   
> > \
> > +   free(percents); 
> > \
> > +   }   
> > \
> > +   return ret; 
> > \

- Arnaldo
--
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/