aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-report.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-report.c')
-rw-r--r--tools/perf/builtin-report.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 04de3387de3f..68265120ee07 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -138,8 +138,14 @@ static int add_event_total(struct perf_session *session,
138 if (!hists) 138 if (!hists)
139 return -ENOMEM; 139 return -ENOMEM;
140 140
141 hists->stats.total += data->period; 141 hists->stats.total_period += data->period;
142 session->hists.stats.total += data->period; 142 /*
143 * FIXME: add_event_total should be moved from here to
144 * perf_session__process_event so that the proper hist is passed to
145 * the event_op methods.
146 */
147 hists__inc_nr_events(hists, PERF_RECORD_SAMPLE);
148 session->hists.stats.total_period += data->period;
143 return 0; 149 return 0;
144} 150}
145 151
@@ -182,14 +188,14 @@ static int process_sample_event(event_t *event, struct perf_session *session)
182 return 0; 188 return 0;
183 189
184 if (perf_session__add_hist_entry(session, &al, &data)) { 190 if (perf_session__add_hist_entry(session, &al, &data)) {
185 pr_debug("problem incrementing symbol count, skipping event\n"); 191 pr_debug("problem incrementing symbol period, skipping event\n");
186 return -1; 192 return -1;
187 } 193 }
188 194
189 attr = perf_header__find_attr(data.id, &session->header); 195 attr = perf_header__find_attr(data.id, &session->header);
190 196
191 if (add_event_total(session, &data, attr)) { 197 if (add_event_total(session, &data, attr)) {
192 pr_debug("problem adding event count\n"); 198 pr_debug("problem adding event period\n");
193 return -1; 199 return -1;
194 } 200 }
195 201
@@ -263,11 +269,25 @@ static struct perf_event_ops event_ops = {
263 269
264extern volatile int session_done; 270extern volatile int session_done;
265 271
266static void sig_handler(int sig __attribute__((__unused__))) 272static void sig_handler(int sig __used)
267{ 273{
268 session_done = 1; 274 session_done = 1;
269} 275}
270 276
277static size_t hists__fprintf_nr_sample_events(struct hists *self,
278 const char *evname, FILE *fp)
279{
280 size_t ret;
281 char unit;
282 unsigned long nr_events = self->stats.nr_events[PERF_RECORD_SAMPLE];
283
284 nr_events = convert_unit(nr_events, &unit);
285 ret = fprintf(fp, "# Events: %lu%c", nr_events, unit);
286 if (evname != NULL)
287 ret += fprintf(fp, " %s", evname);
288 return ret + fprintf(fp, "\n#\n");
289}
290
271static int __cmd_report(void) 291static int __cmd_report(void)
272{ 292{
273 int ret = -EINVAL; 293 int ret = -EINVAL;
@@ -293,7 +313,7 @@ static int __cmd_report(void)
293 goto out_delete; 313 goto out_delete;
294 314
295 if (dump_trace) { 315 if (dump_trace) {
296 event__print_totals(); 316 perf_session__fprintf_nr_events(session, stdout);
297 goto out_delete; 317 goto out_delete;
298 } 318 }
299 319
@@ -313,14 +333,12 @@ static int __cmd_report(void)
313 if (use_browser) 333 if (use_browser)
314 hists__browse(hists, help, input_name); 334 hists__browse(hists, help, input_name);
315 else { 335 else {
316 if (rb_first(&session->hists.entries) == 336 const char *evname = NULL;
337 if (rb_first(&session->hists.entries) !=
317 rb_last(&session->hists.entries)) 338 rb_last(&session->hists.entries))
318 fprintf(stdout, "# Samples: %Ld\n#\n", 339 evname = __event_name(hists->type, hists->config);
319 hists->stats.total); 340
320 else 341 hists__fprintf_nr_sample_events(hists, evname, stdout);
321 fprintf(stdout, "# Samples: %Ld %s\n#\n",
322 hists->stats.total,
323 __event_name(hists->type, hists->config));
324 342
325 hists__fprintf(hists, NULL, false, stdout); 343 hists__fprintf(hists, NULL, false, stdout);
326 fprintf(stdout, "\n\n"); 344 fprintf(stdout, "\n\n");