On Wed, May 20, 2020 at 06:09:14PM -0300, Arnaldo Carvalho de Melo wrote: > Em Sun, May 10, 2020 at 11:06:23PM +0800, Changbin Du escreveu: > > Sometimes we want perf displays trace immediately. So this adds an option > > '-P/--no-pager' to disable pager if needed. > > > Try: > > perf record sleep 5 > perf script > > Then: > > perf --no-pager script > > I.e. its there already. > > - Arnaldo > Yes, just tried this and it works: perf --no-pager ftrace
So, the problem is that this option is not documented. > > > > Signed-off-by: Changbin Du <changbin...@gmail.com> > > --- > > tools/perf/builtin-ftrace.c | 17 ++++++++++++++--- > > 1 file changed, 14 insertions(+), 3 deletions(-) > > > > diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c > > index a93fbdac6aa4..64c22f367ba2 100644 > > --- a/tools/perf/builtin-ftrace.c > > +++ b/tools/perf/builtin-ftrace.c > > @@ -48,6 +48,7 @@ struct perf_ftrace { > > unsigned tracing_thresh; > > bool trace_children; > > unsigned buffer_size_kb; > > + bool no_pager; > > }; > > > > struct filter_entry { > > @@ -56,6 +57,7 @@ struct filter_entry { > > }; > > > > static volatile int workload_exec_errno; > > +static bool interrupted; > > static bool done; > > > > static void sig_handler(int sig __maybe_unused) > > @@ -63,6 +65,12 @@ static void sig_handler(int sig __maybe_unused) > > done = true; > > } > > > > +static void sig_handler_int(int sig __maybe_unused) > > +{ > > + sig_handler(sig); > > + interrupted = 1; > > +} > > + > > /* > > * perf_evlist__prepare_workload will send a SIGUSR1 if the fork fails, > > since > > * we asked by setting its exec_error to the function below, > > @@ -492,7 +500,7 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int > > argc, const char **argv) > > return -1; > > } > > > > - signal(SIGINT, sig_handler); > > + signal(SIGINT, sig_handler_int); > > signal(SIGUSR1, sig_handler); > > signal(SIGCHLD, sig_handler); > > signal(SIGPIPE, sig_handler); > > @@ -585,7 +593,8 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int > > argc, const char **argv) > > goto out_reset; > > } > > > > - setup_pager(); > > + if (!ftrace->no_pager) > > + setup_pager(); > > > > trace_file = get_tracing_file("trace_pipe"); > > if (!trace_file) { > > @@ -636,7 +645,7 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int > > argc, const char **argv) > > } > > > > /* read remaining buffer contents */ > > - while (true) { > > + while (true && !interrupted) { > > int n = read(trace_fd, buf, sizeof(buf)); > > if (n <= 0) > > break; > > @@ -731,6 +740,8 @@ int cmd_ftrace(int argc, const char **argv) > > "Trace children processes"), > > OPT_UINTEGER('b', "buffer-size", &ftrace.buffer_size_kb, > > "size of per cpu buffer in kb"), > > + OPT_BOOLEAN('P', "no-pager", &ftrace.no_pager, > > + "Do not use pager"), > > OPT_END() > > }; > > > > -- > > 2.25.1 > > > > -- > > - Arnaldo -- Cheers, Changbin Du