Lines Matching refs:session
39 static int perf_session__process_compressed_event(struct perf_session *session, in perf_session__process_compressed_event() argument
45 size_t mmap_len, decomp_len = session->header.env.comp_mmap_len; in perf_session__process_compressed_event()
46 struct decomp *decomp, *decomp_last = session->decomp_last; in perf_session__process_compressed_event()
73 decomp_size = zstd_decompress_stream(&(session->zstd_data), src, src_size, in perf_session__process_compressed_event()
83 if (session->decomp == NULL) { in perf_session__process_compressed_event()
84 session->decomp = decomp; in perf_session__process_compressed_event()
85 session->decomp_last = decomp; in perf_session__process_compressed_event()
87 session->decomp_last->next = decomp; in perf_session__process_compressed_event()
88 session->decomp_last = decomp; in perf_session__process_compressed_event()
99 static int perf_session__deliver_event(struct perf_session *session,
104 static int perf_session__open(struct perf_session *session) in perf_session__open() argument
106 struct perf_data *data = session->data; in perf_session__open()
108 if (perf_session__read_header(session) < 0) { in perf_session__open()
116 if (perf_header__has_feat(&session->header, HEADER_STAT)) in perf_session__open()
119 if (!perf_evlist__valid_sample_type(session->evlist)) { in perf_session__open()
124 if (!perf_evlist__valid_sample_id_all(session->evlist)) { in perf_session__open()
129 if (!perf_evlist__valid_read_format(session->evlist)) { in perf_session__open()
137 void perf_session__set_id_hdr_size(struct perf_session *session) in perf_session__set_id_hdr_size() argument
139 u16 id_hdr_size = perf_evlist__id_hdr_size(session->evlist); in perf_session__set_id_hdr_size()
141 machines__set_id_hdr_size(&session->machines, id_hdr_size); in perf_session__set_id_hdr_size()
144 int perf_session__create_kernel_maps(struct perf_session *session) in perf_session__create_kernel_maps() argument
146 int ret = machine__create_kernel_maps(&session->machines.host); in perf_session__create_kernel_maps()
149 ret = machines__create_guest_kernel_maps(&session->machines); in perf_session__create_kernel_maps()
153 static void perf_session__destroy_kernel_maps(struct perf_session *session) in perf_session__destroy_kernel_maps() argument
155 machines__destroy_kernel_maps(&session->machines); in perf_session__destroy_kernel_maps()
158 static bool perf_session__has_comm_exec(struct perf_session *session) in perf_session__has_comm_exec() argument
162 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_comm_exec()
170 static void perf_session__set_comm_exec(struct perf_session *session) in perf_session__set_comm_exec() argument
172 bool comm_exec = perf_session__has_comm_exec(session); in perf_session__set_comm_exec()
174 machines__set_comm_exec(&session->machines, comm_exec); in perf_session__set_comm_exec()
180 struct perf_session *session = container_of(oe, struct perf_session, in ordered_events__deliver_event() local
183 return perf_session__deliver_event(session, event->event, in ordered_events__deliver_event()
184 session->tool, event->file_offset); in ordered_events__deliver_event()
191 struct perf_session *session = zalloc(sizeof(*session)); in perf_session__new() local
193 if (!session) in perf_session__new()
196 session->repipe = repipe; in perf_session__new()
197 session->tool = tool; in perf_session__new()
198 INIT_LIST_HEAD(&session->auxtrace_index); in perf_session__new()
199 machines__init(&session->machines); in perf_session__new()
200 ordered_events__init(&session->ordered_events, in perf_session__new()
203 perf_env__init(&session->header.env); in perf_session__new()
209 session->data = data; in perf_session__new()
212 ret = perf_session__open(session); in perf_session__new()
221 perf_session__set_id_hdr_size(session); in perf_session__new()
222 perf_session__set_comm_exec(session); in perf_session__new()
225 perf_evlist__init_trace_event_sample_raw(session->evlist); in perf_session__new()
235 session->machines.host.env = &perf_env; in perf_session__new()
238 session->machines.host.single_address_space = in perf_session__new()
239 perf_env__single_address_space(session->machines.host.env); in perf_session__new()
246 if (perf_session__create_kernel_maps(session) < 0) in perf_session__new()
255 tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) { in perf_session__new()
260 return session; in perf_session__new()
263 perf_session__delete(session); in perf_session__new()
268 static void perf_session__delete_threads(struct perf_session *session) in perf_session__delete_threads() argument
270 machine__delete_threads(&session->machines.host); in perf_session__delete_threads()
273 static void perf_session__release_decomp_events(struct perf_session *session) in perf_session__release_decomp_events() argument
277 next = session->decomp; in perf_session__release_decomp_events()
288 void perf_session__delete(struct perf_session *session) in perf_session__delete() argument
290 if (session == NULL) in perf_session__delete()
292 auxtrace__free(session); in perf_session__delete()
293 auxtrace_index__free(&session->auxtrace_index); in perf_session__delete()
294 perf_session__destroy_kernel_maps(session); in perf_session__delete()
295 perf_session__delete_threads(session); in perf_session__delete()
296 perf_session__release_decomp_events(session); in perf_session__delete()
297 perf_env__exit(&session->header.env); in perf_session__delete()
298 machines__exit(&session->machines); in perf_session__delete()
299 if (session->data) in perf_session__delete()
300 perf_data__close(session->data); in perf_session__delete()
301 free(session); in perf_session__delete()
304 static int process_event_synth_tracing_data_stub(struct perf_session *session in process_event_synth_tracing_data_stub()
380 static s64 process_event_auxtrace_stub(struct perf_session *session __maybe_unused, in process_event_auxtrace_stub()
384 if (perf_data__is_pipe(session->data)) in process_event_auxtrace_stub()
385 skipn(perf_data__fd(session->data), event->auxtrace.size); in process_event_auxtrace_stub()
389 static int process_event_op2_stub(struct perf_session *session __maybe_unused, in process_event_op2_stub()
398 int process_event_thread_map_stub(struct perf_session *session __maybe_unused, in process_event_thread_map_stub()
409 int process_event_cpu_map_stub(struct perf_session *session __maybe_unused, in process_event_cpu_map_stub()
420 int process_event_stat_config_stub(struct perf_session *session __maybe_unused, in process_event_stat_config_stub()
450 static int perf_session__process_compressed_event_stub(struct perf_session *session __maybe_unused, in perf_session__process_compressed_event_stub()
1474 static int perf_session__deliver_event(struct perf_session *session, in perf_session__deliver_event() argument
1482 ret = perf_evlist__parse_sample(session->evlist, event, &sample); in perf_session__deliver_event()
1488 ret = auxtrace__process_event(session, event, &sample, tool); in perf_session__deliver_event()
1494 return machines__deliver_event(&session->machines, session->evlist, in perf_session__deliver_event()
1498 static s64 perf_session__process_user_event(struct perf_session *session, in perf_session__process_user_event() argument
1502 struct ordered_events *oe = &session->ordered_events; in perf_session__process_user_event()
1503 struct perf_tool *tool = session->tool; in perf_session__process_user_event()
1505 int fd = perf_data__fd(session->data); in perf_session__process_user_event()
1510 dump_event(session->evlist, event, file_offset, &sample); in perf_session__process_user_event()
1515 err = tool->attr(tool, event, &session->evlist); in perf_session__process_user_event()
1517 perf_session__set_id_hdr_size(session); in perf_session__process_user_event()
1518 perf_session__set_comm_exec(session); in perf_session__process_user_event()
1522 return tool->event_update(tool, event, &session->evlist); in perf_session__process_user_event()
1532 return tool->tracing_data(session, event); in perf_session__process_user_event()
1534 return tool->build_id(session, event); in perf_session__process_user_event()
1538 return tool->id_index(session, event); in perf_session__process_user_event()
1540 return tool->auxtrace_info(session, event); in perf_session__process_user_event()
1544 return tool->auxtrace(session, event); in perf_session__process_user_event()
1546 perf_session__auxtrace_error_inc(session, event); in perf_session__process_user_event()
1547 return tool->auxtrace_error(session, event); in perf_session__process_user_event()
1549 return tool->thread_map(session, event); in perf_session__process_user_event()
1551 return tool->cpu_map(session, event); in perf_session__process_user_event()
1553 return tool->stat_config(session, event); in perf_session__process_user_event()
1555 return tool->stat(session, event); in perf_session__process_user_event()
1557 return tool->stat_round(session, event); in perf_session__process_user_event()
1559 session->time_conv = event->time_conv; in perf_session__process_user_event()
1560 return tool->time_conv(session, event); in perf_session__process_user_event()
1562 return tool->feature(session, event); in perf_session__process_user_event()
1564 err = tool->compressed(session, event, file_offset); in perf_session__process_user_event()
1566 dump_event(session->evlist, event, file_offset, &sample); in perf_session__process_user_event()
1573 int perf_session__deliver_synth_event(struct perf_session *session, in perf_session__deliver_synth_event() argument
1577 struct evlist *evlist = session->evlist; in perf_session__deliver_synth_event()
1578 struct perf_tool *tool = session->tool; in perf_session__deliver_synth_event()
1583 return perf_session__process_user_event(session, event, 0); in perf_session__deliver_synth_event()
1585 return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); in perf_session__deliver_synth_event()
1597 int perf_session__peek_event(struct perf_session *session, off_t file_offset, in perf_session__peek_event() argument
1606 if (session->one_mmap && !session->header.needs_swap) { in perf_session__peek_event()
1607 event = file_offset - session->one_mmap_offset + in perf_session__peek_event()
1608 session->one_mmap_addr; in perf_session__peek_event()
1612 if (perf_data__is_pipe(session->data)) in perf_session__peek_event()
1615 fd = perf_data__fd(session->data); in perf_session__peek_event()
1627 if (session->header.needs_swap) in perf_session__peek_event()
1638 if (session->header.needs_swap) in perf_session__peek_event()
1639 event_swap(event, perf_evlist__sample_id_all(session->evlist)); in perf_session__peek_event()
1644 perf_evlist__parse_sample(session->evlist, event, sample)) in perf_session__peek_event()
1652 static s64 perf_session__process_event(struct perf_session *session, in perf_session__process_event() argument
1655 struct evlist *evlist = session->evlist; in perf_session__process_event()
1656 struct perf_tool *tool = session->tool; in perf_session__process_event()
1659 if (session->header.needs_swap) in perf_session__process_event()
1668 return perf_session__process_user_event(session, event, file_offset); in perf_session__process_event()
1677 ret = perf_session__queue_event(session, event, timestamp, file_offset); in perf_session__process_event()
1682 return perf_session__deliver_event(session, event, tool, file_offset); in perf_session__process_event()
1692 struct thread *perf_session__findnew(struct perf_session *session, pid_t pid) in perf_session__findnew() argument
1694 return machine__findnew_thread(&session->machines.host, -1, pid); in perf_session__findnew()
1704 int perf_session__register_idle_thread(struct perf_session *session) in perf_session__register_idle_thread() argument
1709 thread = machine__findnew_thread(&session->machines.host, 0, 0); in perf_session__register_idle_thread()
1726 perf_session__warn_order(const struct perf_session *session) in perf_session__warn_order() argument
1728 const struct ordered_events *oe = &session->ordered_events; in perf_session__warn_order()
1732 evlist__for_each_entry(session->evlist, evsel) { in perf_session__warn_order()
1743 static void perf_session__warn_about_errors(const struct perf_session *session) in perf_session__warn_about_errors() argument
1745 const struct events_stats *stats = &session->evlist->stats; in perf_session__warn_about_errors()
1747 if (session->tool->lost == perf_event__process_lost && in perf_session__warn_about_errors()
1755 if (session->tool->lost_samples == perf_event__process_lost_samples) { in perf_session__warn_about_errors()
1767 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1774 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1819 perf_session__warn_order(session); in perf_session__warn_about_errors()
1841 static int perf_session__flush_thread_stacks(struct perf_session *session) in perf_session__flush_thread_stacks() argument
1843 return machines__for_each_thread(&session->machines, in perf_session__flush_thread_stacks()
1850 static int __perf_session__process_decomp_events(struct perf_session *session);
1852 static int __perf_session__process_pipe_events(struct perf_session *session) in __perf_session__process_pipe_events() argument
1854 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_pipe_events()
1855 struct perf_tool *tool = session->tool; in __perf_session__process_pipe_events()
1856 int fd = perf_data__fd(session->data); in __perf_session__process_pipe_events()
1885 if (session->header.needs_swap) in __perf_session__process_pipe_events()
1920 if ((skip = perf_session__process_event(session, event, head)) < 0) { in __perf_session__process_pipe_events()
1932 err = __perf_session__process_decomp_events(session); in __perf_session__process_pipe_events()
1943 err = auxtrace__flush_events(session, tool); in __perf_session__process_pipe_events()
1946 err = perf_session__flush_thread_stacks(session); in __perf_session__process_pipe_events()
1950 perf_session__warn_about_errors(session); in __perf_session__process_pipe_events()
1951 ordered_events__free(&session->ordered_events); in __perf_session__process_pipe_events()
1952 auxtrace__free_events(session); in __perf_session__process_pipe_events()
1957 fetch_mmaped_event(struct perf_session *session, in fetch_mmaped_event() argument
1971 if (session->header.needs_swap) in fetch_mmaped_event()
1976 if (session->header.needs_swap) in fetch_mmaped_event()
1986 static int __perf_session__process_decomp_events(struct perf_session *session) in __perf_session__process_decomp_events() argument
1990 struct decomp *decomp = session->decomp_last; in __perf_session__process_decomp_events()
1996 union perf_event *event = fetch_mmaped_event(session, decomp->head, decomp->size, decomp->data); in __perf_session__process_decomp_events()
2007 (skip = perf_session__process_event(session, event, file_pos)) < 0) { in __perf_session__process_decomp_events()
2036 typedef s64 (*reader_cb_t)(struct perf_session *session,
2048 reader__process_events(struct reader *rd, struct perf_session *session, in reader__process_events() argument
2070 session->one_mmap = true; in reader__process_events()
2078 if (session->header.needs_swap) { in reader__process_events()
2093 if (session->one_mmap) { in reader__process_events()
2094 session->one_mmap_addr = buf; in reader__process_events()
2095 session->one_mmap_offset = file_offset; in reader__process_events()
2099 event = fetch_mmaped_event(session, head, mmap_size, buf); in reader__process_events()
2120 (skip = rd->process(session, event, file_pos)) < 0) { in reader__process_events()
2134 err = __perf_session__process_decomp_events(session); in reader__process_events()
2150 static s64 process_simple(struct perf_session *session, in process_simple() argument
2154 return perf_session__process_event(session, event, file_offset); in process_simple()
2157 static int __perf_session__process_events(struct perf_session *session) in __perf_session__process_events() argument
2160 .fd = perf_data__fd(session->data), in __perf_session__process_events()
2161 .data_size = session->header.data_size, in __perf_session__process_events()
2162 .data_offset = session->header.data_offset, in __perf_session__process_events()
2165 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_events()
2166 struct perf_tool *tool = session->tool; in __perf_session__process_events()
2177 err = reader__process_events(&rd, session, &prog); in __perf_session__process_events()
2184 err = auxtrace__flush_events(session, tool); in __perf_session__process_events()
2187 err = perf_session__flush_thread_stacks(session); in __perf_session__process_events()
2191 perf_session__warn_about_errors(session); in __perf_session__process_events()
2196 ordered_events__reinit(&session->ordered_events); in __perf_session__process_events()
2197 auxtrace__free_events(session); in __perf_session__process_events()
2198 session->one_mmap = false; in __perf_session__process_events()
2202 int perf_session__process_events(struct perf_session *session) in perf_session__process_events() argument
2204 if (perf_session__register_idle_thread(session) < 0) in perf_session__process_events()
2207 if (perf_data__is_pipe(session->data)) in perf_session__process_events()
2208 return __perf_session__process_pipe_events(session); in perf_session__process_events()
2210 return __perf_session__process_events(session); in perf_session__process_events()
2213 bool perf_session__has_traces(struct perf_session *session, const char *msg) in perf_session__has_traces() argument
2217 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_traces()
2255 size_t perf_session__fprintf_dsos(struct perf_session *session, FILE *fp) in perf_session__fprintf_dsos() argument
2257 return machines__fprintf_dsos(&session->machines, fp); in perf_session__fprintf_dsos()
2260 size_t perf_session__fprintf_dsos_buildid(struct perf_session *session, FILE *fp, in perf_session__fprintf_dsos_buildid() argument
2263 return machines__fprintf_dsos_buildid(&session->machines, fp, skip, parm); in perf_session__fprintf_dsos_buildid()
2266 size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp) in perf_session__fprintf_nr_events() argument
2271 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) in perf_session__fprintf_nr_events()
2276 ret += events_stats__fprintf(&session->evlist->stats, fp); in perf_session__fprintf_nr_events()
2280 size_t perf_session__fprintf(struct perf_session *session, FILE *fp) in perf_session__fprintf() argument
2286 return machine__fprintf(&session->machines.host, fp); in perf_session__fprintf()
2289 struct evsel *perf_session__find_first_evtype(struct perf_session *session, in perf_session__find_first_evtype() argument
2294 evlist__for_each_entry(session->evlist, pos) { in perf_session__find_first_evtype()
2301 int perf_session__cpu_bitmap(struct perf_session *session, in perf_session__cpu_bitmap() argument
2306 int nr_cpus = min(session->header.env.nr_cpus_online, MAX_NR_CPUS); in perf_session__cpu_bitmap()
2311 evsel = perf_session__find_first_evtype(session, i); in perf_session__cpu_bitmap()
2347 void perf_session__fprintf_info(struct perf_session *session, FILE *fp, in perf_session__fprintf_info() argument
2350 if (session == NULL || fp == NULL) in perf_session__fprintf_info()
2354 perf_header__fprintf_info(session, fp, full); in perf_session__fprintf_info()
2359 int __perf_session__set_tracepoints_handlers(struct perf_session *session, in __perf_session__set_tracepoints_handlers() argument
2372 evsel = perf_evlist__find_tracepoint_by_name(session->evlist, assocs[i].name); in __perf_session__set_tracepoints_handlers()
2387 int perf_event__process_id_index(struct perf_session *session, in perf_event__process_id_index() argument
2390 struct evlist *evlist = session->evlist; in perf_event__process_id_index()