diff options
Diffstat (limited to 'tools/perf/util/hist.c')
| -rw-r--r-- | tools/perf/util/hist.c | 23 | 
1 files changed, 16 insertions, 7 deletions
| diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index f855941bebe..97ddd18acd7 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -155,9 +155,11 @@ static void hist_entry__add_cpumode_period(struct hist_entry *he,  	}  } -static void he_stat__add_period(struct he_stat *he_stat, u64 period) +static void he_stat__add_period(struct he_stat *he_stat, u64 period, +				u64 weight)  {  	he_stat->period		+= period; +	he_stat->weight		+= weight;  	he_stat->nr_events	+= 1;  } @@ -169,12 +171,14 @@ static void he_stat__add_stat(struct he_stat *dest, struct he_stat *src)  	dest->period_guest_sys	+= src->period_guest_sys;  	dest->period_guest_us	+= src->period_guest_us;  	dest->nr_events		+= src->nr_events; +	dest->weight		+= src->weight;  }  static void hist_entry__decay(struct hist_entry *he)  {  	he->stat.period = (he->stat.period * 7) / 8;  	he->stat.nr_events = (he->stat.nr_events * 7) / 8; +	/* XXX need decay for weight too? */  }  static bool hists__decay_entry(struct hists *hists, struct hist_entry *he) @@ -282,7 +286,8 @@ static u8 symbol__parent_filter(const struct symbol *parent)  static struct hist_entry *add_hist_entry(struct hists *hists,  				      struct hist_entry *entry,  				      struct addr_location *al, -				      u64 period) +				      u64 period, +				      u64 weight)  {  	struct rb_node **p;  	struct rb_node *parent = NULL; @@ -306,7 +311,7 @@ static struct hist_entry *add_hist_entry(struct hists *hists,  		cmp = hist_entry__cmp(he, entry);  		if (!cmp) { -			he_stat__add_period(&he->stat, period); +			he_stat__add_period(&he->stat, period, weight);  			/* If the map of an existing hist_entry has  			 * become out-of-date due to an exec() or @@ -345,7 +350,8 @@ struct hist_entry *__hists__add_branch_entry(struct hists *self,  					     struct addr_location *al,  					     struct symbol *sym_parent,  					     struct branch_info *bi, -					     u64 period) +					     u64 period, +					     u64 weight)  {  	struct hist_entry entry = {  		.thread	= al->thread, @@ -359,6 +365,7 @@ struct hist_entry *__hists__add_branch_entry(struct hists *self,  		.stat = {  			.period	= period,  			.nr_events = 1, +			.weight = weight,  		},  		.parent = sym_parent,  		.filtered = symbol__parent_filter(sym_parent), @@ -366,12 +373,13 @@ struct hist_entry *__hists__add_branch_entry(struct hists *self,  		.hists	= self,  	}; -	return add_hist_entry(self, &entry, al, period); +	return add_hist_entry(self, &entry, al, period, weight);  }  struct hist_entry *__hists__add_entry(struct hists *self,  				      struct addr_location *al, -				      struct symbol *sym_parent, u64 period) +				      struct symbol *sym_parent, u64 period, +				      u64 weight)  {  	struct hist_entry entry = {  		.thread	= al->thread, @@ -385,13 +393,14 @@ struct hist_entry *__hists__add_entry(struct hists *self,  		.stat = {  			.period	= period,  			.nr_events = 1, +			.weight = weight,  		},  		.parent = sym_parent,  		.filtered = symbol__parent_filter(sym_parent),  		.hists	= self,  	}; -	return add_hist_entry(self, &entry, al, period); +	return add_hist_entry(self, &entry, al, period, weight);  }  int64_t |