Lines Matching refs:rec
56 static int record__write(struct record *rec, void *bf, size_t size) in record__write() argument
58 if (perf_data_file__write(rec->session->file, bf, size) < 0) { in record__write()
63 rec->bytes_written += size; in record__write()
72 struct record *rec = container_of(tool, struct record, tool); in process_synthesized_event() local
73 return record__write(rec, event, event->header.size); in process_synthesized_event()
76 static int record__mmap_read(struct record *rec, int idx) in record__mmap_read() argument
78 struct perf_mmap *md = &rec->evlist->mmap[idx]; in record__mmap_read()
89 rec->samples++; in record__mmap_read()
98 if (record__write(rec, buf, size) < 0) { in record__mmap_read()
108 if (record__write(rec, buf, size) < 0) { in record__mmap_read()
114 perf_evlist__mmap_consume(rec->evlist, idx); in record__mmap_read()
151 struct record *rec = container_of(tool, struct record, tool); in record__process_auxtrace() local
152 struct perf_data_file *file = &rec->file; in record__process_auxtrace()
164 err = auxtrace_index__auxtrace_event(&rec->session->auxtrace_index, in record__process_auxtrace()
175 record__write(rec, event, event->header.size); in record__process_auxtrace()
176 record__write(rec, data1, len1); in record__process_auxtrace()
178 record__write(rec, data2, len2); in record__process_auxtrace()
179 record__write(rec, &pad, padding); in record__process_auxtrace()
184 static int record__auxtrace_mmap_read(struct record *rec, in record__auxtrace_mmap_read() argument
189 ret = auxtrace_mmap__read(mm, rec->itr, &rec->tool, in record__auxtrace_mmap_read()
195 rec->samples++; in record__auxtrace_mmap_read()
200 static int record__auxtrace_mmap_read_snapshot(struct record *rec, in record__auxtrace_mmap_read_snapshot() argument
205 ret = auxtrace_mmap__read_snapshot(mm, rec->itr, &rec->tool, in record__auxtrace_mmap_read_snapshot()
207 rec->opts.auxtrace_snapshot_size); in record__auxtrace_mmap_read_snapshot()
212 rec->samples++; in record__auxtrace_mmap_read_snapshot()
217 static int record__auxtrace_read_snapshot_all(struct record *rec) in record__auxtrace_read_snapshot_all() argument
222 for (i = 0; i < rec->evlist->nr_mmaps; i++) { in record__auxtrace_read_snapshot_all()
224 &rec->evlist->mmap[i].auxtrace_mmap; in record__auxtrace_read_snapshot_all()
229 if (record__auxtrace_mmap_read_snapshot(rec, mm) != 0) { in record__auxtrace_read_snapshot_all()
238 static void record__read_auxtrace_snapshot(struct record *rec) in record__read_auxtrace_snapshot() argument
241 if (record__auxtrace_read_snapshot_all(rec) < 0) { in record__read_auxtrace_snapshot()
244 auxtrace_snapshot_err = auxtrace_record__snapshot_finish(rec->itr); in record__read_auxtrace_snapshot()
253 int record__auxtrace_mmap_read(struct record *rec __maybe_unused, in record__auxtrace_mmap_read()
260 void record__read_auxtrace_snapshot(struct record *rec __maybe_unused) in record__read_auxtrace_snapshot()
272 static int record__open(struct record *rec) in record__open() argument
276 struct perf_evlist *evlist = rec->evlist; in record__open()
277 struct perf_session *session = rec->session; in record__open()
278 struct record_opts *opts = &rec->opts; in record__open()
339 struct record *rec = container_of(tool, struct record, tool); in process_sample_event() local
341 rec->samples++; in process_sample_event()
346 static int process_buildids(struct record *rec) in process_buildids() argument
348 struct perf_data_file *file = &rec->file; in process_buildids()
349 struct perf_session *session = rec->session; in process_buildids()
402 static int record__mmap_read_all(struct record *rec) in record__mmap_read_all() argument
404 u64 bytes_written = rec->bytes_written; in record__mmap_read_all()
408 for (i = 0; i < rec->evlist->nr_mmaps; i++) { in record__mmap_read_all()
409 struct auxtrace_mmap *mm = &rec->evlist->mmap[i].auxtrace_mmap; in record__mmap_read_all()
411 if (rec->evlist->mmap[i].base) { in record__mmap_read_all()
412 if (record__mmap_read(rec, i) != 0) { in record__mmap_read_all()
418 if (mm->base && !rec->opts.auxtrace_snapshot_mode && in record__mmap_read_all()
419 record__auxtrace_mmap_read(rec, mm) != 0) { in record__mmap_read_all()
429 if (bytes_written != rec->bytes_written) in record__mmap_read_all()
430 rc = record__write(rec, &finished_round_event, sizeof(finished_round_event)); in record__mmap_read_all()
436 static void record__init_features(struct record *rec) in record__init_features() argument
438 struct perf_session *session = rec->session; in record__init_features()
444 if (rec->no_buildid) in record__init_features()
447 if (!have_tracepoints(&rec->evlist->entries)) in record__init_features()
450 if (!rec->opts.branch_stack) in record__init_features()
453 if (!rec->opts.full_auxtrace) in record__init_features()
475 static int __cmd_record(struct record *rec, int argc, const char **argv) in __cmd_record() argument
482 struct perf_tool *tool = &rec->tool; in __cmd_record()
483 struct record_opts *opts = &rec->opts; in __cmd_record()
484 struct perf_data_file *file = &rec->file; in __cmd_record()
489 rec->progname = argv[0]; in __cmd_record()
495 if (rec->opts.auxtrace_snapshot_mode) in __cmd_record()
507 rec->session = session; in __cmd_record()
509 record__init_features(rec); in __cmd_record()
512 err = perf_evlist__prepare_workload(rec->evlist, &opts->target, in __cmd_record()
522 if (record__open(rec) != 0) { in __cmd_record()
531 if (rec->tool.ordered_events && !perf_evlist__sample_id_all(rec->evlist)) { in __cmd_record()
533 rec->tool.ordered_events = false; in __cmd_record()
536 if (!rec->evlist->nr_groups) in __cmd_record()
544 err = perf_session__write_header(session, rec->evlist, fd, false); in __cmd_record()
549 if (!rec->no_buildid in __cmd_record()
567 if (have_tracepoints(&rec->evlist->entries)) { in __cmd_record()
576 err = perf_event__synthesize_tracing_data(tool, fd, rec->evlist, in __cmd_record()
582 rec->bytes_written += err; in __cmd_record()
586 if (rec->opts.full_auxtrace) { in __cmd_record()
587 err = perf_event__synthesize_auxtrace_info(rec->itr, tool, in __cmd_record()
612 err = __machine__synthesize_threads(machine, tool, &opts->target, rec->evlist->threads, in __cmd_record()
618 if (rec->realtime_prio) { in __cmd_record()
621 param.sched_priority = rec->realtime_prio; in __cmd_record()
635 perf_evlist__enable(rec->evlist); in __cmd_record()
656 rec->evlist->workload.pid, in __cmd_record()
661 perf_evlist__start_workload(rec->evlist); in __cmd_record()
666 perf_evlist__enable(rec->evlist); in __cmd_record()
671 unsigned long long hits = rec->samples; in __cmd_record()
673 if (record__mmap_read_all(rec) < 0) { in __cmd_record()
682 record__read_auxtrace_snapshot(rec); in __cmd_record()
690 if (hits == rec->samples) { in __cmd_record()
693 err = perf_evlist__poll(rec->evlist, -1); in __cmd_record()
702 if (perf_evlist__filter_pollfd(rec->evlist, POLLERR | POLLHUP) == 0) in __cmd_record()
713 perf_evlist__disable(rec->evlist); in __cmd_record()
735 kill(rec->evlist->workload.pid, SIGTERM); in __cmd_record()
749 rec->samples = 0; in __cmd_record()
752 rec->session->header.data_size += rec->bytes_written; in __cmd_record()
755 if (!rec->no_buildid) { in __cmd_record()
756 process_buildids(rec); in __cmd_record()
762 if (rec->opts.full_auxtrace) in __cmd_record()
763 dsos__hit_all(rec->session); in __cmd_record()
765 perf_session__write_header(rec->session, rec->evlist, fd, true); in __cmd_record()
771 if (rec->samples && !rec->opts.full_auxtrace) in __cmd_record()
773 " (%" PRIu64 " samples)", rec->samples); in __cmd_record()
1130 struct record *rec = &record; in cmd_record() local
1133 rec->evlist = perf_evlist__new(); in cmd_record()
1134 if (rec->evlist == NULL) in cmd_record()
1137 perf_config(perf_record_config, rec); in cmd_record()
1141 if (!argc && target__none(&rec->opts.target)) in cmd_record()
1144 if (nr_cgroups && !rec->opts.target.system_wide) { in cmd_record()
1149 if (rec->opts.record_switch_events && in cmd_record()
1156 if (!rec->itr) { in cmd_record()
1157 rec->itr = auxtrace_record__init(rec->evlist, &err); in cmd_record()
1162 err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts, in cmd_record()
1163 rec->opts.auxtrace_snapshot_opts); in cmd_record()
1181 if (rec->no_buildid_cache || rec->no_buildid) in cmd_record()
1184 if (rec->evlist->nr_entries == 0 && in cmd_record()
1185 perf_evlist__add_default(rec->evlist) < 0) { in cmd_record()
1190 if (rec->opts.target.tid && !rec->opts.no_inherit_set) in cmd_record()
1191 rec->opts.no_inherit = true; in cmd_record()
1193 err = target__validate(&rec->opts.target); in cmd_record()
1195 target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); in cmd_record()
1199 err = target__parse_uid(&rec->opts.target); in cmd_record()
1203 target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); in cmd_record()
1211 if (perf_evlist__create_maps(rec->evlist, &rec->opts.target) < 0) in cmd_record()
1214 err = auxtrace_record__options(rec->itr, rec->evlist, &rec->opts); in cmd_record()
1218 if (record_opts__config(&rec->opts)) { in cmd_record()
1225 perf_evlist__delete(rec->evlist); in cmd_record()
1227 auxtrace_record__free(rec->itr); in cmd_record()