forked from Minki/linux
perf hist: Pass struct sample to __hists__add_entry()
This is a preparation to add more info into the hist_entry. Also it already passes too many argument, so passing sample directly will reduce the overhead of the function call. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/1450804030-29193-2-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
9cc2617de5
commit
fd36f3dd79
@ -47,7 +47,7 @@ struct perf_annotate {
|
||||
};
|
||||
|
||||
static int perf_evsel__add_sample(struct perf_evsel *evsel,
|
||||
struct perf_sample *sample __maybe_unused,
|
||||
struct perf_sample *sample,
|
||||
struct addr_location *al,
|
||||
struct perf_annotate *ann)
|
||||
{
|
||||
@ -72,7 +72,10 @@ static int perf_evsel__add_sample(struct perf_evsel *evsel,
|
||||
return 0;
|
||||
}
|
||||
|
||||
he = __hists__add_entry(hists, al, NULL, NULL, NULL, 1, 1, 0, true);
|
||||
sample->period = 1;
|
||||
sample->weight = 1;
|
||||
|
||||
he = __hists__add_entry(hists, al, NULL, NULL, NULL, sample, true);
|
||||
if (he == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -311,11 +311,11 @@ static int formula_fprintf(struct hist_entry *he, struct hist_entry *pair,
|
||||
}
|
||||
|
||||
static int hists__add_entry(struct hists *hists,
|
||||
struct addr_location *al, u64 period,
|
||||
u64 weight, u64 transaction)
|
||||
struct addr_location *al,
|
||||
struct perf_sample *sample)
|
||||
{
|
||||
if (__hists__add_entry(hists, al, NULL, NULL, NULL, period, weight,
|
||||
transaction, true) != NULL)
|
||||
if (__hists__add_entry(hists, al, NULL, NULL, NULL,
|
||||
sample, true) != NULL)
|
||||
return 0;
|
||||
return -ENOMEM;
|
||||
}
|
||||
@ -336,8 +336,7 @@ static int diff__process_sample_event(struct perf_tool *tool __maybe_unused,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (hists__add_entry(hists, &al, sample->period,
|
||||
sample->weight, sample->transaction)) {
|
||||
if (hists__add_entry(hists, &al, sample)) {
|
||||
pr_warning("problem incrementing symbol period, skipping event\n");
|
||||
goto out_put;
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
|
||||
struct perf_evsel *evsel;
|
||||
struct addr_location al;
|
||||
struct hist_entry *he;
|
||||
struct perf_sample sample = { .period = 1, };
|
||||
struct perf_sample sample = { .period = 1, .weight = 1, };
|
||||
size_t i = 0, k;
|
||||
|
||||
/*
|
||||
@ -90,7 +90,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
|
||||
goto out;
|
||||
|
||||
he = __hists__add_entry(hists, &al, NULL,
|
||||
NULL, NULL, 1, 1, 0, true);
|
||||
NULL, NULL, &sample, true);
|
||||
if (he == NULL) {
|
||||
addr_location__put(&al);
|
||||
goto out;
|
||||
@ -116,7 +116,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
|
||||
goto out;
|
||||
|
||||
he = __hists__add_entry(hists, &al, NULL,
|
||||
NULL, NULL, 1, 1, 0, true);
|
||||
NULL, NULL, &sample, true);
|
||||
if (he == NULL) {
|
||||
addr_location__put(&al);
|
||||
goto out;
|
||||
|
@ -461,7 +461,7 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
|
||||
struct symbol *sym_parent,
|
||||
struct branch_info *bi,
|
||||
struct mem_info *mi,
|
||||
u64 period, u64 weight, u64 transaction,
|
||||
struct perf_sample *sample,
|
||||
bool sample_self)
|
||||
{
|
||||
struct hist_entry entry = {
|
||||
@ -478,15 +478,15 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
|
||||
.level = al->level,
|
||||
.stat = {
|
||||
.nr_events = 1,
|
||||
.period = period,
|
||||
.weight = weight,
|
||||
.period = sample->period,
|
||||
.weight = sample->weight,
|
||||
},
|
||||
.parent = sym_parent,
|
||||
.filtered = symbol__parent_filter(sym_parent) | al->filtered,
|
||||
.hists = hists,
|
||||
.branch_info = bi,
|
||||
.mem_info = mi,
|
||||
.transaction = transaction,
|
||||
.transaction = sample->transaction,
|
||||
};
|
||||
|
||||
return hists__findnew_entry(hists, &entry, al, sample_self);
|
||||
@ -526,12 +526,13 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al
|
||||
u64 cost;
|
||||
struct mem_info *mi = iter->priv;
|
||||
struct hists *hists = evsel__hists(iter->evsel);
|
||||
struct perf_sample *sample = iter->sample;
|
||||
struct hist_entry *he;
|
||||
|
||||
if (mi == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
cost = iter->sample->weight;
|
||||
cost = sample->weight;
|
||||
if (!cost)
|
||||
cost = 1;
|
||||
|
||||
@ -542,8 +543,10 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al
|
||||
* and this is indirectly achieved by passing period=weight here
|
||||
* and the he_stat__add_period() function.
|
||||
*/
|
||||
sample->period = cost;
|
||||
|
||||
he = __hists__add_entry(hists, al, iter->parent, NULL, mi,
|
||||
cost, cost, 0, true);
|
||||
sample, true);
|
||||
if (!he)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -630,6 +633,7 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a
|
||||
struct branch_info *bi;
|
||||
struct perf_evsel *evsel = iter->evsel;
|
||||
struct hists *hists = evsel__hists(evsel);
|
||||
struct perf_sample *sample = iter->sample;
|
||||
struct hist_entry *he = NULL;
|
||||
int i = iter->curr;
|
||||
int err = 0;
|
||||
@ -643,9 +647,11 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a
|
||||
* The report shows the percentage of total branches captured
|
||||
* and not events sampled. Thus we use a pseudo period of 1.
|
||||
*/
|
||||
sample->period = 1;
|
||||
sample->weight = bi->flags.cycles ? bi->flags.cycles : 1;
|
||||
|
||||
he = __hists__add_entry(hists, al, iter->parent, &bi[i], NULL,
|
||||
1, bi->flags.cycles ? bi->flags.cycles : 1,
|
||||
0, true);
|
||||
sample, true);
|
||||
if (he == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -682,8 +688,7 @@ iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_location
|
||||
struct hist_entry *he;
|
||||
|
||||
he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
|
||||
sample->period, sample->weight,
|
||||
sample->transaction, true);
|
||||
sample, true);
|
||||
if (he == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -744,8 +749,7 @@ iter_add_single_cumulative_entry(struct hist_entry_iter *iter,
|
||||
int err = 0;
|
||||
|
||||
he = __hists__add_entry(hists, al, iter->parent, NULL, NULL,
|
||||
sample->period, sample->weight,
|
||||
sample->transaction, true);
|
||||
sample, true);
|
||||
if (he == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -818,8 +822,7 @@ iter_add_next_cumulative_entry(struct hist_entry_iter *iter,
|
||||
}
|
||||
|
||||
he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
|
||||
sample->period, sample->weight,
|
||||
sample->transaction, false);
|
||||
sample, false);
|
||||
if (he == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -114,8 +114,8 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
|
||||
struct addr_location *al,
|
||||
struct symbol *parent,
|
||||
struct branch_info *bi,
|
||||
struct mem_info *mi, u64 period,
|
||||
u64 weight, u64 transaction,
|
||||
struct mem_info *mi,
|
||||
struct perf_sample *sample,
|
||||
bool sample_self);
|
||||
int hist_entry_iter__add(struct hist_entry_iter *iter, struct addr_location *al,
|
||||
int max_stack_depth, void *arg);
|
||||
|
Loading…
Reference in New Issue
Block a user