|
@@ -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;
|