Lines Matching refs:inject

3  * builtin-inject.c
5 * Builtin inject command: Examine the live mode (stdin) event stream
64 static int output_bytes(struct perf_inject *inject, void *buf, size_t sz)
68 size = perf_data__write(&inject->output, buf, sz);
72 inject->bytes_written += size;
79 struct perf_inject *inject = container_of(tool, struct perf_inject,
82 return output_bytes(inject, event, event->header.size);
118 struct perf_inject *inject = container_of(tool, struct perf_inject,
126 if (!inject->output.is_pipe)
141 static int copy_bytes(struct perf_inject *inject, int fd, off_t size)
151 ret = output_bytes(inject, buf, ssz);
164 struct perf_inject *inject = container_of(tool, struct perf_inject,
168 inject->have_auxtrace = true;
170 if (!inject->output.is_pipe) {
173 offset = lseek(inject->output.file.fd, 0, SEEK_CUR);
183 ret = output_bytes(inject, event, event->header.size);
186 ret = copy_bytes(inject, perf_data__fd(session->data),
189 ret = output_bytes(inject, event,
231 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
233 if (!inject->aux_id)
234 inject->aux_id = sample->id;
240 perf_inject__cut_auxtrace_sample(struct perf_inject *inject,
246 union perf_event *ev = (union perf_event *)inject->event_copy;
273 struct perf_inject *inject = container_of(tool, struct perf_inject,
283 if (inject->itrace_synth_opts.set && sample->aux_sample.size)
284 event = perf_inject__cut_auxtrace_sample(inject, event, sample);
308 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
313 * if jit marker, then inject jit mmaps and generate ELF images
315 ret = jit_process(inject->session, &inject->output, machine,
320 inject->bytes_written += n;
409 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
414 * if jit marker, then inject jit mmaps and generate ELF images
416 ret = jit_process(inject->session, &inject->output, machine,
421 inject->bytes_written += n;
593 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
596 list_for_each_entry(ent, &inject->samples, node) {
613 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
627 list_add(&ent->node, &inject->samples);
640 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
643 list_for_each_entry(ent, &inject->samples, node) {
689 static void strip_init(struct perf_inject *inject)
691 struct evlist *evlist = inject->session->evlist;
694 inject->tool.context_switch = perf_event__drop;
700 static int __cmd_inject(struct perf_inject *inject)
703 struct perf_session *session = inject->session;
704 struct perf_data *data_out = &inject->output;
710 if (inject->build_ids || inject->sched_stat ||
711 inject->itrace_synth_opts.set || inject->build_id_all) {
712 inject->tool.mmap = perf_event__repipe_mmap;
713 inject->tool.mmap2 = perf_event__repipe_mmap2;
714 inject->tool.fork = perf_event__repipe_fork;
715 inject->tool.tracing_data = perf_event__repipe_tracing_data;
720 if (inject->build_id_all) {
721 inject->tool.mmap = perf_event__repipe_buildid_mmap;
722 inject->tool.mmap2 = perf_event__repipe_buildid_mmap2;
723 } else if (inject->build_ids) {
724 inject->tool.sample = perf_event__inject_buildid;
725 } else if (inject->sched_stat) {
741 } else if (inject->itrace_synth_opts.set) {
742 session->itrace_synth_opts = &inject->itrace_synth_opts;
743 inject->itrace_synth_opts.inject = true;
744 inject->tool.comm = perf_event__repipe_comm;
745 inject->tool.namespaces = perf_event__repipe_namespaces;
746 inject->tool.exit = perf_event__repipe_exit;
747 inject->tool.id_index = perf_event__process_id_index;
748 inject->tool.auxtrace_info = perf_event__process_auxtrace_info;
749 inject->tool.auxtrace = perf_event__process_auxtrace;
750 inject->tool.aux = perf_event__drop_aux;
751 inject->tool.itrace_start = perf_event__drop_aux,
752 inject->tool.ordered_events = true;
753 inject->tool.ordering_requires_timestamps = true;
756 if (inject->strip)
757 strip_init(inject);
760 if (!inject->itrace_synth_opts.set)
771 if (inject->build_ids)
779 inject->have_auxtrace && !inject->itrace_synth_opts.set)
785 if (inject->itrace_synth_opts.set) {
788 if (inject->itrace_synth_opts.last_branch ||
789 inject->itrace_synth_opts.add_last_branch)
794 session->header.data_size = inject->bytes_written;
803 struct perf_inject inject = {
843 .samples = LIST_HEAD_INIT(inject.samples),
855 OPT_BOOLEAN('b', "build-ids", &inject.build_ids,
857 OPT_BOOLEAN(0, "buildid-all", &inject.build_id_all,
859 OPT_STRING('i', "input", &inject.input_name, "file",
861 OPT_STRING('o', "output", &inject.output.path, "file",
863 OPT_BOOLEAN('s', "sched-stat", &inject.sched_stat,
867 OPT_BOOLEAN('j', "jit", &inject.jit_mode, "merge jitdump files into perf.data file"),
874 OPT_CALLBACK_OPTARG(0, "itrace", &inject.itrace_synth_opts,
878 OPT_BOOLEAN(0, "strip", &inject.strip,
883 "perf inject [<options>]",
897 if (inject.strip && !inject.itrace_synth_opts.set) {
902 if (perf_data__open(&inject.output)) {
907 data.path = inject.input_name;
908 inject.session = perf_session__new(&data, inject.output.is_pipe, &inject.tool);
909 if (IS_ERR(inject.session)) {
910 ret = PTR_ERR(inject.session);
914 if (zstd_init(&(inject.session->zstd_data), 0) < 0)
917 if (inject.build_ids && !inject.build_id_all) {
922 * inject the jit mmaps at the same time for now.
924 inject.tool.ordered_events = true;
925 inject.tool.ordering_requires_timestamps = true;
928 if (inject.sched_stat) {
929 inject.tool.ordered_events = true;
933 if (inject.jit_mode) {
934 inject.tool.mmap2 = perf_event__jit_repipe_mmap2;
935 inject.tool.mmap = perf_event__jit_repipe_mmap;
936 inject.tool.ordered_events = true;
937 inject.tool.ordering_requires_timestamps = true;
942 inject.tool.finished_round = perf_event__drop_oe;
945 ret = symbol__init(&inject.session->header.env);
949 ret = __cmd_inject(&inject);
952 zstd_fini(&(inject.session->zstd_data));
953 perf_session__delete(inject.session);
955 perf_data__close(&inject.output);