diff options
Diffstat (limited to 'tools/perf/builtin-diff.c')
| -rw-r--r-- | tools/perf/builtin-diff.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index fca1d4402910..3153e492dbcc 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c | |||
| @@ -30,12 +30,13 @@ static int hists__add_entry(struct hists *self, | |||
| 30 | return -ENOMEM; | 30 | return -ENOMEM; |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | static int diff__process_sample_event(event_t *event, struct perf_session *session) | 33 | static int diff__process_sample_event(event_t *event, |
| 34 | struct sample_data *sample, | ||
| 35 | struct perf_session *session) | ||
| 34 | { | 36 | { |
| 35 | struct addr_location al; | 37 | struct addr_location al; |
| 36 | struct sample_data data = { .period = 1, }; | ||
| 37 | 38 | ||
| 38 | if (event__preprocess_sample(event, session, &al, &data, NULL) < 0) { | 39 | if (event__preprocess_sample(event, session, &al, sample, NULL) < 0) { |
| 39 | pr_warning("problem processing %d event, skipping it.\n", | 40 | pr_warning("problem processing %d event, skipping it.\n", |
| 40 | event->header.type); | 41 | event->header.type); |
| 41 | return -1; | 42 | return -1; |
| @@ -44,12 +45,12 @@ static int diff__process_sample_event(event_t *event, struct perf_session *sessi | |||
| 44 | if (al.filtered || al.sym == NULL) | 45 | if (al.filtered || al.sym == NULL) |
| 45 | return 0; | 46 | return 0; |
| 46 | 47 | ||
| 47 | if (hists__add_entry(&session->hists, &al, data.period)) { | 48 | if (hists__add_entry(&session->hists, &al, sample->period)) { |
| 48 | pr_warning("problem incrementing symbol period, skipping event\n"); | 49 | pr_warning("problem incrementing symbol period, skipping event\n"); |
| 49 | return -1; | 50 | return -1; |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | session->hists.stats.total_period += data.period; | 53 | session->hists.stats.total_period += sample->period; |
| 53 | return 0; | 54 | return 0; |
| 54 | } | 55 | } |
| 55 | 56 | ||
| @@ -60,6 +61,8 @@ static struct perf_event_ops event_ops = { | |||
| 60 | .exit = event__process_task, | 61 | .exit = event__process_task, |
| 61 | .fork = event__process_task, | 62 | .fork = event__process_task, |
| 62 | .lost = event__process_lost, | 63 | .lost = event__process_lost, |
| 64 | .ordered_samples = true, | ||
| 65 | .ordering_requires_timestamps = true, | ||
| 63 | }; | 66 | }; |
| 64 | 67 | ||
| 65 | static void perf_session__insert_hist_entry_by_name(struct rb_root *root, | 68 | static void perf_session__insert_hist_entry_by_name(struct rb_root *root, |
| @@ -141,8 +144,8 @@ static int __cmd_diff(void) | |||
| 141 | int ret, i; | 144 | int ret, i; |
| 142 | struct perf_session *session[2]; | 145 | struct perf_session *session[2]; |
| 143 | 146 | ||
| 144 | session[0] = perf_session__new(input_old, O_RDONLY, force, false); | 147 | session[0] = perf_session__new(input_old, O_RDONLY, force, false, &event_ops); |
| 145 | session[1] = perf_session__new(input_new, O_RDONLY, force, false); | 148 | session[1] = perf_session__new(input_new, O_RDONLY, force, false, &event_ops); |
| 146 | if (session[0] == NULL || session[1] == NULL) | 149 | if (session[0] == NULL || session[1] == NULL) |
| 147 | return -ENOMEM; | 150 | return -ENOMEM; |
| 148 | 151 | ||
| @@ -173,7 +176,7 @@ static const char * const diff_usage[] = { | |||
| 173 | static const struct option options[] = { | 176 | static const struct option options[] = { |
| 174 | OPT_INCR('v', "verbose", &verbose, | 177 | OPT_INCR('v', "verbose", &verbose, |
| 175 | "be more verbose (show symbol address, etc)"), | 178 | "be more verbose (show symbol address, etc)"), |
| 176 | OPT_BOOLEAN('m', "displacement", &show_displacement, | 179 | OPT_BOOLEAN('M', "displacement", &show_displacement, |
| 177 | "Show position displacement relative to baseline"), | 180 | "Show position displacement relative to baseline"), |
| 178 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, | 181 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, |
| 179 | "dump raw trace in ASCII"), | 182 | "dump raw trace in ASCII"), |
| @@ -191,6 +194,8 @@ static const struct option options[] = { | |||
| 191 | OPT_STRING('t', "field-separator", &symbol_conf.field_sep, "separator", | 194 | OPT_STRING('t', "field-separator", &symbol_conf.field_sep, "separator", |
| 192 | "separator for columns, no spaces will be added between " | 195 | "separator for columns, no spaces will be added between " |
| 193 | "columns '.' is reserved."), | 196 | "columns '.' is reserved."), |
| 197 | OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", | ||
| 198 | "Look for files with symbols relative to this directory"), | ||
| 194 | OPT_END() | 199 | OPT_END() |
| 195 | }; | 200 | }; |
| 196 | 201 | ||
