diff options
Diffstat (limited to 'tools/perf/builtin-diff.c')
-rw-r--r-- | tools/perf/builtin-diff.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index b39f3a1ee7dc..4f19513d7dda 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c | |||
@@ -9,7 +9,9 @@ | |||
9 | #include "util/debug.h" | 9 | #include "util/debug.h" |
10 | #include "util/event.h" | 10 | #include "util/event.h" |
11 | #include "util/hist.h" | 11 | #include "util/hist.h" |
12 | #include "util/evsel.h" | ||
12 | #include "util/session.h" | 13 | #include "util/session.h" |
14 | #include "util/tool.h" | ||
13 | #include "util/sort.h" | 15 | #include "util/sort.h" |
14 | #include "util/symbol.h" | 16 | #include "util/symbol.h" |
15 | #include "util/util.h" | 17 | #include "util/util.h" |
@@ -30,14 +32,15 @@ static int hists__add_entry(struct hists *self, | |||
30 | return -ENOMEM; | 32 | return -ENOMEM; |
31 | } | 33 | } |
32 | 34 | ||
33 | static int diff__process_sample_event(union perf_event *event, | 35 | static int diff__process_sample_event(struct perf_tool *tool __used, |
36 | union perf_event *event, | ||
34 | struct perf_sample *sample, | 37 | struct perf_sample *sample, |
35 | struct perf_evsel *evsel __used, | 38 | struct perf_evsel *evsel __used, |
36 | struct perf_session *session) | 39 | struct machine *machine) |
37 | { | 40 | { |
38 | struct addr_location al; | 41 | struct addr_location al; |
39 | 42 | ||
40 | if (perf_event__preprocess_sample(event, session, &al, sample, NULL) < 0) { | 43 | if (perf_event__preprocess_sample(event, machine, &al, sample, NULL) < 0) { |
41 | pr_warning("problem processing %d event, skipping it.\n", | 44 | pr_warning("problem processing %d event, skipping it.\n", |
42 | event->header.type); | 45 | event->header.type); |
43 | return -1; | 46 | return -1; |
@@ -46,16 +49,16 @@ static int diff__process_sample_event(union perf_event *event, | |||
46 | if (al.filtered || al.sym == NULL) | 49 | if (al.filtered || al.sym == NULL) |
47 | return 0; | 50 | return 0; |
48 | 51 | ||
49 | if (hists__add_entry(&session->hists, &al, sample->period)) { | 52 | if (hists__add_entry(&evsel->hists, &al, sample->period)) { |
50 | pr_warning("problem incrementing symbol period, skipping event\n"); | 53 | pr_warning("problem incrementing symbol period, skipping event\n"); |
51 | return -1; | 54 | return -1; |
52 | } | 55 | } |
53 | 56 | ||
54 | session->hists.stats.total_period += sample->period; | 57 | evsel->hists.stats.total_period += sample->period; |
55 | return 0; | 58 | return 0; |
56 | } | 59 | } |
57 | 60 | ||
58 | static struct perf_event_ops event_ops = { | 61 | static struct perf_tool perf_diff = { |
59 | .sample = diff__process_sample_event, | 62 | .sample = diff__process_sample_event, |
60 | .mmap = perf_event__process_mmap, | 63 | .mmap = perf_event__process_mmap, |
61 | .comm = perf_event__process_comm, | 64 | .comm = perf_event__process_comm, |
@@ -145,13 +148,13 @@ static int __cmd_diff(void) | |||
145 | int ret, i; | 148 | int ret, i; |
146 | struct perf_session *session[2]; | 149 | struct perf_session *session[2]; |
147 | 150 | ||
148 | session[0] = perf_session__new(input_old, O_RDONLY, force, false, &event_ops); | 151 | session[0] = perf_session__new(input_old, O_RDONLY, force, false, &perf_diff); |
149 | session[1] = perf_session__new(input_new, O_RDONLY, force, false, &event_ops); | 152 | session[1] = perf_session__new(input_new, O_RDONLY, force, false, &perf_diff); |
150 | if (session[0] == NULL || session[1] == NULL) | 153 | if (session[0] == NULL || session[1] == NULL) |
151 | return -ENOMEM; | 154 | return -ENOMEM; |
152 | 155 | ||
153 | for (i = 0; i < 2; ++i) { | 156 | for (i = 0; i < 2; ++i) { |
154 | ret = perf_session__process_events(session[i], &event_ops); | 157 | ret = perf_session__process_events(session[i], &perf_diff); |
155 | if (ret) | 158 | if (ret) |
156 | goto out_delete; | 159 | goto out_delete; |
157 | } | 160 | } |