Lines Matching refs:inject
68 static int output_bytes(struct perf_inject *inject, void *buf, size_t sz) in output_bytes() argument
72 size = perf_data__write(&inject->output, buf, sz); in output_bytes()
76 inject->bytes_written += size; in output_bytes()
83 struct perf_inject *inject = container_of(tool, struct perf_inject, in perf_event__repipe_synth() local
86 return output_bytes(inject, event, event->header.size); in perf_event__repipe_synth()
122 struct perf_inject *inject = container_of(tool, struct perf_inject, in perf_event__repipe_attr() local
130 if (!inject->is_pipe) in perf_event__repipe_attr()
145 static int copy_bytes(struct perf_inject *inject, int fd, off_t size) in copy_bytes() argument
155 ret = output_bytes(inject, buf, ssz); in copy_bytes()
168 struct perf_inject *inject = container_of(tool, struct perf_inject, in perf_event__repipe_auxtrace() local
172 inject->have_auxtrace = true; in perf_event__repipe_auxtrace()
174 if (!inject->output.is_pipe) { in perf_event__repipe_auxtrace()
177 offset = lseek(inject->output.file.fd, 0, SEEK_CUR); in perf_event__repipe_auxtrace()
187 ret = output_bytes(inject, event, event->header.size); in perf_event__repipe_auxtrace()
190 ret = copy_bytes(inject, perf_data__fd(session->data), in perf_event__repipe_auxtrace()
193 ret = output_bytes(inject, event, in perf_event__repipe_auxtrace()
235 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); in perf_event__drop_aux() local
237 if (!inject->aux_id) in perf_event__drop_aux()
238 inject->aux_id = sample->id; in perf_event__drop_aux()
244 perf_inject__cut_auxtrace_sample(struct perf_inject *inject, in perf_inject__cut_auxtrace_sample() argument
250 union perf_event *ev = (union perf_event *)inject->event_copy; in perf_inject__cut_auxtrace_sample()
277 struct perf_inject *inject = container_of(tool, struct perf_inject, in perf_event__repipe_sample() local
287 if (inject->itrace_synth_opts.set && sample->aux_sample.size) in perf_event__repipe_sample()
288 event = perf_inject__cut_auxtrace_sample(inject, event, sample); in perf_event__repipe_sample()
312 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); in perf_event__jit_repipe_mmap() local
319 ret = jit_process(inject->session, &inject->output, machine, in perf_event__jit_repipe_mmap()
324 inject->bytes_written += n; in perf_event__jit_repipe_mmap()
425 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); in perf_event__jit_repipe_mmap2() local
432 ret = jit_process(inject->session, &inject->output, machine, in perf_event__jit_repipe_mmap2()
437 inject->bytes_written += n; in perf_event__jit_repipe_mmap2()
621 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); in perf_inject__sched_process_exit() local
624 list_for_each_entry(ent, &inject->samples, node) { in perf_inject__sched_process_exit()
641 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); in perf_inject__sched_switch() local
655 list_add(&ent->node, &inject->samples); in perf_inject__sched_switch()
668 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); in perf_inject__sched_stat() local
671 list_for_each_entry(ent, &inject->samples, node) { in perf_inject__sched_stat()
717 static void strip_init(struct perf_inject *inject) in strip_init() argument
719 struct evlist *evlist = inject->session->evlist; in strip_init()
722 inject->tool.context_switch = perf_event__drop; in strip_init()
730 struct perf_inject *inject = opt->value; in parse_vm_time_correlation() local
737 inject->itrace_synth_opts.set = true; in parse_vm_time_correlation()
738 inject->itrace_synth_opts.vm_time_correlation = true; in parse_vm_time_correlation()
739 inject->in_place_update = true; in parse_vm_time_correlation()
746 inject->itrace_synth_opts.vm_tm_corr_dry_run = true; in parse_vm_time_correlation()
747 inject->in_place_update_dry_run = true; in parse_vm_time_correlation()
753 inject->itrace_synth_opts.vm_tm_corr_args = strdup(args); in parse_vm_time_correlation()
755 return inject->itrace_synth_opts.vm_tm_corr_args ? 0 : -ENOMEM; in parse_vm_time_correlation()
758 static int __cmd_inject(struct perf_inject *inject) in __cmd_inject() argument
761 struct perf_session *session = inject->session; in __cmd_inject()
762 struct perf_data *data_out = &inject->output; in __cmd_inject()
763 int fd = inject->in_place_update ? -1 : perf_data__fd(data_out); in __cmd_inject()
768 if (inject->build_ids || inject->sched_stat || in __cmd_inject()
769 inject->itrace_synth_opts.set || inject->build_id_all) { in __cmd_inject()
770 inject->tool.mmap = perf_event__repipe_mmap; in __cmd_inject()
771 inject->tool.mmap2 = perf_event__repipe_mmap2; in __cmd_inject()
772 inject->tool.fork = perf_event__repipe_fork; in __cmd_inject()
773 inject->tool.tracing_data = perf_event__repipe_tracing_data; in __cmd_inject()
778 if (inject->build_id_all) { in __cmd_inject()
779 inject->tool.mmap = perf_event__repipe_buildid_mmap; in __cmd_inject()
780 inject->tool.mmap2 = perf_event__repipe_buildid_mmap2; in __cmd_inject()
781 } else if (inject->build_ids) { in __cmd_inject()
782 inject->tool.sample = perf_event__inject_buildid; in __cmd_inject()
783 } else if (inject->sched_stat) { in __cmd_inject()
799 } else if (inject->itrace_synth_opts.vm_time_correlation) { in __cmd_inject()
800 session->itrace_synth_opts = &inject->itrace_synth_opts; in __cmd_inject()
801 memset(&inject->tool, 0, sizeof(inject->tool)); in __cmd_inject()
802 inject->tool.id_index = perf_event__process_id_index; in __cmd_inject()
803 inject->tool.auxtrace_info = perf_event__process_auxtrace_info; in __cmd_inject()
804 inject->tool.auxtrace = perf_event__process_auxtrace; in __cmd_inject()
805 inject->tool.auxtrace_error = perf_event__process_auxtrace_error; in __cmd_inject()
806 inject->tool.ordered_events = true; in __cmd_inject()
807 inject->tool.ordering_requires_timestamps = true; in __cmd_inject()
808 } else if (inject->itrace_synth_opts.set) { in __cmd_inject()
809 session->itrace_synth_opts = &inject->itrace_synth_opts; in __cmd_inject()
810 inject->itrace_synth_opts.inject = true; in __cmd_inject()
811 inject->tool.comm = perf_event__repipe_comm; in __cmd_inject()
812 inject->tool.namespaces = perf_event__repipe_namespaces; in __cmd_inject()
813 inject->tool.exit = perf_event__repipe_exit; in __cmd_inject()
814 inject->tool.id_index = perf_event__process_id_index; in __cmd_inject()
815 inject->tool.auxtrace_info = perf_event__process_auxtrace_info; in __cmd_inject()
816 inject->tool.auxtrace = perf_event__process_auxtrace; in __cmd_inject()
817 inject->tool.aux = perf_event__drop_aux; in __cmd_inject()
818 inject->tool.itrace_start = perf_event__drop_aux, in __cmd_inject()
819 inject->tool.ordered_events = true; in __cmd_inject()
820 inject->tool.ordering_requires_timestamps = true; in __cmd_inject()
823 if (inject->strip) in __cmd_inject()
824 strip_init(inject); in __cmd_inject()
827 if (!inject->itrace_synth_opts.set) in __cmd_inject()
830 if (!inject->is_pipe && !inject->in_place_update) in __cmd_inject()
837 if (!inject->is_pipe && !inject->in_place_update) { in __cmd_inject()
838 if (inject->build_ids) in __cmd_inject()
846 inject->have_auxtrace && !inject->itrace_synth_opts.set) in __cmd_inject()
852 if (inject->itrace_synth_opts.set) { in __cmd_inject()
855 if (inject->itrace_synth_opts.last_branch || in __cmd_inject()
856 inject->itrace_synth_opts.add_last_branch) in __cmd_inject()
861 session->header.data_size = inject->bytes_written; in __cmd_inject()
870 struct perf_inject inject = { in cmd_inject() local
910 .samples = LIST_HEAD_INIT(inject.samples), in cmd_inject()
925 OPT_BOOLEAN('b', "build-ids", &inject.build_ids, in cmd_inject()
927 OPT_BOOLEAN(0, "buildid-all", &inject.build_id_all, in cmd_inject()
929 OPT_STRING('i', "input", &inject.input_name, "file", in cmd_inject()
931 OPT_STRING('o', "output", &inject.output.path, "file", in cmd_inject()
933 OPT_BOOLEAN('s', "sched-stat", &inject.sched_stat, in cmd_inject()
937 OPT_BOOLEAN('j', "jit", &inject.jit_mode, "merge jitdump files into perf.data file"), in cmd_inject()
944 OPT_CALLBACK_OPTARG(0, "itrace", &inject.itrace_synth_opts, in cmd_inject()
948 OPT_BOOLEAN(0, "strip", &inject.strip, in cmd_inject()
950 OPT_CALLBACK_OPTARG(0, "vm-time-correlation", &inject, NULL, "opts", in cmd_inject()
970 if (inject.strip && !inject.itrace_synth_opts.set) { in cmd_inject()
975 if (inject.in_place_update) { in cmd_inject()
976 if (!strcmp(inject.input_name, "-")) { in cmd_inject()
980 if (strcmp(inject.output.path, "-")) { in cmd_inject()
984 if (!data.force && !inject.in_place_update_dry_run) { in cmd_inject()
989 if (!inject.in_place_update_dry_run) in cmd_inject()
991 } else if (perf_data__open(&inject.output)) { in cmd_inject()
996 data.path = inject.input_name; in cmd_inject()
997 if (!strcmp(inject.input_name, "-") || inject.output.is_pipe) { in cmd_inject()
998 inject.is_pipe = true; in cmd_inject()
1004 if (strcmp(inject.input_name, "-")) in cmd_inject()
1008 inject.session = __perf_session__new(&data, repipe, in cmd_inject()
1009 perf_data__fd(&inject.output), in cmd_inject()
1010 &inject.tool); in cmd_inject()
1011 if (IS_ERR(inject.session)) { in cmd_inject()
1012 ret = PTR_ERR(inject.session); in cmd_inject()
1016 if (zstd_init(&(inject.session->zstd_data), 0) < 0) in cmd_inject()
1019 if (!data.is_pipe && inject.output.is_pipe) { in cmd_inject()
1020 ret = perf_header__write_pipe(perf_data__fd(&inject.output)); in cmd_inject()
1026 ret = perf_event__synthesize_for_pipe(&inject.tool, in cmd_inject()
1027 inject.session, in cmd_inject()
1028 &inject.output, in cmd_inject()
1034 if (inject.build_ids && !inject.build_id_all) { in cmd_inject()
1041 inject.tool.ordered_events = true; in cmd_inject()
1042 inject.tool.ordering_requires_timestamps = true; in cmd_inject()
1045 if (inject.sched_stat) { in cmd_inject()
1046 inject.tool.ordered_events = true; in cmd_inject()
1050 if (inject.jit_mode) { in cmd_inject()
1051 inject.tool.mmap2 = perf_event__jit_repipe_mmap2; in cmd_inject()
1052 inject.tool.mmap = perf_event__jit_repipe_mmap; in cmd_inject()
1053 inject.tool.ordered_events = true; in cmd_inject()
1054 inject.tool.ordering_requires_timestamps = true; in cmd_inject()
1059 inject.tool.finished_round = perf_event__drop_oe; in cmd_inject()
1062 ret = symbol__init(&inject.session->header.env); in cmd_inject()
1066 ret = __cmd_inject(&inject); in cmd_inject()
1069 zstd_fini(&(inject.session->zstd_data)); in cmd_inject()
1070 perf_session__delete(inject.session); in cmd_inject()
1072 perf_data__close(&inject.output); in cmd_inject()
1073 free(inject.itrace_synth_opts.vm_tm_corr_args); in cmd_inject()