|
@@ -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
|