diff options
| author | Feng Tang <feng.tang@intel.com> | 2013-02-03 14:38:21 +0800 | 
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-02-06 18:09:25 -0300 | 
| commit | ad0de0971b7f7097bd9be1ab4ad2a64db500adbf (patch) | |
| tree | 45d47634deedd22082fdb4c96a35c6e1bb4dfe24 | |
| parent | 341487ab561f3937a5283dd77c5660b1ee3b1f9e (diff) | |
| download | olio-linux-3.10-ad0de0971b7f7097bd9be1ab4ad2a64db500adbf.tar.xz olio-linux-3.10-ad0de0971b7f7097bd9be1ab4ad2a64db500adbf.zip  | |
perf report: Enable the runtime switching of perf data file
This is for tui browser only. This patch will check the returned key of
tui hists browser, if it's K_SWITH_INPUT_DATA, then recreate a session
for the new selected data file.
V2: Move the setup_brower() before the "repeat" jump point.
Signed-off-by: Feng Tang <feng.tang@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1359873501-24541-2-git-send-email-feng.tang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/perf/builtin-report.c | 38 | 
1 files changed, 27 insertions, 11 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 0d221870561..91555d4885f 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -468,9 +468,17 @@ static int __cmd_report(struct perf_report *rep)  	if (use_browser > 0) {  		if (use_browser == 1) { -			perf_evlist__tui_browse_hists(session->evlist, help, -						      NULL, -						      &session->header.env); +			ret = perf_evlist__tui_browse_hists(session->evlist, +							help, +							NULL, +							&session->header.env); +			/* +			 * Usually "ret" is the last pressed key, and we only +			 * care if the key notifies us to switch data file. +			 */ +			if (ret != K_SWITCH_INPUT_DATA) +				ret = 0; +  		} else if (use_browser == 2) {  			perf_evlist__gtk_browse_hists(session->evlist, help,  						      NULL); @@ -708,6 +716,16 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)  		else  			input_name = "perf.data";  	} + +	if (strcmp(input_name, "-") != 0) +		setup_browser(true); +	else { +		use_browser = 0; +		perf_hpp__column_enable(PERF_HPP__OVERHEAD); +		perf_hpp__init(); +	} + +repeat:  	session = perf_session__new(input_name, O_RDONLY,  				    report.force, false, &report.tool);  	if (session == NULL) @@ -733,14 +751,6 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)  	} -	if (strcmp(input_name, "-") != 0) -		setup_browser(true); -	else { -		use_browser = 0; -		perf_hpp__column_enable(PERF_HPP__OVERHEAD); -		perf_hpp__init(); -	} -  	setup_sorting(report_usage, options);  	/* @@ -809,6 +819,12 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)  	}  	ret = __cmd_report(&report); +	if (ret == K_SWITCH_INPUT_DATA) { +		perf_session__delete(session); +		goto repeat; +	} else +		ret = 0; +  error:  	perf_session__delete(session);  	return ret;  |