Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9cc2617d
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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;

+5 −6
Original line number Diff line number Diff line
@@ -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;
	}
+3 −3
Original line number Diff line number Diff line
@@ -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;
+17 −14
Original line number Diff line number Diff line
@@ -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;

+2 −2
Original line number Diff line number Diff line
@@ -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);