[RFC v2][PATCH 02/11] perf record: introduce special handling for pipe output

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Tom Zanussi
Date: Thursday, April 1, 2010 - 9:59 pm

Adds special treatment for stdout - if the user specifies '-o -' to
perf record, the intent is that the event stream be written to stdout
rather than to a disk file.

Also, redirect stdout of forked child to stderr - in pipe mode, stdout
of the forked child interferes with the stdout perf stream, so
redirect it to stderr where it can still be seen but won't be mixed in
with the perf output.

Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
---
 tools/perf/builtin-record.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 2654b61..0723fa1 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -36,6 +36,7 @@ static unsigned int		page_size;
 static unsigned int		mmap_pages			=    128;
 static int			freq				=   1000;
 static int			output;
+static int			pipe_output			=      0;
 static const char		*output_name			= "perf.data";
 static int			group				=      0;
 static unsigned int		realtime_prio			=      0;
@@ -450,7 +451,9 @@ static int __cmd_record(int argc, const char **argv)
 		exit(-1);
 	}
 
-	if (!stat(output_name, &st) && st.st_size) {
+	if (!strcmp(output_name, "-"))
+		pipe_output = 1;
+	else if (!stat(output_name, &st) && st.st_size) {
 		if (!force) {
 			if (!append_file) {
 				pr_err("Error, output file %s exists, use -A "
@@ -475,7 +478,10 @@ static int __cmd_record(int argc, const char **argv)
 	else
 		flags |= O_TRUNC;
 
-	output = open(output_name, flags, S_IRUSR|S_IWUSR);
+	if (pipe_output)
+		output = STDOUT_FILENO;
+	else
+		output = open(output_name, flags, S_IRUSR | S_IWUSR);
 	if (output < 0) {
 		perror("failed to create output file");
 		exit(-1);
@@ -514,6 +520,8 @@ static int __cmd_record(int argc, const char **argv)
 		}
 
 		if (!child_pid) {
+			if (pipe_output)
+				dup2(2, 1);
 			close(child_ready_pipe[0]);
 			close(go_pipe[1]);
 			fcntl(go_pipe[0], F_SETFD, FD_CLOEXEC);
@@ -565,7 +573,11 @@ static int __cmd_record(int argc, const char **argv)
 			open_counters(cpumap[i]);
 	}
 
-	if (file_new) {
+	if (pipe_output) {
+		err = perf_header__write_pipe(output);
+		if (err < 0)
+			return err;
+	} else if (file_new) {
 		err = perf_header__write(&session->header, output, false);
 		if (err < 0)
 			return err;
-- 
1.6.4.GIT

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC v2][PATCH 0/7] perf: 'live mode', Tom Zanussi, (Thu Apr 1, 9:59 pm)
[RFC v2][PATCH 02/11] perf record: introduce special handl ..., Tom Zanussi, (Thu Apr 1, 9:59 pm)
Re: [RFC v2][PATCH 08/11] perf: convert perf header build_ ..., Arnaldo Carvalho de Melo, (Sat Apr 3, 6:54 am)
[tip:perf/live] perf: Add pipe-specific header read/write ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:03 am)
[tip:perf/live] perf record: Introduce special handling fo ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:03 am)
[tip:perf/live] perf report: Introduce special handling fo ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:04 am)
[tip:perf/live] perf trace: Introduce special handling for ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:04 am)
[tip:perf/live] perf: Convert perf header attrs into attr ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:04 am)
[tip:perf/live] perf: Convert perf event types into event ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:05 am)
[tip:perf/live] perf: Convert perf tracing data into a tra ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:05 am)
[tip:perf/live] perf: Convert perf header build_ids into b ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:05 am)
[tip:perf/live] perf trace/scripting: Add rwtop and sctop ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:05 am)
[tip:perf/live] perf trace/scripting: Enable scripting she ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:06 am)
[tip:perf/live] perf trace: Invoke live mode automatically ..., tip-bot for Tom Zanussi, (Wed Apr 14, 3:06 am)