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_timechart(void) { struct perf_session *session = perf_session__new(input_name, O_RDONLY, 0); int ret; if (session == NULL) return -ENOMEM; register_perf_file_handler(&file_handler); ret = perf_session__process_events(session, 0, &event__cwdlen, &event__cwd); if (ret) goto out_delete; process_samples(); end_sample_processing(); sort_pids(); write_svg_file(output_name); pr_info("Written %2.1f seconds of trace to %s.\n", (last_time - first_time) / 1000000000.0, output_name); out_delete: perf_session__delete(session); return ret; }
static int __cmd_diff(void) { int ret, i; struct perf_session *session[2]; session[0] = perf_session__new(input_old, O_RDONLY, force, false); session[1] = perf_session__new(input_new, O_RDONLY, force, false); 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; } hists__output_resort(&session[1]->hists); if (show_displacement) hists__set_positions(&session[0]->hists); hists__match(&session[0]->hists, &session[1]->hists); hists__fprintf(&session[1]->hists, &session[0]->hists, show_displacement, stdout); out_delete: for (i = 0; i < 2; ++i) perf_session__delete(session[i]); return ret; }
static int perf_session__list_build_ids(void) { struct perf_session *session; elf_version(EV_CURRENT); session = perf_session__new(input_name, O_RDONLY, force, false, &build_id__mark_dso_hit_ops); if (session == NULL) return -1; /* * See if this is an ELF file first: */ if (filename__fprintf_build_id(session->filename, stdout)) goto out; if (with_hits) perf_session__process_events(session, &build_id__mark_dso_hit_ops); perf_session__fprintf_dsos_buildid(session, stdout, with_hits); out: perf_session__delete(session); return 0; }
static int perf_session__list_build_ids(bool force, bool with_hits) { struct perf_session *session; symbol__elf_init(); /* * See if this is an ELF file first: */ if (filename__fprintf_build_id(input_name, stdout)) goto out; session = perf_session__new(input_name, O_RDONLY, force, false, &build_id__mark_dso_hit_ops); if (session == NULL) return -1; /* * in pipe-mode, the only way to get the buildids is to parse * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID */ if (with_hits || session->fd_pipe) perf_session__process_events(session, &build_id__mark_dso_hit_ops); perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits); perf_session__delete(session); out: return 0; }
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; }
static int __cmd_buildid_list(void) { int err = -1; struct perf_session *session; session = perf_session__new(input_name, O_RDONLY, force); if (session == NULL) return -1; if (with_hits) perf_session__process_events(session, &build_id__mark_dso_hit_ops); dsos__fprintf_buildid(stdout, with_hits); perf_session__delete(session); return err; }
static int perf_session__list_build_ids(void) { struct perf_session *session; session = perf_session__new(input_name, O_RDONLY, force, false, &build_id__mark_dso_hit_ops); if (session == NULL) return -1; if (with_hits) perf_session__process_events(session, &build_id__mark_dso_hit_ops); perf_session__fprintf_dsos_buildid(session, stdout, with_hits); perf_session__delete(session); return 0; }
static int perf_session__list_build_ids(bool force, bool with_hits) { struct perf_session *session; struct perf_data_file file = { .path = input_name, .mode = PERF_DATA_MODE_READ, .force = force, }; symbol__elf_init(); /* * See if this is an ELF file first: */ if (filename__fprintf_build_id(input_name, stdout) > 0) goto out; session = perf_session__new(&file, false, &build_id__mark_dso_hit_ops); if (session == NULL) return -1; /* * We take all buildids when the file contains AUX area tracing data * because we do not decode the trace because it would take too long. */ if (!perf_data_file__is_pipe(&file) && perf_header__has_feat(&session->header, HEADER_AUXTRACE)) with_hits = false; /* * in pipe-mode, the only way to get the buildids is to parse * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID */ if (with_hits || perf_data_file__is_pipe(&file)) perf_session__process_events(session); perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits); perf_session__delete(session); out: return 0; }