Lines Matching refs:session

42 static int perf_session__deliver_event(struct perf_session *session,
48 static int perf_session__open(struct perf_session *session) in perf_session__open() argument
50 struct perf_data *data = session->data; in perf_session__open()
52 if (perf_session__read_header(session) < 0) { in perf_session__open()
57 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) { in perf_session__open()
65 if (perf_header__has_feat(&session->header, HEADER_STAT)) in perf_session__open()
68 if (!evlist__valid_sample_type(session->evlist)) { in perf_session__open()
73 if (!evlist__valid_sample_id_all(session->evlist)) { in perf_session__open()
78 if (!evlist__valid_read_format(session->evlist)) { in perf_session__open()
86 void perf_session__set_id_hdr_size(struct perf_session *session) in perf_session__set_id_hdr_size() argument
88 u16 id_hdr_size = evlist__id_hdr_size(session->evlist); in perf_session__set_id_hdr_size()
90 machines__set_id_hdr_size(&session->machines, id_hdr_size); in perf_session__set_id_hdr_size()
93 int perf_session__create_kernel_maps(struct perf_session *session) in perf_session__create_kernel_maps() argument
95 int ret = machine__create_kernel_maps(&session->machines.host); in perf_session__create_kernel_maps()
98 ret = machines__create_guest_kernel_maps(&session->machines); in perf_session__create_kernel_maps()
102 static void perf_session__destroy_kernel_maps(struct perf_session *session) in perf_session__destroy_kernel_maps() argument
104 machines__destroy_kernel_maps(&session->machines); in perf_session__destroy_kernel_maps()
107 static bool perf_session__has_comm_exec(struct perf_session *session) in perf_session__has_comm_exec() argument
111 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_comm_exec()
119 static void perf_session__set_comm_exec(struct perf_session *session) in perf_session__set_comm_exec() argument
121 bool comm_exec = perf_session__has_comm_exec(session); in perf_session__set_comm_exec()
123 machines__set_comm_exec(&session->machines, comm_exec); in perf_session__set_comm_exec()
129 struct perf_session *session = container_of(oe, struct perf_session, in ordered_events__deliver_event() local
132 return perf_session__deliver_event(session, event->event, in ordered_events__deliver_event()
133 session->tool, event->file_offset, in ordered_events__deliver_event()
142 struct perf_session *session = zalloc(sizeof(*session)); in __perf_session__new() local
144 if (!session) in __perf_session__new()
147 session->trace_event_repipe = trace_event_repipe; in __perf_session__new()
148 session->tool = tool; in __perf_session__new()
149 session->decomp_data.zstd_decomp = &session->zstd_data; in __perf_session__new()
150 session->active_decomp = &session->decomp_data; in __perf_session__new()
151 INIT_LIST_HEAD(&session->auxtrace_index); in __perf_session__new()
152 machines__init(&session->machines); in __perf_session__new()
153 ordered_events__init(&session->ordered_events, in __perf_session__new()
156 perf_env__init(&session->header.env); in __perf_session__new()
162 session->data = data; in __perf_session__new()
165 ret = perf_session__open(session); in __perf_session__new()
174 perf_session__set_id_hdr_size(session); in __perf_session__new()
175 perf_session__set_comm_exec(session); in __perf_session__new()
178 evlist__init_trace_event_sample_raw(session->evlist); in __perf_session__new()
192 session->machines.host.env = &perf_env; in __perf_session__new()
195 session->machines.host.single_address_space = in __perf_session__new()
196 perf_env__single_address_space(session->machines.host.env); in __perf_session__new()
203 if (perf_session__create_kernel_maps(session) < 0) in __perf_session__new()
212 tool->ordered_events && !evlist__sample_id_all(session->evlist)) { in __perf_session__new()
217 return session; in __perf_session__new()
220 perf_session__delete(session); in __perf_session__new()
240 void perf_session__delete(struct perf_session *session) in perf_session__delete() argument
242 if (session == NULL) in perf_session__delete()
244 auxtrace__free(session); in perf_session__delete()
245 auxtrace_index__free(&session->auxtrace_index); in perf_session__delete()
247 perf_session__destroy_kernel_maps(session); in perf_session__delete()
248 perf_decomp__release_events(session->decomp_data.decomp); in perf_session__delete()
249 perf_env__exit(&session->header.env); in perf_session__delete()
250 machines__exit(&session->machines); in perf_session__delete()
251 if (session->data) { in perf_session__delete()
252 if (perf_data__is_read(session->data)) in perf_session__delete()
253 evlist__delete(session->evlist); in perf_session__delete()
254 perf_data__close(session->data); in perf_session__delete()
257 trace_event__cleanup(&session->tevent); in perf_session__delete()
259 free(session); in perf_session__delete()
1336 static int perf_session__deliver_event(struct perf_session *session, in perf_session__deliver_event() argument
1343 int ret = evlist__parse_sample(session->evlist, event, &sample); in perf_session__deliver_event()
1350 ret = auxtrace__process_event(session, event, &sample, tool); in perf_session__deliver_event()
1356 ret = machines__deliver_event(&session->machines, session->evlist, in perf_session__deliver_event()
1360 auxtrace__dump_auxtrace_sample(session, &sample); in perf_session__deliver_event()
1365 static s64 perf_session__process_user_event(struct perf_session *session, in perf_session__process_user_event() argument
1370 struct ordered_events *oe = &session->ordered_events; in perf_session__process_user_event()
1371 const struct perf_tool *tool = session->tool; in perf_session__process_user_event()
1373 int fd = perf_data__fd(session->data); in perf_session__process_user_event()
1377 dump_event(session->evlist, event, file_offset, &sample, file_path); in perf_session__process_user_event()
1382 err = tool->attr(tool, event, &session->evlist); in perf_session__process_user_event()
1384 perf_session__set_id_hdr_size(session); in perf_session__process_user_event()
1385 perf_session__set_comm_exec(session); in perf_session__process_user_event()
1389 return tool->event_update(tool, event, &session->evlist); in perf_session__process_user_event()
1402 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1404 return tool->tracing_data(session, event); in perf_session__process_user_event()
1406 return tool->build_id(session, event); in perf_session__process_user_event()
1410 return tool->id_index(session, event); in perf_session__process_user_event()
1412 return tool->auxtrace_info(session, event); in perf_session__process_user_event()
1419 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1421 return tool->auxtrace(session, event); in perf_session__process_user_event()
1423 perf_session__auxtrace_error_inc(session, event); in perf_session__process_user_event()
1424 return tool->auxtrace_error(session, event); in perf_session__process_user_event()
1426 return tool->thread_map(session, event); in perf_session__process_user_event()
1428 return tool->cpu_map(session, event); in perf_session__process_user_event()
1430 return tool->stat_config(session, event); in perf_session__process_user_event()
1432 return tool->stat(session, event); in perf_session__process_user_event()
1434 return tool->stat_round(session, event); in perf_session__process_user_event()
1436 session->time_conv = event->time_conv; in perf_session__process_user_event()
1437 return tool->time_conv(session, event); in perf_session__process_user_event()
1439 return tool->feature(session, event); in perf_session__process_user_event()
1441 err = tool->compressed(session, event, file_offset, file_path); in perf_session__process_user_event()
1443 dump_event(session->evlist, event, file_offset, &sample, file_path); in perf_session__process_user_event()
1446 return tool->finished_init(session, event); in perf_session__process_user_event()
1452 int perf_session__deliver_synth_event(struct perf_session *session, in perf_session__deliver_synth_event() argument
1456 struct evlist *evlist = session->evlist; in perf_session__deliver_synth_event()
1457 const struct perf_tool *tool = session->tool; in perf_session__deliver_synth_event()
1462 return perf_session__process_user_event(session, event, 0, NULL); in perf_session__deliver_synth_event()
1464 return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0, NULL); in perf_session__deliver_synth_event()
1467 int perf_session__deliver_synth_attr_event(struct perf_session *session, in perf_session__deliver_synth_attr_event() argument
1488 return perf_session__deliver_synth_event(session, &ev.ev, NULL); in perf_session__deliver_synth_attr_event()
1500 int perf_session__peek_event(struct perf_session *session, off_t file_offset, in perf_session__peek_event() argument
1509 if (session->one_mmap && !session->header.needs_swap) { in perf_session__peek_event()
1510 event = file_offset - session->one_mmap_offset + in perf_session__peek_event()
1511 session->one_mmap_addr; in perf_session__peek_event()
1515 if (perf_data__is_pipe(session->data)) in perf_session__peek_event()
1518 fd = perf_data__fd(session->data); in perf_session__peek_event()
1530 if (session->header.needs_swap) in perf_session__peek_event()
1542 if (session->header.needs_swap) in perf_session__peek_event()
1543 event_swap(event, evlist__sample_id_all(session->evlist)); in perf_session__peek_event()
1548 evlist__parse_sample(session->evlist, event, sample)) in perf_session__peek_event()
1556 int perf_session__peek_events(struct perf_session *session, u64 offset, in perf_session__peek_events() argument
1565 err = perf_session__peek_event(session, offset, buf, in perf_session__peek_events()
1571 err = cb(session, event, offset, data); in perf_session__peek_events()
1584 static s64 perf_session__process_event(struct perf_session *session, in perf_session__process_event() argument
1588 struct evlist *evlist = session->evlist; in perf_session__process_event()
1589 const struct perf_tool *tool = session->tool; in perf_session__process_event()
1592 if (session->header.needs_swap) in perf_session__process_event()
1601 return perf_session__process_user_event(session, event, file_offset, file_path); in perf_session__process_event()
1610 ret = perf_session__queue_event(session, event, timestamp, file_offset, file_path); in perf_session__process_event()
1615 return perf_session__deliver_event(session, event, tool, file_offset, file_path); in perf_session__process_event()
1625 struct thread *perf_session__findnew(struct perf_session *session, pid_t pid) in perf_session__findnew() argument
1627 return machine__findnew_thread(&session->machines.host, -1, pid); in perf_session__findnew()
1630 int perf_session__register_idle_thread(struct perf_session *session) in perf_session__register_idle_thread() argument
1632 struct thread *thread = machine__idle_thread(&session->machines.host); in perf_session__register_idle_thread()
1640 perf_session__warn_order(const struct perf_session *session) in perf_session__warn_order() argument
1642 const struct ordered_events *oe = &session->ordered_events; in perf_session__warn_order()
1646 evlist__for_each_entry(session->evlist, evsel) { in perf_session__warn_order()
1657 static void perf_session__warn_about_errors(const struct perf_session *session) in perf_session__warn_about_errors() argument
1659 const struct events_stats *stats = &session->evlist->stats; in perf_session__warn_about_errors()
1661 if (session->tool->lost == perf_event__process_lost && in perf_session__warn_about_errors()
1669 if (session->tool->lost_samples == perf_event__process_lost_samples) { in perf_session__warn_about_errors()
1681 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1688 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1705 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1740 perf_session__warn_order(session); in perf_session__warn_about_errors()
1762 static int perf_session__flush_thread_stacks(struct perf_session *session) in perf_session__flush_thread_stacks() argument
1764 return machines__for_each_thread(&session->machines, in perf_session__flush_thread_stacks()
1771 static int __perf_session__process_decomp_events(struct perf_session *session);
1773 static int __perf_session__process_pipe_events(struct perf_session *session) in __perf_session__process_pipe_events() argument
1775 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_pipe_events()
1776 const struct perf_tool *tool = session->tool; in __perf_session__process_pipe_events()
1792 if (strcmp(session->data->path, "-") && session->data->file.size) { in __perf_session__process_pipe_events()
1793 ui_progress__init_size(&prog, session->data->file.size, in __perf_session__process_pipe_events()
1807 err = perf_data__read(session->data, event, in __perf_session__process_pipe_events()
1817 if (session->header.needs_swap) in __perf_session__process_pipe_events()
1840 err = perf_data__read(session->data, p, in __perf_session__process_pipe_events()
1853 if ((skip = perf_session__process_event(session, event, head, "pipe")) < 0) { in __perf_session__process_pipe_events()
1865 err = __perf_session__process_decomp_events(session); in __perf_session__process_pipe_events()
1879 err = auxtrace__flush_events(session, tool); in __perf_session__process_pipe_events()
1882 err = perf_session__flush_thread_stacks(session); in __perf_session__process_pipe_events()
1888 perf_session__warn_about_errors(session); in __perf_session__process_pipe_events()
1889 ordered_events__free(&session->ordered_events); in __perf_session__process_pipe_events()
1890 auxtrace__free_events(session); in __perf_session__process_pipe_events()
1945 static int __perf_session__process_decomp_events(struct perf_session *session) in __perf_session__process_decomp_events() argument
1949 struct decomp *decomp = session->active_decomp->decomp_last; in __perf_session__process_decomp_events()
1956 session->header.needs_swap); in __perf_session__process_decomp_events()
1964 (skip = perf_session__process_event(session, event, decomp->file_pos, in __perf_session__process_decomp_events()
1994 typedef s64 (*reader_cb_t)(struct perf_session *session,
2052 reader__mmap(struct reader *rd, struct perf_session *session) in reader__mmap() argument
2063 } else if (session->header.needs_swap) { in reader__mmap()
2086 if (session->one_mmap) { in reader__mmap()
2087 session->one_mmap_addr = buf; in reader__mmap()
2088 session->one_mmap_offset = rd->file_offset; in reader__mmap()
2100 reader__read_event(struct reader *rd, struct perf_session *session, in reader__read_event() argument
2109 session->header.needs_swap); in reader__read_event()
2121 (skip = rd->process(session, event, rd->file_pos, rd->path)) < 0) { in reader__read_event()
2136 err = __perf_session__process_decomp_events(session); in reader__read_event()
2153 reader__process_events(struct reader *rd, struct perf_session *session, in reader__process_events() argument
2158 err = reader__init(rd, &session->one_mmap); in reader__process_events()
2162 session->active_decomp = &rd->decomp_data; in reader__process_events()
2165 err = reader__mmap(rd, session); in reader__process_events()
2170 err = reader__read_event(rd, session, prog); in reader__process_events()
2183 session->active_decomp = &session->decomp_data; in reader__process_events()
2187 static s64 process_simple(struct perf_session *session, in process_simple() argument
2192 return perf_session__process_event(session, event, file_offset, file_path); in process_simple()
2195 static int __perf_session__process_events(struct perf_session *session) in __perf_session__process_events() argument
2198 .fd = perf_data__fd(session->data), in __perf_session__process_events()
2199 .path = session->data->file.path, in __perf_session__process_events()
2200 .data_size = session->header.data_size, in __perf_session__process_events()
2201 .data_offset = session->header.data_offset, in __perf_session__process_events()
2203 .in_place_update = session->data->in_place_update, in __perf_session__process_events()
2205 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_events()
2206 const struct perf_tool *tool = session->tool; in __perf_session__process_events()
2215 err = reader__process_events(&rd, session, &prog); in __perf_session__process_events()
2222 err = auxtrace__flush_events(session, tool); in __perf_session__process_events()
2225 err = perf_session__flush_thread_stacks(session); in __perf_session__process_events()
2229 perf_session__warn_about_errors(session); in __perf_session__process_events()
2234 ordered_events__reinit(&session->ordered_events); in __perf_session__process_events()
2235 auxtrace__free_events(session); in __perf_session__process_events()
2237 session->one_mmap = false; in __perf_session__process_events()
2253 static int __perf_session__process_dir_events(struct perf_session *session) in __perf_session__process_dir_events() argument
2255 struct perf_data *data = session->data; in __perf_session__process_dir_events()
2256 const struct perf_tool *tool = session->tool; in __perf_session__process_dir_events()
2259 u64 total_size = perf_data__size(session->data); in __perf_session__process_dir_events()
2275 .fd = perf_data__fd(session->data), in __perf_session__process_dir_events()
2276 .path = session->data->file.path, in __perf_session__process_dir_events()
2277 .data_size = session->header.data_size, in __perf_session__process_dir_events()
2278 .data_offset = session->header.data_offset, in __perf_session__process_dir_events()
2280 .in_place_update = session->data->in_place_update, in __perf_session__process_dir_events()
2285 ret = reader__mmap(&rd[0], session); in __perf_session__process_dir_events()
2299 .in_place_update = session->data->in_place_update, in __perf_session__process_dir_events()
2304 ret = reader__mmap(&rd[readers], session); in __perf_session__process_dir_events()
2325 session->active_decomp = &rd[i].decomp_data; in __perf_session__process_dir_events()
2326 ret = reader__read_event(&rd[i], session, &prog); in __perf_session__process_dir_events()
2330 ret = reader__mmap(&rd[i], session); in __perf_session__process_dir_events()
2341 ret = ordered_events__flush(&session->ordered_events, OE_FLUSH__FINAL); in __perf_session__process_dir_events()
2345 ret = perf_session__flush_thread_stacks(session); in __perf_session__process_dir_events()
2350 perf_session__warn_about_errors(session); in __perf_session__process_dir_events()
2356 ordered_events__reinit(&session->ordered_events); in __perf_session__process_dir_events()
2358 session->one_mmap = false; in __perf_session__process_dir_events()
2360 session->active_decomp = &session->decomp_data; in __perf_session__process_dir_events()
2368 int perf_session__process_events(struct perf_session *session) in perf_session__process_events() argument
2370 if (perf_session__register_idle_thread(session) < 0) in perf_session__process_events()
2373 if (perf_data__is_pipe(session->data)) in perf_session__process_events()
2374 return __perf_session__process_pipe_events(session); in perf_session__process_events()
2376 if (perf_data__is_dir(session->data) && session->data->dir.nr) in perf_session__process_events()
2377 return __perf_session__process_dir_events(session); in perf_session__process_events()
2379 return __perf_session__process_events(session); in perf_session__process_events()
2382 bool perf_session__has_traces(struct perf_session *session, const char *msg) in perf_session__has_traces() argument
2386 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_traces()
2424 size_t perf_session__fprintf_dsos(struct perf_session *session, FILE *fp) in perf_session__fprintf_dsos() argument
2426 return machines__fprintf_dsos(&session->machines, fp); in perf_session__fprintf_dsos()
2429 size_t perf_session__fprintf_dsos_buildid(struct perf_session *session, FILE *fp, in perf_session__fprintf_dsos_buildid() argument
2432 return machines__fprintf_dsos_buildid(&session->machines, fp, skip, parm); in perf_session__fprintf_dsos_buildid()
2435 size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp) in perf_session__fprintf_nr_events() argument
2440 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) in perf_session__fprintf_nr_events()
2445 ret += events_stats__fprintf(&session->evlist->stats, fp); in perf_session__fprintf_nr_events()
2449 size_t perf_session__fprintf(struct perf_session *session, FILE *fp) in perf_session__fprintf() argument
2455 return machine__fprintf(&session->machines.host, fp); in perf_session__fprintf()
2458 void perf_session__dump_kmaps(struct perf_session *session) in perf_session__dump_kmaps() argument
2465 maps__fprintf(machine__kernel_maps(&session->machines.host), stderr); in perf_session__dump_kmaps()
2469 struct evsel *perf_session__find_first_evtype(struct perf_session *session, in perf_session__find_first_evtype() argument
2474 evlist__for_each_entry(session->evlist, pos) { in perf_session__find_first_evtype()
2481 int perf_session__cpu_bitmap(struct perf_session *session, in perf_session__cpu_bitmap() argument
2486 int nr_cpus = min(session->header.env.nr_cpus_avail, MAX_NR_CPUS); in perf_session__cpu_bitmap()
2492 evsel = perf_session__find_first_evtype(session, i); in perf_session__cpu_bitmap()
2526 void perf_session__fprintf_info(struct perf_session *session, FILE *fp, in perf_session__fprintf_info() argument
2529 if (session == NULL || fp == NULL) in perf_session__fprintf_info()
2533 perf_header__fprintf_info(session, fp, full); in perf_session__fprintf_info()
2537 static int perf_session__register_guest(struct perf_session *session, pid_t machine_pid) in perf_session__register_guest() argument
2539 struct machine *machine = machines__findnew(&session->machines, machine_pid); in perf_session__register_guest()
2545 machine->single_address_space = session->machines.host.single_address_space; in perf_session__register_guest()
2552 machine->kallsyms_filename = perf_data__guest_kallsyms_name(session->data, machine_pid); in perf_session__register_guest()
2557 static int perf_session__set_guest_cpu(struct perf_session *session, pid_t pid, in perf_session__set_guest_cpu() argument
2560 struct machine *machine = &session->machines.host; in perf_session__set_guest_cpu()
2571 int perf_event__process_id_index(struct perf_session *session, in perf_event__process_id_index() argument
2574 struct evlist *evlist = session->evlist; in perf_event__process_id_index()
2641 ret = perf_session__register_guest(session, sid->machine_pid); in perf_event__process_id_index()
2648 ret = perf_session__set_guest_cpu(session, sid->machine_pid, e->tid, e2->vcpu); in perf_event__process_id_index()
2655 int perf_session__dsos_hit_all(struct perf_session *session) in perf_session__dsos_hit_all() argument
2660 err = machine__hit_all_dsos(&session->machines.host); in perf_session__dsos_hit_all()
2664 for (nd = rb_first_cached(&session->machines.guests); nd; in perf_session__dsos_hit_all()