Lines Matching defs:data
19 #include "util/data.h"
136 static ssize_t synthesize_attr(struct bench_data *data)
151 return writen(data->input_pipe[1], &event, event.header.size);
154 static ssize_t synthesize_fork(struct bench_data *data)
166 event.fork.pid = data->pid;
167 event.fork.tid = data->pid;
169 return writen(data->input_pipe[1], &event, event.header.size);
172 static ssize_t synthesize_mmap(struct bench_data *data, struct bench_dso *dso, u64 timestamp)
187 event.mmap2.pid = data->pid;
188 event.mmap2.tid = data->pid;
200 if (writen(data->input_pipe[1], &event, len - bench_id_hdr_size) < 0)
207 if (writen(data->input_pipe[1], id_hdr_ptr, bench_id_hdr_size) < 0)
215 return writen(data->input_pipe[1], &event, len);
218 static ssize_t synthesize_sample(struct bench_data *data, struct bench_dso *dso, u64 timestamp)
222 .tid = data->pid,
223 .pid = data->pid,
234 return writen(data->input_pipe[1], &event, event.header.size);
237 static ssize_t synthesize_flush(struct bench_data *data)
244 return writen(data->input_pipe[1], &header, header.size);
249 struct bench_data *data = arg;
254 flag = fcntl(data->output_pipe[0], F_GETFL);
255 fcntl(data->output_pipe[0], F_SETFL, flag | O_NONBLOCK);
257 /* read out data from child */
259 n = read(data->output_pipe[0], buf, sizeof(buf));
271 close(data->output_pipe[0]);
275 static int setup_injection(struct bench_data *data, bool build_id_all)
284 if (pipe(data->input_pipe) < 0)
287 if (pipe(data->output_pipe) < 0)
290 data->pid = fork();
291 if (data->pid < 0)
294 if (data->pid == 0) {
298 close(data->input_pipe[1]);
299 close(data->output_pipe[0]);
302 dup2(data->input_pipe[0], STDIN_FILENO);
303 close(data->input_pipe[0]);
304 dup2(data->output_pipe[1], STDOUT_FILENO);
305 close(data->output_pipe[1]);
333 pthread_create(&data->th, NULL, data_reader, data);
336 close(data->input_pipe[0]);
337 close(data->output_pipe[1]);
347 static int inject_build_id(struct bench_data *data, u64 *max_rss)
354 if (perf_header__write_pipe(data->input_pipe[1]) < 0)
357 if (synthesize_attr(data) < 0)
360 if (synthesize_fork(data) < 0)
369 if (synthesize_mmap(data, dso, timestamp) < 0)
373 if (synthesize_sample(data, dso, timestamp + k * 1000) < 0)
378 if (synthesize_flush(data) < 0)
384 close(data->input_pipe[1]);
386 wait4(data->pid, &status, 0, &rusage);
389 pr_debug(" Child %d exited with %d\n", data->pid, status);
394 static void do_inject_loop(struct bench_data *data, bool build_id_all)
412 if (setup_injection(data, build_id_all) < 0) {
418 if (inject_build_id(data, &max_rss) < 0) {
429 pthread_join(data->th, NULL);
449 static int do_inject_loops(struct bench_data *data)
465 do_inject_loop(data, false);
466 do_inject_loop(data, true);
474 struct bench_data data;
482 return do_inject_loops(&data);