Lines Matching refs:rec

81 static void advance_output(struct perf_record *rec, size_t size)
83 rec->bytes_written += size;
86 static int write_output(struct perf_record *rec, void *buf, size_t size)
89 int ret = write(rec->output, buf, size);
99 rec->bytes_written += ret;
110 struct perf_record *rec = container_of(tool, struct perf_record, tool);
111 if (write_output(rec, event, event->header.size) < 0)
117 static int perf_record__mmap_read(struct perf_record *rec,
122 unsigned char *data = md->base + rec->page_size;
130 rec->samples++;
139 if (write_output(rec, buf, size) < 0) {
149 if (write_output(rec, buf, size) < 0) {
176 struct perf_record *rec = arg;
179 if (rec->evlist->workload.pid > 0) {
181 kill(rec->evlist->workload.pid, SIGTERM);
185 psignal(WTERMSIG(status), rec->progname);
194 static int perf_record__open(struct perf_record *rec)
198 struct perf_evlist *evlist = rec->evlist;
199 struct perf_session *session = rec->session;
200 struct perf_record_opts *opts = &rec->opts;
254 static int process_buildids(struct perf_record *rec)
256 u64 size = lseek(rec->output, 0, SEEK_CUR);
261 rec->session->fd = rec->output;
262 return __perf_session__process_events(rec->session, rec->post_processing_offset,
263 size - rec->post_processing_offset,
269 struct perf_record *rec = arg;
274 if (!rec->opts.pipe_output) {
275 rec->session->header.data_size += rec->bytes_written;
277 if (!rec->no_buildid)
278 process_buildids(rec);
279 perf_session__write_header(rec->session, rec->evlist,
280 rec->output, true);
281 perf_session__delete(rec->session);
282 perf_evlist__delete(rec->evlist);
324 static int perf_record__mmap_read_all(struct perf_record *rec)
329 for (i = 0; i < rec->evlist->nr_mmaps; i++) {
330 if (rec->evlist->mmap[i].base) {
331 if (perf_record__mmap_read(rec, &rec->evlist->mmap[i]) != 0) {
338 if (perf_header__has_feat(&rec->session->header, HEADER_TRACING_DATA))
339 rc = write_output(rec, &finished_round_event,
346 static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
355 struct perf_tool *tool = &rec->tool;
356 struct perf_record_opts *opts = &rec->opts;
357 struct perf_evlist *evsel_list = rec->evlist;
358 const char *output_name = rec->output_name;
362 rec->progname = argv[0];
364 rec->page_size = sysconf(_SC_PAGE_SIZE);
366 on_exit(perf_record__sig_exit, rec);
376 rec->output_name = output_name = "perf.data";
401 rec->output = output;
410 rec->session = session;
415 if (rec->no_buildid)
421 if (!rec->opts.branch_stack)
434 if (perf_record__open(rec) != 0) {
445 on_exit(perf_record__exit, rec);
458 if (!rec->no_buildid
466 rec->post_processing_offset = lseek(output, 0, SEEK_CUR);
493 advance_output(rec, err);
532 if (rec->realtime_prio) {
535 param.sched_priority = rec->realtime_prio;
558 int hits = rec->samples;
560 if (perf_record__mmap_read_all(rec) < 0) {
565 if (hits == rec->samples) {
593 (double)rec->bytes_written / 1024.0 / 1024.0,
595 rec->bytes_written / 24);
934 struct perf_record *rec = &record;
941 rec->evlist = evsel_list;
945 if (!argc && perf_target__none(&rec->opts.target))
948 if (nr_cgroups && !rec->opts.target.system_wide) {
966 if (rec->no_buildid_cache || rec->no_buildid)
975 err = perf_target__validate(&rec->opts.target);
977 perf_target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
981 err = perf_target__parse_uid(&rec->opts.target);
985 perf_target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
993 if (perf_evlist__create_maps(evsel_list, &rec->opts.target) < 0)
996 if (rec->opts.user_interval != ULLONG_MAX)
997 rec->opts.default_interval = rec->opts.user_interval;
998 if (rec->opts.user_freq != UINT_MAX)
999 rec->opts.freq = rec->opts.user_freq;
1004 if (rec->opts.default_interval)
1005 rec->opts.freq = 0;
1006 else if (rec->opts.freq) {
1007 rec->opts.default_interval = rec->opts.freq;