Commit fd36f3dd authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

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: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarJiri 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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9cc2617d
...@@ -47,7 +47,7 @@ struct perf_annotate { ...@@ -47,7 +47,7 @@ struct perf_annotate {
}; };
static int perf_evsel__add_sample(struct perf_evsel *evsel, 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 addr_location *al,
struct perf_annotate *ann) struct perf_annotate *ann)
{ {
...@@ -72,7 +72,10 @@ static int perf_evsel__add_sample(struct perf_evsel *evsel, ...@@ -72,7 +72,10 @@ static int perf_evsel__add_sample(struct perf_evsel *evsel,
return 0; 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) if (he == NULL)
return -ENOMEM; return -ENOMEM;
......
...@@ -311,11 +311,11 @@ static int formula_fprintf(struct hist_entry *he, struct hist_entry *pair, ...@@ -311,11 +311,11 @@ static int formula_fprintf(struct hist_entry *he, struct hist_entry *pair,
} }
static int hists__add_entry(struct hists *hists, static int hists__add_entry(struct hists *hists,
struct addr_location *al, u64 period, struct addr_location *al,
u64 weight, u64 transaction) struct perf_sample *sample)
{ {
if (__hists__add_entry(hists, al, NULL, NULL, NULL, period, weight, if (__hists__add_entry(hists, al, NULL, NULL, NULL,
transaction, true) != NULL) sample, true) != NULL)
return 0; return 0;
return -ENOMEM; return -ENOMEM;
} }
...@@ -336,8 +336,7 @@ static int diff__process_sample_event(struct perf_tool *tool __maybe_unused, ...@@ -336,8 +336,7 @@ static int diff__process_sample_event(struct perf_tool *tool __maybe_unused,
return -1; return -1;
} }
if (hists__add_entry(hists, &al, sample->period, if (hists__add_entry(hists, &al, sample)) {
sample->weight, sample->transaction)) {
pr_warning("problem incrementing symbol period, skipping event\n"); pr_warning("problem incrementing symbol period, skipping event\n");
goto out_put; goto out_put;
} }
......
...@@ -64,7 +64,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine) ...@@ -64,7 +64,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
struct perf_evsel *evsel; struct perf_evsel *evsel;
struct addr_location al; struct addr_location al;
struct hist_entry *he; struct hist_entry *he;
struct perf_sample sample = { .period = 1, }; struct perf_sample sample = { .period = 1, .weight = 1, };
size_t i = 0, k; size_t i = 0, k;
/* /*
...@@ -90,7 +90,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine) ...@@ -90,7 +90,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
goto out; goto out;
he = __hists__add_entry(hists, &al, NULL, he = __hists__add_entry(hists, &al, NULL,
NULL, NULL, 1, 1, 0, true); NULL, NULL, &sample, true);
if (he == NULL) { if (he == NULL) {
addr_location__put(&al); addr_location__put(&al);
goto out; goto out;
...@@ -116,7 +116,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine) ...@@ -116,7 +116,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)
goto out; goto out;
he = __hists__add_entry(hists, &al, NULL, he = __hists__add_entry(hists, &al, NULL,
NULL, NULL, 1, 1, 0, true); NULL, NULL, &sample, true);
if (he == NULL) { if (he == NULL) {
addr_location__put(&al); addr_location__put(&al);
goto out; goto out;
......
...@@ -461,7 +461,7 @@ struct hist_entry *__hists__add_entry(struct hists *hists, ...@@ -461,7 +461,7 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
struct symbol *sym_parent, struct symbol *sym_parent,
struct branch_info *bi, struct branch_info *bi,
struct mem_info *mi, struct mem_info *mi,
u64 period, u64 weight, u64 transaction, struct perf_sample *sample,
bool sample_self) bool sample_self)
{ {
struct hist_entry entry = { struct hist_entry entry = {
...@@ -478,15 +478,15 @@ struct hist_entry *__hists__add_entry(struct hists *hists, ...@@ -478,15 +478,15 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
.level = al->level, .level = al->level,
.stat = { .stat = {
.nr_events = 1, .nr_events = 1,
.period = period, .period = sample->period,
.weight = weight, .weight = sample->weight,
}, },
.parent = sym_parent, .parent = sym_parent,
.filtered = symbol__parent_filter(sym_parent) | al->filtered, .filtered = symbol__parent_filter(sym_parent) | al->filtered,
.hists = hists, .hists = hists,
.branch_info = bi, .branch_info = bi,
.mem_info = mi, .mem_info = mi,
.transaction = transaction, .transaction = sample->transaction,
}; };
return hists__findnew_entry(hists, &entry, al, sample_self); 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 ...@@ -526,12 +526,13 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al
u64 cost; u64 cost;
struct mem_info *mi = iter->priv; struct mem_info *mi = iter->priv;
struct hists *hists = evsel__hists(iter->evsel); struct hists *hists = evsel__hists(iter->evsel);
struct perf_sample *sample = iter->sample;
struct hist_entry *he; struct hist_entry *he;
if (mi == NULL) if (mi == NULL)
return -EINVAL; return -EINVAL;
cost = iter->sample->weight; cost = sample->weight;
if (!cost) if (!cost)
cost = 1; cost = 1;
...@@ -542,8 +543,10 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al ...@@ -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 this is indirectly achieved by passing period=weight here
* and the he_stat__add_period() function. * and the he_stat__add_period() function.
*/ */
sample->period = cost;
he = __hists__add_entry(hists, al, iter->parent, NULL, mi, he = __hists__add_entry(hists, al, iter->parent, NULL, mi,
cost, cost, 0, true); sample, true);
if (!he) if (!he)
return -ENOMEM; return -ENOMEM;
...@@ -630,6 +633,7 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a ...@@ -630,6 +633,7 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a
struct branch_info *bi; struct branch_info *bi;
struct perf_evsel *evsel = iter->evsel; struct perf_evsel *evsel = iter->evsel;
struct hists *hists = evsel__hists(evsel); struct hists *hists = evsel__hists(evsel);
struct perf_sample *sample = iter->sample;
struct hist_entry *he = NULL; struct hist_entry *he = NULL;
int i = iter->curr; int i = iter->curr;
int err = 0; int err = 0;
...@@ -643,9 +647,11 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a ...@@ -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 * The report shows the percentage of total branches captured
* and not events sampled. Thus we use a pseudo period of 1. * 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, he = __hists__add_entry(hists, al, iter->parent, &bi[i], NULL,
1, bi->flags.cycles ? bi->flags.cycles : 1, sample, true);
0, true);
if (he == NULL) if (he == NULL)
return -ENOMEM; return -ENOMEM;
...@@ -682,8 +688,7 @@ iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_location ...@@ -682,8 +688,7 @@ iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_location
struct hist_entry *he; struct hist_entry *he;
he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL, he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
sample->period, sample->weight, sample, true);
sample->transaction, true);
if (he == NULL) if (he == NULL)
return -ENOMEM; return -ENOMEM;
...@@ -744,8 +749,7 @@ iter_add_single_cumulative_entry(struct hist_entry_iter *iter, ...@@ -744,8 +749,7 @@ iter_add_single_cumulative_entry(struct hist_entry_iter *iter,
int err = 0; int err = 0;
he = __hists__add_entry(hists, al, iter->parent, NULL, NULL, he = __hists__add_entry(hists, al, iter->parent, NULL, NULL,
sample->period, sample->weight, sample, true);
sample->transaction, true);
if (he == NULL) if (he == NULL)
return -ENOMEM; return -ENOMEM;
...@@ -818,8 +822,7 @@ iter_add_next_cumulative_entry(struct hist_entry_iter *iter, ...@@ -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, he = __hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL,
sample->period, sample->weight, sample, false);
sample->transaction, false);
if (he == NULL) if (he == NULL)
return -ENOMEM; return -ENOMEM;
......
...@@ -114,8 +114,8 @@ struct hist_entry *__hists__add_entry(struct hists *hists, ...@@ -114,8 +114,8 @@ struct hist_entry *__hists__add_entry(struct hists *hists,
struct addr_location *al, struct addr_location *al,
struct symbol *parent, struct symbol *parent,
struct branch_info *bi, struct branch_info *bi,
struct mem_info *mi, u64 period, struct mem_info *mi,
u64 weight, u64 transaction, struct perf_sample *sample,
bool sample_self); bool sample_self);
int hist_entry_iter__add(struct hist_entry_iter *iter, struct addr_location *al, int hist_entry_iter__add(struct hist_entry_iter *iter, struct addr_location *al,
int max_stack_depth, void *arg); int max_stack_depth, void *arg);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment