Lines Matching refs:session

42 static int perf_session__process_compressed_event(struct perf_session *session,  in perf_session__process_compressed_event()  argument
49 size_t mmap_len, decomp_len = session->header.env.comp_mmap_len; in perf_session__process_compressed_event()
50 struct decomp *decomp, *decomp_last = session->active_decomp->decomp_last; in perf_session__process_compressed_event()
78 decomp_size = zstd_decompress_stream(session->active_decomp->zstd_decomp, src, src_size, in perf_session__process_compressed_event()
88 if (session->active_decomp->decomp == NULL) in perf_session__process_compressed_event()
89 session->active_decomp->decomp = decomp; in perf_session__process_compressed_event()
91 session->active_decomp->decomp_last->next = decomp; in perf_session__process_compressed_event()
93 session->active_decomp->decomp_last = decomp; in perf_session__process_compressed_event()
103 static int perf_session__deliver_event(struct perf_session *session,
109 static int perf_session__open(struct perf_session *session, int repipe_fd) in perf_session__open() argument
111 struct perf_data *data = session->data; in perf_session__open()
113 if (perf_session__read_header(session, repipe_fd) < 0) { in perf_session__open()
121 if (perf_header__has_feat(&session->header, HEADER_STAT)) in perf_session__open()
124 if (!evlist__valid_sample_type(session->evlist)) { in perf_session__open()
129 if (!evlist__valid_sample_id_all(session->evlist)) { in perf_session__open()
134 if (!evlist__valid_read_format(session->evlist)) { in perf_session__open()
142 void perf_session__set_id_hdr_size(struct perf_session *session) in perf_session__set_id_hdr_size() argument
144 u16 id_hdr_size = evlist__id_hdr_size(session->evlist); in perf_session__set_id_hdr_size()
146 machines__set_id_hdr_size(&session->machines, id_hdr_size); in perf_session__set_id_hdr_size()
149 int perf_session__create_kernel_maps(struct perf_session *session) in perf_session__create_kernel_maps() argument
151 int ret = machine__create_kernel_maps(&session->machines.host); in perf_session__create_kernel_maps()
154 ret = machines__create_guest_kernel_maps(&session->machines); in perf_session__create_kernel_maps()
158 static void perf_session__destroy_kernel_maps(struct perf_session *session) in perf_session__destroy_kernel_maps() argument
160 machines__destroy_kernel_maps(&session->machines); in perf_session__destroy_kernel_maps()
163 static bool perf_session__has_comm_exec(struct perf_session *session) in perf_session__has_comm_exec() argument
167 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_comm_exec()
175 static void perf_session__set_comm_exec(struct perf_session *session) in perf_session__set_comm_exec() argument
177 bool comm_exec = perf_session__has_comm_exec(session); in perf_session__set_comm_exec()
179 machines__set_comm_exec(&session->machines, comm_exec); in perf_session__set_comm_exec()
185 struct perf_session *session = container_of(oe, struct perf_session, in ordered_events__deliver_event() local
188 return perf_session__deliver_event(session, event->event, in ordered_events__deliver_event()
189 session->tool, event->file_offset, in ordered_events__deliver_event()
198 struct perf_session *session = zalloc(sizeof(*session)); in __perf_session__new() local
200 if (!session) in __perf_session__new()
203 session->repipe = repipe; in __perf_session__new()
204 session->tool = tool; in __perf_session__new()
205 session->decomp_data.zstd_decomp = &session->zstd_data; in __perf_session__new()
206 session->active_decomp = &session->decomp_data; in __perf_session__new()
207 INIT_LIST_HEAD(&session->auxtrace_index); in __perf_session__new()
208 machines__init(&session->machines); in __perf_session__new()
209 ordered_events__init(&session->ordered_events, in __perf_session__new()
212 perf_env__init(&session->header.env); in __perf_session__new()
218 session->data = data; in __perf_session__new()
221 ret = perf_session__open(session, repipe_fd); in __perf_session__new()
230 perf_session__set_id_hdr_size(session); in __perf_session__new()
231 perf_session__set_comm_exec(session); in __perf_session__new()
234 evlist__init_trace_event_sample_raw(session->evlist); in __perf_session__new()
248 session->machines.host.env = &perf_env; in __perf_session__new()
251 session->machines.host.single_address_space = in __perf_session__new()
252 perf_env__single_address_space(session->machines.host.env); in __perf_session__new()
259 if (perf_session__create_kernel_maps(session) < 0) in __perf_session__new()
268 tool->ordered_events && !evlist__sample_id_all(session->evlist)) { in __perf_session__new()
273 return session; in __perf_session__new()
276 perf_session__delete(session); in __perf_session__new()
281 static void perf_session__delete_threads(struct perf_session *session) in perf_session__delete_threads() argument
283 machine__delete_threads(&session->machines.host); in perf_session__delete_threads()
301 void perf_session__delete(struct perf_session *session) in perf_session__delete() argument
303 if (session == NULL) in perf_session__delete()
305 auxtrace__free(session); in perf_session__delete()
306 auxtrace_index__free(&session->auxtrace_index); in perf_session__delete()
307 perf_session__destroy_kernel_maps(session); in perf_session__delete()
308 perf_session__delete_threads(session); in perf_session__delete()
309 perf_decomp__release_events(session->decomp_data.decomp); in perf_session__delete()
310 perf_env__exit(&session->header.env); in perf_session__delete()
311 machines__exit(&session->machines); in perf_session__delete()
312 if (session->data) { in perf_session__delete()
313 if (perf_data__is_read(session->data)) in perf_session__delete()
314 evlist__delete(session->evlist); in perf_session__delete()
315 perf_data__close(session->data); in perf_session__delete()
318 trace_event__cleanup(&session->tevent); in perf_session__delete()
320 free(session); in perf_session__delete()
323 static int process_event_synth_tracing_data_stub(struct perf_session *session in process_event_synth_tracing_data_stub()
395 static s64 process_event_auxtrace_stub(struct perf_session *session __maybe_unused, in process_event_auxtrace_stub()
399 if (perf_data__is_pipe(session->data)) in process_event_auxtrace_stub()
400 skipn(perf_data__fd(session->data), event->auxtrace.size); in process_event_auxtrace_stub()
404 static int process_event_op2_stub(struct perf_session *session __maybe_unused, in process_event_op2_stub()
413 int process_event_thread_map_stub(struct perf_session *session __maybe_unused, in process_event_thread_map_stub()
424 int process_event_cpu_map_stub(struct perf_session *session __maybe_unused, in process_event_cpu_map_stub()
435 int process_event_stat_config_stub(struct perf_session *session __maybe_unused, in process_event_stat_config_stub()
475 static int perf_session__process_compressed_event_stub(struct perf_session *session __maybe_unused, in perf_session__process_compressed_event_stub()
1624 static int perf_session__deliver_event(struct perf_session *session, in perf_session__deliver_event() argument
1631 int ret = evlist__parse_sample(session->evlist, event, &sample); in perf_session__deliver_event()
1638 ret = auxtrace__process_event(session, event, &sample, tool); in perf_session__deliver_event()
1644 ret = machines__deliver_event(&session->machines, session->evlist, in perf_session__deliver_event()
1648 auxtrace__dump_auxtrace_sample(session, &sample); in perf_session__deliver_event()
1653 static s64 perf_session__process_user_event(struct perf_session *session, in perf_session__process_user_event() argument
1658 struct ordered_events *oe = &session->ordered_events; in perf_session__process_user_event()
1659 struct perf_tool *tool = session->tool; in perf_session__process_user_event()
1661 int fd = perf_data__fd(session->data); in perf_session__process_user_event()
1666 dump_event(session->evlist, event, file_offset, &sample, file_path); in perf_session__process_user_event()
1671 err = tool->attr(tool, event, &session->evlist); in perf_session__process_user_event()
1673 perf_session__set_id_hdr_size(session); in perf_session__process_user_event()
1674 perf_session__set_comm_exec(session); in perf_session__process_user_event()
1678 return tool->event_update(tool, event, &session->evlist); in perf_session__process_user_event()
1691 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1693 return tool->tracing_data(session, event); in perf_session__process_user_event()
1695 return tool->build_id(session, event); in perf_session__process_user_event()
1699 return tool->id_index(session, event); in perf_session__process_user_event()
1701 return tool->auxtrace_info(session, event); in perf_session__process_user_event()
1708 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1710 return tool->auxtrace(session, event); in perf_session__process_user_event()
1712 perf_session__auxtrace_error_inc(session, event); in perf_session__process_user_event()
1713 return tool->auxtrace_error(session, event); in perf_session__process_user_event()
1715 return tool->thread_map(session, event); in perf_session__process_user_event()
1717 return tool->cpu_map(session, event); in perf_session__process_user_event()
1719 return tool->stat_config(session, event); in perf_session__process_user_event()
1721 return tool->stat(session, event); in perf_session__process_user_event()
1723 return tool->stat_round(session, event); in perf_session__process_user_event()
1725 session->time_conv = event->time_conv; in perf_session__process_user_event()
1726 return tool->time_conv(session, event); in perf_session__process_user_event()
1728 return tool->feature(session, event); in perf_session__process_user_event()
1730 err = tool->compressed(session, event, file_offset, file_path); in perf_session__process_user_event()
1732 dump_event(session->evlist, event, file_offset, &sample, file_path); in perf_session__process_user_event()
1735 return tool->finished_init(session, event); in perf_session__process_user_event()
1741 int perf_session__deliver_synth_event(struct perf_session *session, in perf_session__deliver_synth_event() argument
1745 struct evlist *evlist = session->evlist; in perf_session__deliver_synth_event()
1746 struct perf_tool *tool = session->tool; in perf_session__deliver_synth_event()
1751 return perf_session__process_user_event(session, event, 0, NULL); in perf_session__deliver_synth_event()
1753 return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0, NULL); in perf_session__deliver_synth_event()
1765 int perf_session__peek_event(struct perf_session *session, off_t file_offset, in perf_session__peek_event() argument
1774 if (session->one_mmap && !session->header.needs_swap) { in perf_session__peek_event()
1775 event = file_offset - session->one_mmap_offset + in perf_session__peek_event()
1776 session->one_mmap_addr; in perf_session__peek_event()
1780 if (perf_data__is_pipe(session->data)) in perf_session__peek_event()
1783 fd = perf_data__fd(session->data); in perf_session__peek_event()
1795 if (session->header.needs_swap) in perf_session__peek_event()
1807 if (session->header.needs_swap) in perf_session__peek_event()
1808 event_swap(event, evlist__sample_id_all(session->evlist)); in perf_session__peek_event()
1813 evlist__parse_sample(session->evlist, event, sample)) in perf_session__peek_event()
1821 int perf_session__peek_events(struct perf_session *session, u64 offset, in perf_session__peek_events() argument
1830 err = perf_session__peek_event(session, offset, buf, in perf_session__peek_events()
1836 err = cb(session, event, offset, data); in perf_session__peek_events()
1849 static s64 perf_session__process_event(struct perf_session *session, in perf_session__process_event() argument
1853 struct evlist *evlist = session->evlist; in perf_session__process_event()
1854 struct perf_tool *tool = session->tool; in perf_session__process_event()
1857 if (session->header.needs_swap) in perf_session__process_event()
1866 return perf_session__process_user_event(session, event, file_offset, file_path); in perf_session__process_event()
1875 ret = perf_session__queue_event(session, event, timestamp, file_offset, file_path); in perf_session__process_event()
1880 return perf_session__deliver_event(session, event, tool, file_offset, file_path); in perf_session__process_event()
1890 struct thread *perf_session__findnew(struct perf_session *session, pid_t pid) in perf_session__findnew() argument
1892 return machine__findnew_thread(&session->machines.host, -1, pid); in perf_session__findnew()
1895 int perf_session__register_idle_thread(struct perf_session *session) in perf_session__register_idle_thread() argument
1897 struct thread *thread = machine__idle_thread(&session->machines.host); in perf_session__register_idle_thread()
1905 perf_session__warn_order(const struct perf_session *session) in perf_session__warn_order() argument
1907 const struct ordered_events *oe = &session->ordered_events; in perf_session__warn_order()
1911 evlist__for_each_entry(session->evlist, evsel) { in perf_session__warn_order()
1922 static void perf_session__warn_about_errors(const struct perf_session *session) in perf_session__warn_about_errors() argument
1924 const struct events_stats *stats = &session->evlist->stats; in perf_session__warn_about_errors()
1926 if (session->tool->lost == perf_event__process_lost && in perf_session__warn_about_errors()
1934 if (session->tool->lost_samples == perf_event__process_lost_samples) { in perf_session__warn_about_errors()
1946 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1953 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1970 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
2005 perf_session__warn_order(session); in perf_session__warn_about_errors()
2027 static int perf_session__flush_thread_stacks(struct perf_session *session) in perf_session__flush_thread_stacks() argument
2029 return machines__for_each_thread(&session->machines, in perf_session__flush_thread_stacks()
2036 static int __perf_session__process_decomp_events(struct perf_session *session);
2038 static int __perf_session__process_pipe_events(struct perf_session *session) in __perf_session__process_pipe_events() argument
2040 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_pipe_events()
2041 struct perf_tool *tool = session->tool; in __perf_session__process_pipe_events()
2061 err = perf_data__read(session->data, event, in __perf_session__process_pipe_events()
2071 if (session->header.needs_swap) in __perf_session__process_pipe_events()
2094 err = perf_data__read(session->data, p, in __perf_session__process_pipe_events()
2107 if ((skip = perf_session__process_event(session, event, head, "pipe")) < 0) { in __perf_session__process_pipe_events()
2119 err = __perf_session__process_decomp_events(session); in __perf_session__process_pipe_events()
2130 err = auxtrace__flush_events(session, tool); in __perf_session__process_pipe_events()
2133 err = perf_session__flush_thread_stacks(session); in __perf_session__process_pipe_events()
2137 perf_session__warn_about_errors(session); in __perf_session__process_pipe_events()
2138 ordered_events__free(&session->ordered_events); in __perf_session__process_pipe_events()
2139 auxtrace__free_events(session); in __perf_session__process_pipe_events()
2194 static int __perf_session__process_decomp_events(struct perf_session *session) in __perf_session__process_decomp_events() argument
2198 struct decomp *decomp = session->active_decomp->decomp_last; in __perf_session__process_decomp_events()
2205 session->header.needs_swap); in __perf_session__process_decomp_events()
2213 (skip = perf_session__process_event(session, event, decomp->file_pos, in __perf_session__process_decomp_events()
2243 typedef s64 (*reader_cb_t)(struct perf_session *session,
2301 reader__mmap(struct reader *rd, struct perf_session *session) in reader__mmap() argument
2312 } else if (session->header.needs_swap) { in reader__mmap()
2335 if (session->one_mmap) { in reader__mmap()
2336 session->one_mmap_addr = buf; in reader__mmap()
2337 session->one_mmap_offset = rd->file_offset; in reader__mmap()
2349 reader__read_event(struct reader *rd, struct perf_session *session, in reader__read_event() argument
2358 session->header.needs_swap); in reader__read_event()
2370 (skip = rd->process(session, event, rd->file_pos, rd->path)) < 0) { in reader__read_event()
2385 err = __perf_session__process_decomp_events(session); in reader__read_event()
2402 reader__process_events(struct reader *rd, struct perf_session *session, in reader__process_events() argument
2407 err = reader__init(rd, &session->one_mmap); in reader__process_events()
2411 session->active_decomp = &rd->decomp_data; in reader__process_events()
2414 err = reader__mmap(rd, session); in reader__process_events()
2419 err = reader__read_event(rd, session, prog); in reader__process_events()
2432 session->active_decomp = &session->decomp_data; in reader__process_events()
2436 static s64 process_simple(struct perf_session *session, in process_simple() argument
2441 return perf_session__process_event(session, event, file_offset, file_path); in process_simple()
2444 static int __perf_session__process_events(struct perf_session *session) in __perf_session__process_events() argument
2447 .fd = perf_data__fd(session->data), in __perf_session__process_events()
2448 .path = session->data->file.path, in __perf_session__process_events()
2449 .data_size = session->header.data_size, in __perf_session__process_events()
2450 .data_offset = session->header.data_offset, in __perf_session__process_events()
2452 .in_place_update = session->data->in_place_update, in __perf_session__process_events()
2454 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_events()
2455 struct perf_tool *tool = session->tool; in __perf_session__process_events()
2466 err = reader__process_events(&rd, session, &prog); in __perf_session__process_events()
2473 err = auxtrace__flush_events(session, tool); in __perf_session__process_events()
2476 err = perf_session__flush_thread_stacks(session); in __perf_session__process_events()
2480 perf_session__warn_about_errors(session); in __perf_session__process_events()
2485 ordered_events__reinit(&session->ordered_events); in __perf_session__process_events()
2486 auxtrace__free_events(session); in __perf_session__process_events()
2488 session->one_mmap = false; in __perf_session__process_events()
2504 static int __perf_session__process_dir_events(struct perf_session *session) in __perf_session__process_dir_events() argument
2506 struct perf_data *data = session->data; in __perf_session__process_dir_events()
2507 struct perf_tool *tool = session->tool; in __perf_session__process_dir_events()
2510 u64 total_size = perf_data__size(session->data); in __perf_session__process_dir_events()
2528 .fd = perf_data__fd(session->data), in __perf_session__process_dir_events()
2529 .path = session->data->file.path, in __perf_session__process_dir_events()
2530 .data_size = session->header.data_size, in __perf_session__process_dir_events()
2531 .data_offset = session->header.data_offset, in __perf_session__process_dir_events()
2533 .in_place_update = session->data->in_place_update, in __perf_session__process_dir_events()
2538 ret = reader__mmap(&rd[0], session); in __perf_session__process_dir_events()
2552 .in_place_update = session->data->in_place_update, in __perf_session__process_dir_events()
2557 ret = reader__mmap(&rd[readers], session); in __perf_session__process_dir_events()
2578 session->active_decomp = &rd[i].decomp_data; in __perf_session__process_dir_events()
2579 ret = reader__read_event(&rd[i], session, &prog); in __perf_session__process_dir_events()
2583 ret = reader__mmap(&rd[i], session); in __perf_session__process_dir_events()
2594 ret = ordered_events__flush(&session->ordered_events, OE_FLUSH__FINAL); in __perf_session__process_dir_events()
2598 ret = perf_session__flush_thread_stacks(session); in __perf_session__process_dir_events()
2603 perf_session__warn_about_errors(session); in __perf_session__process_dir_events()
2609 ordered_events__reinit(&session->ordered_events); in __perf_session__process_dir_events()
2611 session->one_mmap = false; in __perf_session__process_dir_events()
2613 session->active_decomp = &session->decomp_data; in __perf_session__process_dir_events()
2621 int perf_session__process_events(struct perf_session *session) in perf_session__process_events() argument
2623 if (perf_session__register_idle_thread(session) < 0) in perf_session__process_events()
2626 if (perf_data__is_pipe(session->data)) in perf_session__process_events()
2627 return __perf_session__process_pipe_events(session); in perf_session__process_events()
2629 if (perf_data__is_dir(session->data) && session->data->dir.nr) in perf_session__process_events()
2630 return __perf_session__process_dir_events(session); in perf_session__process_events()
2632 return __perf_session__process_events(session); in perf_session__process_events()
2635 bool perf_session__has_traces(struct perf_session *session, const char *msg) in perf_session__has_traces() argument
2639 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_traces()
2677 size_t perf_session__fprintf_dsos(struct perf_session *session, FILE *fp) in perf_session__fprintf_dsos() argument
2679 return machines__fprintf_dsos(&session->machines, fp); in perf_session__fprintf_dsos()
2682 size_t perf_session__fprintf_dsos_buildid(struct perf_session *session, FILE *fp, in perf_session__fprintf_dsos_buildid() argument
2685 return machines__fprintf_dsos_buildid(&session->machines, fp, skip, parm); in perf_session__fprintf_dsos_buildid()
2688 size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp, in perf_session__fprintf_nr_events() argument
2694 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) in perf_session__fprintf_nr_events()
2699 ret += events_stats__fprintf(&session->evlist->stats, fp, skip_empty); in perf_session__fprintf_nr_events()
2703 size_t perf_session__fprintf(struct perf_session *session, FILE *fp) in perf_session__fprintf() argument
2709 return machine__fprintf(&session->machines.host, fp); in perf_session__fprintf()
2712 struct evsel *perf_session__find_first_evtype(struct perf_session *session, in perf_session__find_first_evtype() argument
2717 evlist__for_each_entry(session->evlist, pos) { in perf_session__find_first_evtype()
2724 int perf_session__cpu_bitmap(struct perf_session *session, in perf_session__cpu_bitmap() argument
2729 int nr_cpus = min(session->header.env.nr_cpus_avail, MAX_NR_CPUS); in perf_session__cpu_bitmap()
2734 evsel = perf_session__find_first_evtype(session, i); in perf_session__cpu_bitmap()
2770 void perf_session__fprintf_info(struct perf_session *session, FILE *fp, in perf_session__fprintf_info() argument
2773 if (session == NULL || fp == NULL) in perf_session__fprintf_info()
2777 perf_header__fprintf_info(session, fp, full); in perf_session__fprintf_info()
2781 static int perf_session__register_guest(struct perf_session *session, pid_t machine_pid) in perf_session__register_guest() argument
2783 struct machine *machine = machines__findnew(&session->machines, machine_pid); in perf_session__register_guest()
2789 machine->single_address_space = session->machines.host.single_address_space; in perf_session__register_guest()
2796 machine->kallsyms_filename = perf_data__guest_kallsyms_name(session->data, machine_pid); in perf_session__register_guest()
2801 static int perf_session__set_guest_cpu(struct perf_session *session, pid_t pid, in perf_session__set_guest_cpu() argument
2804 struct machine *machine = &session->machines.host; in perf_session__set_guest_cpu()
2815 int perf_event__process_id_index(struct perf_session *session, in perf_event__process_id_index() argument
2818 struct evlist *evlist = session->evlist; in perf_event__process_id_index()
2885 ret = perf_session__register_guest(session, sid->machine_pid); in perf_event__process_id_index()
2892 ret = perf_session__set_guest_cpu(session, sid->machine_pid, e->tid, e2->vcpu); in perf_event__process_id_index()