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>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
f5fc14124c
commit
6a4d98d787
@ -345,8 +345,6 @@ out:
|
||||
|
||||
static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
|
||||
{
|
||||
struct stat st;
|
||||
int flags;
|
||||
int err, feat;
|
||||
unsigned long waking = 0;
|
||||
const bool forks = argc > 0;
|
||||
@ -355,7 +353,6 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
|
||||
struct perf_record_opts *opts = &rec->opts;
|
||||
struct perf_evlist *evsel_list = rec->evlist;
|
||||
struct perf_data_file *file = &rec->file;
|
||||
const char *output_name = file->path;
|
||||
struct perf_session *session;
|
||||
bool disabled = false;
|
||||
|
||||
@ -367,35 +364,6 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
|
||||
signal(SIGUSR1, sig_handler);
|
||||
signal(SIGTERM, sig_handler);
|
||||
|
||||
if (!output_name) {
|
||||
if (!fstat(STDOUT_FILENO, &st) && S_ISFIFO(st.st_mode))
|
||||
file->is_pipe = true;
|
||||
else
|
||||
file->path = output_name = "perf.data";
|
||||
}
|
||||
if (output_name) {
|
||||
if (!strcmp(output_name, "-"))
|
||||
file->is_pipe = true;
|
||||
else if (!stat(output_name, &st) && st.st_size) {
|
||||
char oldname[PATH_MAX];
|
||||
snprintf(oldname, sizeof(oldname), "%s.old",
|
||||
output_name);
|
||||
unlink(oldname);
|
||||
rename(output_name, oldname);
|
||||
}
|
||||
}
|
||||
|
||||
flags = O_CREAT|O_RDWR|O_TRUNC;
|
||||
|
||||
if (file->is_pipe)
|
||||
file->fd = STDOUT_FILENO;
|
||||
else
|
||||
file->fd = open(output_name, flags, S_IRUSR | S_IWUSR);
|
||||
if (file->fd < 0) {
|
||||
perror("failed to create output file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
session = perf_session__new(file, false, NULL);
|
||||
if (session == NULL) {
|
||||
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)
|
||||
fprintf(stderr,
|
||||
"[ perf record: Captured and wrote %.3f MB %s (~%" PRIu64 " samples) ]\n",
|
||||
(double)rec->bytes_written / 1024.0 / 1024.0,
|
||||
output_name,
|
||||
file->path,
|
||||
rec->bytes_written / 24);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user