diff options
author | Jiri Olsa <jolsa@redhat.com> | 2013-10-15 10:27:33 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-10-21 16:33:24 -0400 |
commit | 6a4d98d787b38a130a67e78b64182b419899623a (patch) | |
tree | bd72dfaa6b4e93b0d304320dd373d0150724e29d /tools/perf/builtin-record.c | |
parent | f5fc14124c5cefdd052a2b2a6a3f0ed531540113 (diff) |
perf tools: Add perf_data_file__open interface to data object
Adding perf_data_file__open interface to data object to open the
perf.data file for both read and write.
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1381847254-28809-3-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-record.c')
-rw-r--r-- | tools/perf/builtin-record.c | 34 |
1 files changed, 1 insertions, 33 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 4ea46ffbfc1c..428e28f3e677 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -345,8 +345,6 @@ out: | |||
345 | 345 | ||
346 | static int __cmd_record(struct perf_record *rec, int argc, const char **argv) | 346 | static int __cmd_record(struct perf_record *rec, int argc, const char **argv) |
347 | { | 347 | { |
348 | struct stat st; | ||
349 | int flags; | ||
350 | int err, feat; | 348 | int err, feat; |
351 | unsigned long waking = 0; | 349 | unsigned long waking = 0; |
352 | const bool forks = argc > 0; | 350 | const bool forks = argc > 0; |
@@ -355,7 +353,6 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv) | |||
355 | struct perf_record_opts *opts = &rec->opts; | 353 | struct perf_record_opts *opts = &rec->opts; |
356 | struct perf_evlist *evsel_list = rec->evlist; | 354 | struct perf_evlist *evsel_list = rec->evlist; |
357 | struct perf_data_file *file = &rec->file; | 355 | struct perf_data_file *file = &rec->file; |
358 | const char *output_name = file->path; | ||
359 | struct perf_session *session; | 356 | struct perf_session *session; |
360 | bool disabled = false; | 357 | bool disabled = false; |
361 | 358 | ||
@@ -367,35 +364,6 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv) | |||
367 | signal(SIGUSR1, sig_handler); | 364 | signal(SIGUSR1, sig_handler); |
368 | signal(SIGTERM, sig_handler); | 365 | signal(SIGTERM, sig_handler); |
369 | 366 | ||
370 | if (!output_name) { | ||
371 | if (!fstat(STDOUT_FILENO, &st) && S_ISFIFO(st.st_mode)) | ||
372 | file->is_pipe = true; | ||
373 | else | ||
374 | file->path = output_name = "perf.data"; | ||
375 | } | ||
376 | if (output_name) { | ||
377 | if (!strcmp(output_name, "-")) | ||
378 | file->is_pipe = true; | ||
379 | else if (!stat(output_name, &st) && st.st_size) { | ||
380 | char oldname[PATH_MAX]; | ||
381 | snprintf(oldname, sizeof(oldname), "%s.old", | ||
382 | output_name); | ||
383 | unlink(oldname); | ||
384 | rename(output_name, oldname); | ||
385 | } | ||
386 | } | ||
387 | |||
388 | flags = O_CREAT|O_RDWR|O_TRUNC; | ||
389 | |||
390 | if (file->is_pipe) | ||
391 | file->fd = STDOUT_FILENO; | ||
392 | else | ||
393 | file->fd = open(output_name, flags, S_IRUSR | S_IWUSR); | ||
394 | if (file->fd < 0) { | ||
395 | perror("failed to create output file"); | ||
396 | return -1; | ||
397 | } | ||
398 | |||
399 | session = perf_session__new(file, false, NULL); | 367 | session = perf_session__new(file, false, NULL); |
400 | if (session == NULL) { | 368 | if (session == NULL) { |
401 | pr_err("Not enough memory for reading perf file header\n"); | 369 | pr_err("Not enough memory for reading perf file header\n"); |
@@ -586,7 +554,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv) | |||
586 | fprintf(stderr, | 554 | fprintf(stderr, |
587 | "[ perf record: Captured and wrote %.3f MB %s (~%" PRIu64 " samples) ]\n", | 555 | "[ perf record: Captured and wrote %.3f MB %s (~%" PRIu64 " samples) ]\n", |
588 | (double)rec->bytes_written / 1024.0 / 1024.0, | 556 | (double)rec->bytes_written / 1024.0 / 1024.0, |
589 | output_name, | 557 | file->path, |
590 | rec->bytes_written / 24); | 558 | rec->bytes_written / 24); |
591 | 559 | ||
592 | return 0; | 560 | return 0; |