perf tools: Make Ctrl-C stop processing on TUI
Namhyung Kim
maintainerPATCH 1/1 perf tools: Make Ctrl-C stop processing on TUI
It was inconvenient that perf cannot be quit with SIGINT during processing samples on TUI especially for large data files.
This was because the first argument of SLang_init_tty(), abort_char, being 0. The manual says it's the ascii value of the control character that will be used to generate the interrupt signal [1]. Passing -1 means to use the default value (Ctrl-C).
[1] http://jedsoft.org/slang/doc/html/cslang-6.html#ss6.1
--- tools/perf/ui/tui/setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/ui/tui/setup.c +1 -1
@@ -129,7 +129,7 @@ int ui__init(void) err =SLsmg_init_smg ();if (err <0 ) goto out; - err =SLang_init_tty (0 ,0 ,0 ); + err =SLang_init_tty (-1 ,0 ,0 );if (err <0 ) goto out;
Signature · 1 line
2.4.1
Quoted 20 lines · Namhyung Kim
It was inconvenient that perf cannot be quit with SIGINT during processing samples on TUI especially for large data files.
This was because the first argument of
SLang_init_tty(),abort_char, being 0. The manual says it's the ascii value of the control character that will be used to generate the interrupt signal [1]. Passing -1 means to use the default value (Ctrl-C).[1] http://jedsoft.org/slang/doc/html/cslang-6.html#ss6.1
Signed-off-by Namhyung Kim <[email protected]>--- tools/perf/ui/tui/setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)tools/perf/ui/tui/setup.c +0
-0
tools/perf/ui/tui/setup.c int ui__init(void) · line 134
Quoted 7 lines
tools/perf/ui/tui/setup.c +1
-1@@ -129,7 +129,7 @@ int ui__init(void) err =SLsmg_init_smg ();if (err <0 ) goto out; - err =SLang_init_tty (0 ,0 ,0 ); + err =SLang_init_tty (-1 ,0 ,0 );if (err <0 ) goto out;
Will this change the current Ctrl-C behavior in other places in any way?
Right now Ctrl-C behavior is pretty sensible: it essentially means instant abort of whatever was done, i.e. stepping back a level in 'perf top', exit the app if it's done at the highest level. I hope that's preserved! :-)
Thanks,
Ingo
Namhyung Kim
maintainerPATCH v2 1/1 perf tools: Make Ctrl-C stop processing on TUI
It was inconvenient that perf cannot be quit with SIGINT during processing samples on TUI especially for large data files.
This was because the first argument of SLang_init_tty(), abort_char, being 0. The manual says it's the ascii value of the control character that will be used to generate the interrupt signal [1]. Passing -1 means to use the default value (Ctrl-C).
However, after processing samples, Ctrl-C was used to in other cases as well - like stepping back from annotate. So recover the original behavior after processing.
[1] http://jedsoft.org/slang/doc/html/cslang-6.html#ss6.1
--- tools/perf/ui/browsers/annotate.c | 4 ++++ tools/perf/ui/browsers/hists.c | 4 ++++ tools/perf/ui/tui/setup.c | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-)
tools/perf/ui/browsers/annotate.c +4 -0
@@ -838,6 +838,10 @@ int map_symbol__tui_annotate(struct map_symbol *ms, struct perf_evsel *evsel,int hist_entry__tui_annotate (struct hist_entry *he,struct perf_evsel *evsel,struct hist_browser_timer *hbt) { +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +return map_symbol__tui_annotate (&he->ms, evsel, hbt); }
tools/perf/ui/browsers/hists.c +4 -0
@@ -1741,6 +1741,10 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,if (browser ==NULL )return -1 ; +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +if (min_pcnt) { browser->min_pcnt = min_pcnt;hist_browser__update_nr_entries (browser);
tools/perf/ui/tui/setup.c +1 -1
@@ -129,7 +129,7 @@ int ui__init(void) err =SLsmg_init_smg ();if (err <0 ) goto out; - err =SLang_init_tty (0 ,0 ,0 ); + err =SLang_init_tty (-1 ,0 ,0 );if (err <0 ) goto out;
Signature · 1 line
2.4.0
Arnaldo Carvalho de Melo
maintainerEm Fri, May 29, 2015 at 09:53:44PM +0900, Namhyung Kim escreveu:
Quoted 11 lines
It was inconvenient that perf cannot be quit with SIGINT during processing samples on TUI especially for large data files.
This was because the first argument of
SLang_init_tty(),abort_char, being 0. The manual says it's the ascii value of the control character that will be used to generate the interrupt signal [1]. Passing -1 means to use the default value (Ctrl-C).However, after processing samples, Ctrl-C was used to in other cases as well - like stepping back from annotate. So recover the original behavior after processing.
Right, but the way this was implemented it is error prone, I think...
I.e. better would be to enclose whatever section of code we want to be able to interrupt with control+C with something like:
ui__control_c_terminates(true);
process events, etc.
ui__control_c_terminates(false);
Or some more suitable name, couldn't think right now of any that would reuse something well established...
The way you implemented it, as soon as we implement a new browser, we will have to recall this detail to have Control+C working as it always worked on tools/perf, i.e. not terminating it.
- Arnaldo
Quoted 54 lines
[1] http://jedsoft.org/slang/doc/html/cslang-6.html#ss6.1
Signed-off-by Namhyung Kim <[email protected]>--- tools/perf/ui/browsers/annotate.c | 4 ++++ tools/perf/ui/browsers/hists.c | 4 ++++ tools/perf/ui/tui/setup.c | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-)tools/perf/ui/browsers/annotate.c +4
-0@@ -838,6 +838,10 @@ int map_symbol__tui_annotate(struct map_symbol *ms, struct perf_evsel *evsel,int hist_entry__tui_annotate (struct hist_entry *he,struct perf_evsel *evsel,struct hist_browser_timer *hbt) { +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +return map_symbol__tui_annotate (&he->ms, evsel, hbt); }tools/perf/ui/browsers/hists.c +4
-0@@ -1741,6 +1741,10 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,if (browser ==NULL )return -1 ; +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +if (min_pcnt) { browser->min_pcnt = min_pcnt;hist_browser__update_nr_entries (browser);tools/perf/ui/tui/setup.c +1
-1@@ -129,7 +129,7 @@ int ui__init(void) err =SLsmg_init_smg ();if (err <0 ) goto out; - err =SLang_init_tty (0 ,0 ,0 ); + err =SLang_init_tty (-1 ,0 ,0 );if (err <0 ) goto out;Signature · 1 line
2.4.0
Arnaldo Carvalho de Melo
maintainerEm Fri, May 29, 2015 at 10:24:37AM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 15 lines
Em Fri, May 29, 2015 at 09:53:44PM +0900, Namhyung Kim escreveu:
Quoted 11 lines
It was inconvenient that perf cannot be quit with SIGINT during processing samples on TUI especially for large data files.
This was because the first argument of
SLang_init_tty(),abort_char, being 0. The manual says it's the ascii value of the control character that will be used to generate the interrupt signal [1]. Passing -1 means to use the default value (Ctrl-C).However, after processing samples, Ctrl-C was used to in other cases as well - like stepping back from annotate. So recover the original behavior after processing.
Right, but the way this was implemented it is error prone, I think...
Quoted 8 lines
I.e. better would be to enclose whatever section of code we want to be able to interrupt with control+C with something like:
ui__control_c_terminates(true);process events, etc.
ui__control_c_terminates(false);
Applied anyway, this can be done later...
- Arnaldo
Quoted 63 lines
Or some more suitable name, couldn't think right now of any that would reuse something well established...
The way you implemented it, as soon as we implement a new browser, we will have to recall this detail to have Control+C working as it always worked on
tools/perf, i.e. not terminating it.- Arnaldo
Quoted 54 lines
[1] http://jedsoft.org/slang/doc/html/cslang-6.html#ss6.1
Signed-off-by Namhyung Kim <[email protected]>--- tools/perf/ui/browsers/annotate.c | 4 ++++ tools/perf/ui/browsers/hists.c | 4 ++++ tools/perf/ui/tui/setup.c | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-)tools/perf/ui/browsers/annotate.c +4
-0@@ -838,6 +838,10 @@ int map_symbol__tui_annotate(struct map_symbol *ms, struct perf_evsel *evsel,int hist_entry__tui_annotate (struct hist_entry *he,struct perf_evsel *evsel,struct hist_browser_timer *hbt) { +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +return map_symbol__tui_annotate (&he->ms, evsel, hbt); }tools/perf/ui/browsers/hists.c +4
-0@@ -1741,6 +1741,10 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,if (browser ==NULL )return -1 ; +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +if (min_pcnt) { browser->min_pcnt = min_pcnt;hist_browser__update_nr_entries (browser);tools/perf/ui/tui/setup.c +1
-1@@ -129,7 +129,7 @@ int ui__init(void) err =SLsmg_init_smg ();if (err <0 ) goto out; - err =SLang_init_tty (0 ,0 ,0 ); + err =SLang_init_tty (-1 ,0 ,0 );if (err <0 ) goto out;Signature · 1 line
2.4.0
tip-bot for Namhyung Kim
merge botperf tools: Make Ctrl-C stop processing on TUI
Commit-ID: ed426915900db3c58c410b8b38f6ff0e46bf6c96 Gitweb: http://git.kernel.org/tip/ed426915900db3c58c410b8b38f6ff0e46bf6c96 Author: Namhyung Kim <[email protected]> AuthorDate: Fri, 29 May 2015 21:53:44 +0900 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 29 May 2015 12:49:00 -0300
perf tools: Make Ctrl-C stop processing on TUI
It was inconvenient that perf cannot be quit with SIGINT during processing samples on TUI especially for large data files.
This was because the first argument of SLang_init_tty(), abort_char, being 0. The manual says it's the ascii value of the control character that will be used to generate the interrupt signal [1]. Passing -1 means to use the default value (Ctrl-C).
However, after processing samples, Ctrl-C was used to in other cases as well - like stepping back from annotate. So recover the original behavior after processing.
[1] http://jedsoft.org/slang/doc/html/cslang-6.html#ss6.1
--- tools/perf/ui/browsers/annotate.c | 4 ++++ tools/perf/ui/browsers/hists.c | 4 ++++ tools/perf/ui/tui/setup.c | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-)
tools/perf/ui/browsers/annotate.c +4 -0
@@ -838,6 +838,10 @@ int map_symbol__tui_annotate(struct map_symbol *ms, struct perf_evsel *evsel,int hist_entry__tui_annotate (struct hist_entry *he,struct perf_evsel *evsel,struct hist_browser_timer *hbt) { +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +return map_symbol__tui_annotate (&he->ms, evsel, hbt); }
tools/perf/ui/browsers/hists.c +4 -0
@@ -1741,6 +1741,10 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,if (browser ==NULL )return -1 ; +/* reset abort key so that it can get Ctrl-C as a key */ +SLang_reset_tty (); +SLang_init_tty (0 ,0 ,0 ); +if (min_pcnt) { browser->min_pcnt = min_pcnt;hist_browser__update_nr_entries (browser);
tools/perf/ui/tui/setup.c +1 -1
@@ -129,7 +129,7 @@ int ui__init(void) err =SLsmg_init_smg ();if (err <0 ) goto out; - err =SLang_init_tty (0 ,0 ,0 ); + err =SLang_init_tty (-1 ,0 ,0 );if (err <0 ) goto out;