diff options
| author | Ingo Molnar <mingo@elte.hu> | 2010-05-21 03:50:09 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2010-05-21 03:50:09 -0400 |
| commit | 1c34bde13a3cdcd4c7c6322f8052e67c2c91caf1 (patch) | |
| tree | 3be33fd17c7b3101acb638771075cf6681334c36 | |
| parent | 915e555822629421d97f851c6b87bf4c314ed8c9 (diff) | |
| parent | 5d06e6915b1b76653e6fe3369b0b18fdbf75f0a5 (diff) | |
Merge branch 'perf' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 into perf/core
| -rw-r--r-- | tools/perf/builtin-record.c | 17 | ||||
| -rw-r--r-- | tools/perf/builtin-report.c | 8 | ||||
| -rw-r--r-- | tools/perf/perf.c | 25 | ||||
| -rw-r--r-- | tools/perf/util/cache.h | 2 | ||||
| -rw-r--r-- | tools/perf/util/newt.c | 9 |
5 files changed, 35 insertions, 26 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 66b8ecd22cf..e6722698183 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
| @@ -65,9 +65,6 @@ static bool multiplex = false; | |||
| 65 | static int multiplex_fd = -1; | 65 | static int multiplex_fd = -1; |
| 66 | 66 | ||
| 67 | static long samples = 0; | 67 | static long samples = 0; |
| 68 | static struct timeval last_read; | ||
| 69 | static struct timeval this_read; | ||
| 70 | |||
| 71 | static u64 bytes_written = 0; | 68 | static u64 bytes_written = 0; |
| 72 | 69 | ||
| 73 | static struct pollfd *event_array; | 70 | static struct pollfd *event_array; |
| @@ -147,8 +144,6 @@ static void mmap_read(struct mmap_data *md) | |||
| 147 | void *buf; | 144 | void *buf; |
| 148 | int diff; | 145 | int diff; |
| 149 | 146 | ||
| 150 | gettimeofday(&this_read, NULL); | ||
| 151 | |||
| 152 | /* | 147 | /* |
| 153 | * If we're further behind than half the buffer, there's a chance | 148 | * If we're further behind than half the buffer, there's a chance |
| 154 | * the writer will bite our tail and mess up the samples under us. | 149 | * the writer will bite our tail and mess up the samples under us. |
| @@ -159,23 +154,13 @@ static void mmap_read(struct mmap_data *md) | |||
| 159 | */ | 154 | */ |
| 160 | diff = head - old; | 155 | diff = head - old; |
| 161 | if (diff < 0) { | 156 | if (diff < 0) { |
| 162 | struct timeval iv; | 157 | fprintf(stderr, "WARNING: failed to keep up with mmap data\n"); |
| 163 | unsigned long msecs; | ||
| 164 | |||
| 165 | timersub(&this_read, &last_read, &iv); | ||
| 166 | msecs = iv.tv_sec*1000 + iv.tv_usec/1000; | ||
| 167 | |||
| 168 | fprintf(stderr, "WARNING: failed to keep up with mmap data." | ||
| 169 | " Last read %lu msecs ago.\n", msecs); | ||
| 170 | |||
| 171 | /* | 158 | /* |
| 172 | * head points to a known good entry, start there. | 159 | * head points to a known good entry, start there. |
| 173 | */ | 160 | */ |
| 174 | old = head; | 161 | old = head; |
| 175 | } | 162 | } |
| 176 | 163 | ||
| 177 | last_read = this_read; | ||
| 178 | |||
| 179 | if (old != head) | 164 | if (old != head) |
| 180 | samples++; | 165 | samples++; |
| 181 | 166 | ||
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 1d3c1003b43..a7b8760e401 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); |
| 121 | out_free_syms: | 121 | out_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 08e0e5d2b50..6e487119113 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 | ||
| 18 | bool use_browser; | ||
| 19 | |||
| 20 | const char perf_usage_string[] = | 18 | const char perf_usage_string[] = |
| 21 | "perf [--version] [--help] COMMAND [ARGS]"; | 19 | "perf [--version] [--help] COMMAND [ARGS]"; |
| 22 | 20 | ||
| 23 | const char perf_more_info_string[] = | 21 | const 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 | ||
| 24 | int use_browser = -1; | ||
| 26 | static int use_pager = -1; | 25 | static int use_pager = -1; |
| 26 | |||
| 27 | struct pager_config { | 27 | struct 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 | ||
| 52 | static 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" */ | ||
| 61 | static 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 | |||
| 52 | static void commit_pager_choice(void) | 70 | static 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 5eca52595b6..65fe664fddf 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h | |||
| @@ -30,7 +30,7 @@ extern const char *pager_program; | |||
| 30 | extern int pager_in_use(void); | 30 | extern int pager_in_use(void); |
| 31 | extern int pager_use_color; | 31 | extern int pager_use_color; |
| 32 | 32 | ||
| 33 | extern bool use_browser; | 33 | extern int use_browser; |
| 34 | 34 | ||
| 35 | #ifdef NO_NEWT_SUPPORT | 35 | #ifdef NO_NEWT_SUPPORT |
| 36 | static inline void setup_browser(void) | 36 | static inline void setup_browser(void) |
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c index 051022eb5f4..0b45658f749 100644 --- a/tools/perf/util/newt.c +++ b/tools/perf/util/newt.c | |||
| @@ -1068,10 +1068,13 @@ static struct newtPercentTreeColors { | |||
| 1068 | void setup_browser(void) | 1068 | void setup_browser(void) |
| 1069 | { | 1069 | { |
| 1070 | struct newtPercentTreeColors *c = &defaultPercentTreeColors; | 1070 | struct newtPercentTreeColors *c = &defaultPercentTreeColors; |
| 1071 | if (!isatty(1)) | 1071 | |
| 1072 | if (!isatty(1) || !use_browser) { | ||
| 1073 | setup_pager(); | ||
| 1072 | return; | 1074 | return; |
| 1075 | } | ||
| 1073 | 1076 | ||
| 1074 | use_browser = true; | 1077 | use_browser = 1; |
| 1075 | newtInit(); | 1078 | newtInit(); |
| 1076 | newtCls(); | 1079 | newtCls(); |
| 1077 | ui_helpline__puts(" "); | 1080 | ui_helpline__puts(" "); |
| @@ -1084,7 +1087,7 @@ void setup_browser(void) | |||
| 1084 | 1087 | ||
| 1085 | void exit_browser(bool wait_for_ok) | 1088 | void exit_browser(bool wait_for_ok) |
| 1086 | { | 1089 | { |
| 1087 | if (use_browser) { | 1090 | if (use_browser > 0) { |
| 1088 | if (wait_for_ok) { | 1091 | if (wait_for_ok) { |
| 1089 | char title[] = "Fatal Error", ok[] = "Ok"; | 1092 | char title[] = "Fatal Error", ok[] = "Ok"; |
| 1090 | newtWinMessage(title, ok, browser__last_msg); | 1093 | newtWinMessage(title, ok, browser__last_msg); |
