static int __cmd_diff(void) { int ret, i; struct perf_session *session[2]; session[0] = perf_session__new(input_old, O_RDONLY, force); session[1] = perf_session__new(input_new, O_RDONLY, force); if (session[0] == NULL || session[1] == NULL) return -ENOMEM; for (i = 0; i < 2; ++i) { ret = perf_session__process_events(session[i], &event_ops); if (ret) goto out_delete; perf_session__output_resort(session[i], session[i]->events_stats.total); } perf_session__match_hists(session[0], session[1]); perf_session__fprintf_hists(session[1], session[0], show_displacement, stdout); out_delete: for (i = 0; i < 2; ++i) perf_session__delete(session[i]); return ret; }
static int __cmd_annotate(void) { int ret; struct perf_session *session; session = perf_session__new(input_name, O_RDONLY, force); if (session == NULL) return -ENOMEM; ret = perf_session__process_events(session, &event_ops); if (ret) goto out_delete; if (dump_trace) { event__print_totals(); goto out_delete; } if (verbose > 3) perf_session__fprintf(session, stdout); if (verbose > 2) dsos__fprintf(stdout); perf_session__collapse_resort(session); perf_session__output_resort(session, session->event_total[0]); perf_session__find_annotations(session); out_delete: perf_session__delete(session); return ret; }