aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2010-05-20 21:01:10 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2010-05-20 21:01:10 -0400
commit5d06e6915b1b76653e6fe3369b0b18fdbf75f0a5 (patch)
tree6ed4257dd38a923aa027988bd7dda627ff217c65 /tools
parentef365cefbc53d8674a18520a1d4c2e5590127299 (diff)
perf tui: Allow disabling the TUI on a per command basis in ~/.perfconfig
Using the same scheme as for git's/perf's pager setup, i.e. if one doesn't want to, on a newt enabled perf binary, to disable the TUI for 'perf report', its just a matter of doing: [root@doppio linux-2.6-tip]# printf "[tui]\n\nreport = off\n" > /root/.perfconfig [root@doppio linux-2.6-tip]# cat /root/.perfconfig [tui] report = off [root@doppio linux-2.6-tip]# System wide settings are also possible, by editing /etc/perfconfig, etc, i.e. the git machinery for config files applies to perf as well, so when in doubt where to put your settings, consult the git documentation, if it fails, please let us know. Suggested-by: Ingo Molnar <mingo@elte.hu> Discussed-with: Stephane Eranian <eranian@google.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Cc: Tom Zanussi <tzanussi@gmail.com> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/builtin-report.c8
-rw-r--r--tools/perf/perf.c25
-rw-r--r--tools/perf/util/cache.h2
-rw-r--r--tools/perf/util/newt.c9
4 files changed, 34 insertions, 10 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 1d3c1003b43a..a7b8760e401c 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -116,7 +116,7 @@ static int perf_session__add_hist_entry(struct perf_session *self,
116 * so we don't allocated the extra space needed because the stdio 116 * so we don't allocated the extra space needed because the stdio
117 * code will not use it. 117 * code will not use it.
118 */ 118 */
119 if (use_browser) 119 if (use_browser > 0)
120 err = hist_entry__inc_addr_samples(he, al->addr); 120 err = hist_entry__inc_addr_samples(he, al->addr);
121out_free_syms: 121out_free_syms:
122 free(syms); 122 free(syms);
@@ -330,7 +330,7 @@ static int __cmd_report(void)
330 hists = rb_entry(next, struct hists, rb_node); 330 hists = rb_entry(next, struct hists, rb_node);
331 hists__collapse_resort(hists); 331 hists__collapse_resort(hists);
332 hists__output_resort(hists); 332 hists__output_resort(hists);
333 if (use_browser) 333 if (use_browser > 0)
334 hists__browse(hists, help, input_name); 334 hists__browse(hists, help, input_name);
335 else { 335 else {
336 const char *evname = NULL; 336 const char *evname = NULL;
@@ -347,7 +347,7 @@ static int __cmd_report(void)
347 next = rb_next(&hists->rb_node); 347 next = rb_next(&hists->rb_node);
348 } 348 }
349 349
350 if (!use_browser && sort_order == default_sort_order && 350 if (use_browser <= 0 && sort_order == default_sort_order &&
351 parent_pattern == default_parent_pattern) { 351 parent_pattern == default_parent_pattern) {
352 fprintf(stdout, "#\n# (%s)\n#\n", help); 352 fprintf(stdout, "#\n# (%s)\n#\n", help);
353 353
@@ -491,7 +491,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
491 * so don't allocate extra space that won't be used in the stdio 491 * so don't allocate extra space that won't be used in the stdio
492 * implementation. 492 * implementation.
493 */ 493 */
494 if (use_browser) 494 if (use_browser > 0)
495 symbol_conf.priv_size = sizeof(struct sym_priv); 495 symbol_conf.priv_size = sizeof(struct sym_priv);
496 496
497 if (symbol__init() < 0) 497 if (symbol__init() < 0)
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 08e0e5d2b50e..6e4871191138 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -15,15 +15,15 @@
15#include "util/parse-events.h" 15#include "util/parse-events.h"
16#include "util/debugfs.h" 16#include "util/debugfs.h"
17 17
18bool use_browser;
19
20const char perf_usage_string[] = 18const char perf_usage_string[] =
21 "perf [--version] [--help] COMMAND [ARGS]"; 19 "perf [--version] [--help] COMMAND [ARGS]";
22 20
23const char perf_more_info_string[] = 21const char perf_more_info_string[] =
24 "See 'perf help COMMAND' for more information on a specific command."; 22 "See 'perf help COMMAND' for more information on a specific command.";
25 23
24int use_browser = -1;
26static int use_pager = -1; 25static int use_pager = -1;
26
27struct pager_config { 27struct pager_config {
28 const char *cmd; 28 const char *cmd;
29 int val; 29 int val;
@@ -49,6 +49,24 @@ int check_pager_config(const char *cmd)
49 return c.val; 49 return c.val;
50} 50}
51 51
52static int tui_command_config(const char *var, const char *value, void *data)
53{
54 struct pager_config *c = data;
55 if (!prefixcmp(var, "tui.") && !strcmp(var + 4, c->cmd))
56 c->val = perf_config_bool(var, value);
57 return 0;
58}
59
60/* returns 0 for "no tui", 1 for "use tui", and -1 for "not specified" */
61static int check_tui_config(const char *cmd)
62{
63 struct pager_config c;
64 c.cmd = cmd;
65 c.val = -1;
66 perf_config(tui_command_config, &c);
67 return c.val;
68}
69
52static void commit_pager_choice(void) 70static void commit_pager_choice(void)
53{ 71{
54 switch (use_pager) { 72 switch (use_pager) {
@@ -255,6 +273,9 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
255 if (p->option & RUN_SETUP) 273 if (p->option & RUN_SETUP)
256 prefix = NULL; /* setup_perf_directory(); */ 274 prefix = NULL; /* setup_perf_directory(); */
257 275
276 if (use_browser == -1)
277 use_browser = check_tui_config(p->cmd);
278
258 if (use_pager == -1 && p->option & RUN_SETUP) 279 if (use_pager == -1 && p->option & RUN_SETUP)
259 use_pager = check_pager_config(p->cmd); 280 use_pager = check_pager_config(p->cmd);
260 if (use_pager == -1 && p->option & USE_PAGER) 281 if (use_pager == -1 && p->option & USE_PAGER)
diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h
index 5eca52595b62..65fe664fddf6 100644
--- a/tools/perf/util/cache.h
+++ b/tools/perf/util/cache.h
@@ -30,7 +30,7 @@ extern const char *pager_program;
30extern int pager_in_use(void); 30extern int pager_in_use(void);
31extern int pager_use_color; 31extern int pager_use_color;
32 32
33extern bool use_browser; 33extern int use_browser;
34 34
35#ifdef NO_NEWT_SUPPORT 35#ifdef NO_NEWT_SUPPORT
36static inline void setup_browser(void) 36static inline void setup_browser(void)
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c
index 9338d060ee49..9d203c972f3b 100644
--- a/tools/perf/util/newt.c
+++ b/tools/perf/util/newt.c
@@ -1066,10 +1066,13 @@ static struct newtPercentTreeColors {
1066void setup_browser(void) 1066void setup_browser(void)
1067{ 1067{
1068 struct newtPercentTreeColors *c = &defaultPercentTreeColors; 1068 struct newtPercentTreeColors *c = &defaultPercentTreeColors;
1069 if (!isatty(1)) 1069
1070 if (!isatty(1) || !use_browser) {
1071 setup_pager();
1070 return; 1072 return;
1073 }
1071 1074
1072 use_browser = true; 1075 use_browser = 1;
1073 newtInit(); 1076 newtInit();
1074 newtCls(); 1077 newtCls();
1075 ui_helpline__puts(" "); 1078 ui_helpline__puts(" ");
@@ -1082,7 +1085,7 @@ void setup_browser(void)
1082 1085
1083void exit_browser(bool wait_for_ok) 1086void exit_browser(bool wait_for_ok)
1084{ 1087{
1085 if (use_browser) { 1088 if (use_browser > 0) {
1086 if (wait_for_ok) { 1089 if (wait_for_ok) {
1087 char title[] = "Fatal Error", ok[] = "Ok"; 1090 char title[] = "Fatal Error", ok[] = "Ok";
1088 newtWinMessage(title, ok, browser__last_msg); 1091 newtWinMessage(title, ok, browser__last_msg);