Lines Matching refs:data

20 #include "util/data.h"
137 static ssize_t synthesize_attr(struct bench_data *data)
152 return writen(data->input_pipe[1], &event, event.header.size);
155 static ssize_t synthesize_fork(struct bench_data *data)
167 event.fork.pid = data->pid;
168 event.fork.tid = data->pid;
170 return writen(data->input_pipe[1], &event, event.header.size);
173 static ssize_t synthesize_mmap(struct bench_data *data, struct bench_dso *dso, u64 timestamp)
188 event.mmap2.pid = data->pid;
189 event.mmap2.tid = data->pid;
201 if (writen(data->input_pipe[1], &event, len - bench_id_hdr_size) < 0)
208 if (writen(data->input_pipe[1], id_hdr_ptr, bench_id_hdr_size) < 0)
216 return writen(data->input_pipe[1], &event, len);
219 static ssize_t synthesize_sample(struct bench_data *data, struct bench_dso *dso, u64 timestamp)
223 .tid = data->pid,
224 .pid = data->pid,
235 return writen(data->input_pipe[1], &event, event.header.size);
238 static ssize_t synthesize_flush(struct bench_data *data)
245 return writen(data->input_pipe[1], &header, header.size);
250 struct bench_data *data = arg;
255 flag = fcntl(data->output_pipe[0], F_GETFL);
256 fcntl(data->output_pipe[0], F_SETFL, flag | O_NONBLOCK);
258 /* read out data from child */
260 n = read(data->output_pipe[0], buf, sizeof(buf));
272 close(data->output_pipe[0]);
276 static int setup_injection(struct bench_data *data, bool build_id_all)
285 if (pipe(data->input_pipe) < 0)
288 if (pipe(data->output_pipe) < 0)
291 data->pid = fork();
292 if (data->pid < 0)
295 if (data->pid == 0) {
299 close(data->input_pipe[1]);
300 close(data->output_pipe[0]);
303 dup2(data->input_pipe[0], STDIN_FILENO);
304 close(data->input_pipe[0]);
305 dup2(data->output_pipe[1], STDOUT_FILENO);
306 close(data->output_pipe[1]);
334 pthread_create(&data->th, NULL, data_reader, data);
337 close(data->input_pipe[0]);
338 close(data->output_pipe[1]);
348 static int inject_build_id(struct bench_data *data, u64 *max_rss)
355 if (perf_header__write_pipe(data->input_pipe[1]) < 0)
358 if (synthesize_attr(data) < 0)
361 if (synthesize_fork(data) < 0)
370 if (synthesize_mmap(data, dso, timestamp) < 0)
374 if (synthesize_sample(data, dso, timestamp + k * 1000) < 0)
379 if (synthesize_flush(data) < 0)
385 close(data->input_pipe[1]);
387 wait4(data->pid, &status, 0, &rusage);
390 pr_debug(" Child %d exited with %d\n", data->pid, status);
395 static void do_inject_loop(struct bench_data *data, bool build_id_all)
413 if (setup_injection(data, build_id_all) < 0) {
419 if (inject_build_id(data, &max_rss) < 0) {
430 pthread_join(data->th, NULL);
450 static int do_inject_loops(struct bench_data *data)
466 do_inject_loop(data, false);
467 do_inject_loop(data, true);
475 struct bench_data data;
483 return do_inject_loops(&data);