* [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol
@ 2012-03-16 8:50 Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window Namhyung Kim
` (4 more replies)
0 siblings, 5 replies; 16+ messages in thread
From: Namhyung Kim @ 2012-03-16 8:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
This function will be used for simple (sub-)string matching
filter based on user input.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/util/hist.c | 35 +++++++++++++++++++++++++++++++++++
tools/perf/util/hist.h | 2 ++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 8380c3db1c92..2c624ad371a7 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -10,11 +10,14 @@ static bool hists__filter_entry_by_dso(struct hists *hists,
struct hist_entry *he);
static bool hists__filter_entry_by_thread(struct hists *hists,
struct hist_entry *he);
+static bool hists__filter_entry_by_symbol(struct hists *hists,
+ struct hist_entry *he);
enum hist_filter {
HIST_FILTER__DSO,
HIST_FILTER__THREAD,
HIST_FILTER__PARENT,
+ HIST_FILTER__SYMBOL,
};
struct callchain_param callchain_param = {
@@ -420,6 +423,7 @@ static void hists__apply_filters(struct hists *hists, struct hist_entry *he)
{
hists__filter_entry_by_dso(hists, he);
hists__filter_entry_by_thread(hists, he);
+ hists__filter_entry_by_symbol(hists, he);
}
static void __hists__collapse_resort(struct hists *hists, bool threaded)
@@ -1247,6 +1251,37 @@ void hists__filter_by_thread(struct hists *hists)
}
}
+static bool hists__filter_entry_by_symbol(struct hists *hists,
+ struct hist_entry *he)
+{
+ if (hists->symbol_filter_str != NULL &&
+ (!he->ms.sym || strstr(he->ms.sym->name,
+ hists->symbol_filter_str) == NULL)) {
+ he->filtered |= (1 << HIST_FILTER__SYMBOL);
+ return true;
+ }
+
+ return false;
+}
+
+void hists__filter_by_symbol(struct hists *hists)
+{
+ struct rb_node *nd;
+
+ hists->nr_entries = hists->stats.total_period = 0;
+ hists->stats.nr_events[PERF_RECORD_SAMPLE] = 0;
+ hists__reset_col_len(hists);
+
+ for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
+ struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
+
+ if (hists__filter_entry_by_symbol(hists, h))
+ continue;
+
+ hists__remove_entry_filter(hists, h, HIST_FILTER__SYMBOL);
+ }
+}
+
int hist_entry__inc_addr_samples(struct hist_entry *he, int evidx, u64 ip)
{
return symbol__inc_addr_samples(he->ms.sym, he->ms.map, evidx, ip);
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 9413f3e31fea..10343c081e19 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -62,6 +62,7 @@ struct hists {
const struct thread *thread_filter;
const struct dso *dso_filter;
const char *uid_filter_str;
+ const char *symbol_filter_str;
pthread_mutex_t lock;
struct events_stats stats;
u64 event_stream;
@@ -107,6 +108,7 @@ int hist_entry__annotate(struct hist_entry *self, size_t privsize);
void hists__filter_by_dso(struct hists *hists);
void hists__filter_by_thread(struct hists *hists);
+void hists__filter_by_symbol(struct hists *hists);
u16 hists__col_len(struct hists *self, enum hist_column col);
void hists__set_col_len(struct hists *self, enum hist_column col, u16 len);
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window
2012-03-16 8:50 [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol Namhyung Kim
@ 2012-03-16 8:50 ` Namhyung Kim
2012-03-16 19:40 ` Arnaldo Carvalho de Melo
2012-03-19 20:03 ` [tip:perf/core] perf ui browser: Introduce ui_browser__input_window tip-bot for Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 3/5] perf ui browser: Add 's' key to filter by symbol name Namhyung Kim
` (3 subsequent siblings)
4 siblings, 2 replies; 16+ messages in thread
From: Namhyung Kim @ 2012-03-16 8:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
The ui_browser__input_window() function is to get user's key input.
Current implementation can handle maximum 49 characters.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/util/ui/browser.h | 2 +
tools/perf/util/ui/keysyms.h | 2 +
tools/perf/util/ui/util.c | 78 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 82 insertions(+), 0 deletions(-)
diff --git a/tools/perf/util/ui/browser.h b/tools/perf/util/ui/browser.h
index 84d761b730c1..6ee82f60feaf 100644
--- a/tools/perf/util/ui/browser.h
+++ b/tools/perf/util/ui/browser.h
@@ -49,6 +49,8 @@ int ui_browser__warning(struct ui_browser *browser, int timeout,
const char *format, ...);
int ui_browser__help_window(struct ui_browser *browser, const char *text);
bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text);
+int ui_browser__input_window(const char *title, const char *text, char *input,
+ const char *exit_msg, int delay_sec);
void ui_browser__argv_seek(struct ui_browser *browser, off_t offset, int whence);
unsigned int ui_browser__argv_refresh(struct ui_browser *browser);
diff --git a/tools/perf/util/ui/keysyms.h b/tools/perf/util/ui/keysyms.h
index 3458b1985761..809eca5707fa 100644
--- a/tools/perf/util/ui/keysyms.h
+++ b/tools/perf/util/ui/keysyms.h
@@ -16,6 +16,8 @@
#define K_TAB '\t'
#define K_UNTAB SL_KEY_UNTAB
#define K_UP SL_KEY_UP
+#define K_BKSPC 0x7f
+#define K_DEL SL_KEY_DELETE
/* Not really keys */
#define K_TIMER -1
diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
index 45daa7c41dad..360f43fd5400 100644
--- a/tools/perf/util/ui/util.c
+++ b/tools/perf/util/ui/util.c
@@ -69,6 +69,84 @@ int ui__popup_menu(int argc, char * const argv[])
return popup_menu__run(&menu);
}
+int ui_browser__input_window(const char *title, const char *text, char *input,
+ const char *exit_msg, int delay_secs)
+{
+ int x, y, len, key;
+ int max_len = 60, nr_lines = 0;
+ static char buf[50];
+ const char *t;
+
+ t = text;
+ while (1) {
+ const char *sep = strchr(t, '\n');
+
+ if (sep == NULL)
+ sep = strchr(t, '\0');
+ len = sep - t;
+ if (max_len < len)
+ max_len = len;
+ ++nr_lines;
+ if (*sep == '\0')
+ break;
+ t = sep + 1;
+ }
+
+ max_len += 2;
+ nr_lines += 8;
+ y = SLtt_Screen_Rows / 2 - nr_lines / 2;
+ x = SLtt_Screen_Cols / 2 - max_len / 2;
+
+ SLsmg_set_color(0);
+ SLsmg_draw_box(y, x++, nr_lines, max_len);
+ if (title) {
+ SLsmg_gotorc(y, x + 1);
+ SLsmg_write_string((char *)title);
+ }
+ SLsmg_gotorc(++y, x);
+ nr_lines -= 7;
+ max_len -= 2;
+ SLsmg_write_wrapped_string((unsigned char *)text, y, x,
+ nr_lines, max_len, 1);
+ y += nr_lines + 1;
+ SLsmg_set_color(0);
+ SLsmg_draw_box(y - 1, x + 1, 3, max_len - 2);
+
+ SLsmg_gotorc(y + 3, x);
+ SLsmg_write_nstring((char *)exit_msg, max_len);
+ SLsmg_refresh();
+
+ x += 2;
+ len = 0;
+ key = ui__getch(delay_secs);
+ while (key != K_TIMER && key != K_ENTER && key != K_ESC) {
+ if (key == K_BKSPC) {
+ if (len == 0)
+ goto next_key;
+ SLsmg_gotorc(y, x + --len);
+ SLsmg_write_char(' ');
+ } else {
+ buf[len] = key;
+ SLsmg_gotorc(y, x + len++);
+ SLsmg_write_char(key);
+ }
+ SLsmg_refresh();
+
+ /* XXX more graceful overflow handling needed */
+ if (len == sizeof(buf) - 1) {
+ ui_helpline__push("maximum size of symbol name reached!");
+ key = K_ENTER;
+ break;
+ }
+next_key:
+ key = ui__getch(delay_secs);
+ }
+
+ buf[len] = '\0';
+ strncpy(input, buf, len+1);
+ return key;
+}
+
int ui__question_window(const char *title, const char *text,
const char *exit_msg, int delay_secs)
{
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/5] perf ui browser: Add 's' key to filter by symbol name
2012-03-16 8:50 [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window Namhyung Kim
@ 2012-03-16 8:50 ` Namhyung Kim
2012-03-19 20:03 ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 4/5] perf report: Add --symbol-filter option Namhyung Kim
` (2 subsequent siblings)
4 siblings, 1 reply; 16+ messages in thread
From: Namhyung Kim @ 2012-03-16 8:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
Now user can enter symbol name interested via ui_browser__input_window,
and perf can process it using hists__filter_by_symbol(). Giving empty
symbol (by pressing 's' followed by ENTER) will disable the filtering.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/util/ui/browsers/hists.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/tools/perf/util/ui/browsers/hists.c b/tools/perf/util/ui/browsers/hists.c
index de8ece8bcce3..c4173c9733bb 100644
--- a/tools/perf/util/ui/browsers/hists.c
+++ b/tools/perf/util/ui/browsers/hists.c
@@ -879,6 +879,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
char *options[16];
int nr_options = 0;
int key = -1;
+ char buf[64];
if (browser == NULL)
return -1;
@@ -933,6 +934,16 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
goto zoom_dso;
case 't':
goto zoom_thread;
+ case 's':
+ if (ui_browser__input_window("Symbol to show",
+ "Please enter the name of symbol you want to see",
+ buf, "ENTER: OK, ESC: Cancel",
+ delay_secs * 2) == K_ENTER) {
+ self->symbol_filter_str = *buf ? buf : NULL;
+ hists__filter_by_symbol(self);
+ hist_browser__reset(browser);
+ }
+ continue;
case K_F1:
case 'h':
case '?':
@@ -950,7 +961,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
"C Collapse all callchains\n"
"E Expand all callchains\n"
"d Zoom into current DSO\n"
- "t Zoom into current Thread");
+ "t Zoom into current Thread\n"
+ "s Filter symbol by name");
continue;
case K_ENTER:
case K_RIGHT:
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/5] perf report: Add --symbol-filter option
2012-03-16 8:50 [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 3/5] perf ui browser: Add 's' key to filter by symbol name Namhyung Kim
@ 2012-03-16 8:50 ` Namhyung Kim
2012-03-16 19:42 ` Arnaldo Carvalho de Melo
2012-03-19 20:04 ` [tip:perf/core] perf report: Add " tip-bot for Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 5/5] perf report: Treat an argument as a symbol filter Namhyung Kim
2012-03-19 20:02 ` [tip:perf/core] perf hists: Add hists__filter_by_symbol tip-bot for Namhyung Kim
4 siblings, 2 replies; 16+ messages in thread
From: Namhyung Kim @ 2012-03-16 8:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
Add new --symbol-filter command line option to set appropriate
filter string. Its short version is missing as I couldn't find
an ideal one and --filter option of perf record also has no
short version.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/builtin-report.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 8e91c6eba18a..80fb90741b64 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -50,6 +50,7 @@ struct perf_report {
const char *pretty_printing_style;
symbol_filter_t annotate_init;
const char *cpu_list;
+ const char *symbol_filter_str;
DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
};
@@ -400,6 +401,9 @@ static int __cmd_report(struct perf_report *rep)
list_for_each_entry(pos, &session->evlist->entries, node) {
struct hists *hists = &pos->hists;
+ if (pos->idx == 0)
+ hists->symbol_filter_str = rep->symbol_filter_str;
+
hists__collapse_resort(hists);
hists__output_resort(hists);
nr_samples += hists->stats.nr_events[PERF_RECORD_SAMPLE];
@@ -591,6 +595,8 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
"only consider symbols in these comms"),
OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]",
"only consider these symbols"),
+ OPT_STRING(0, "symbol-filter", &report.symbol_filter_str, "filter",
+ "only show symbols that (partially) match with this filter"),
OPT_STRING('w', "column-widths", &symbol_conf.col_width_list_str,
"width[,width...]",
"don't try to adjust column width, use these fixed values"),
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/5] perf report: Treat an argument as a symbol filter
2012-03-16 8:50 [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol Namhyung Kim
` (2 preceding siblings ...)
2012-03-16 8:50 ` [PATCH v2 4/5] perf report: Add --symbol-filter option Namhyung Kim
@ 2012-03-16 8:50 ` Namhyung Kim
2012-03-19 20:05 ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-03-19 20:02 ` [tip:perf/core] perf hists: Add hists__filter_by_symbol tip-bot for Namhyung Kim
4 siblings, 1 reply; 16+ messages in thread
From: Namhyung Kim @ 2012-03-16 8:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
As Ingo requested, it'd be better off treating first (and the only)
argument as a symbol filter, so that user doesn't need to input the
symbol on the dialog window on TUI.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/builtin-report.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 80fb90741b64..c00545806bb7 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -715,11 +715,16 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
} else
symbol_conf.exclude_other = false;
- /*
- * Any (unrecognized) arguments left?
- */
- if (argc)
- usage_with_options(report_usage, options);
+ if (argc) {
+ /*
+ * Special case: if there's an argument left then assume that
+ * it's a symbol filter:
+ */
+ if (argc > 1)
+ usage_with_options(report_usage, options);
+
+ report.symbol_filter_str = argv[0];
+ }
sort_entry__setup_elide(&sort_comm, symbol_conf.comm_list, "comm", stdout);
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window
2012-03-16 8:50 ` [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window Namhyung Kim
@ 2012-03-16 19:40 ` Arnaldo Carvalho de Melo
2012-03-19 2:46 ` [PATCH] perf ui browser: Clean lines inside of the input window Namhyung Kim
2012-03-19 20:03 ` [tip:perf/core] perf ui browser: Introduce ui_browser__input_window tip-bot for Namhyung Kim
1 sibling, 1 reply; 16+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-16 19:40 UTC (permalink / raw)
To: Namhyung Kim
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
Em Fri, Mar 16, 2012 at 05:50:52PM +0900, Namhyung Kim escreveu:
> The ui_browser__input_window() function is to get user's key input.
> Current implementation can handle maximum 49 characters.
You need to clean the lines with no strings using something like:
SLsmg_write_nstring((char *)" ", max_len);
After gotorcing there, etc. To avoid things like:
+ 1.29% perf [jbd2] [k] do_get_write_access
+ 1.19% init [kernel.kallsyms] [k] native_┌─Symbol to show─────────────────────────────────────────────┐
+ 0.78% swapper [kernel.kallsyms] [k] schedul│Please enter the name of symbol you want to see │
+ 0.63% init [kernel.kallsyms] [k] __hrtim│r_start_range_ns │
+ 0.62% firefox ld-2.12.so [.] __tls_g│t┌────────────────────────────────────────────────────────┐ │
+ 0.44% firefox [kernel.kallsyms] [k] avc_has│p│rm_noaudit │ │
+ 0.44% firefox libglib-2.0.so.0.2200.5 [.] g_slice│f└────────────────────────────────────────────────────────┘ │
+ 0.41% Xorg [kernel.kallsyms] [k] list_de│ │
+ 0.39% firefox [kernel.kallsyms] [k] read_ts│ENTER: OK, ESC: Cancel │
+ 0.38% init [kernel.kallsyms] [k] _spin_l└────────────────────────────────────────────────────────────┘
+ 0.36% firefox [kernel.kallsyms] [k] _spin_unlock_irqrestore
I'm applying this one, please send a fix on top of perf/core later when I ask
Ingo to pull the current backlog,
Thanks,
- Arnaldo
> Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
> ---
> tools/perf/util/ui/browser.h | 2 +
> tools/perf/util/ui/keysyms.h | 2 +
> tools/perf/util/ui/util.c | 78 ++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 82 insertions(+), 0 deletions(-)
>
> diff --git a/tools/perf/util/ui/browser.h b/tools/perf/util/ui/browser.h
> index 84d761b730c1..6ee82f60feaf 100644
> --- a/tools/perf/util/ui/browser.h
> +++ b/tools/perf/util/ui/browser.h
> @@ -49,6 +49,8 @@ int ui_browser__warning(struct ui_browser *browser, int timeout,
> const char *format, ...);
> int ui_browser__help_window(struct ui_browser *browser, const char *text);
> bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text);
> +int ui_browser__input_window(const char *title, const char *text, char *input,
> + const char *exit_msg, int delay_sec);
>
> void ui_browser__argv_seek(struct ui_browser *browser, off_t offset, int whence);
> unsigned int ui_browser__argv_refresh(struct ui_browser *browser);
> diff --git a/tools/perf/util/ui/keysyms.h b/tools/perf/util/ui/keysyms.h
> index 3458b1985761..809eca5707fa 100644
> --- a/tools/perf/util/ui/keysyms.h
> +++ b/tools/perf/util/ui/keysyms.h
> @@ -16,6 +16,8 @@
> #define K_TAB '\t'
> #define K_UNTAB SL_KEY_UNTAB
> #define K_UP SL_KEY_UP
> +#define K_BKSPC 0x7f
> +#define K_DEL SL_KEY_DELETE
>
> /* Not really keys */
> #define K_TIMER -1
> diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
> index 45daa7c41dad..360f43fd5400 100644
> --- a/tools/perf/util/ui/util.c
> +++ b/tools/perf/util/ui/util.c
> @@ -69,6 +69,84 @@ int ui__popup_menu(int argc, char * const argv[])
> return popup_menu__run(&menu);
> }
>
> +int ui_browser__input_window(const char *title, const char *text, char *input,
> + const char *exit_msg, int delay_secs)
> +{
> + int x, y, len, key;
> + int max_len = 60, nr_lines = 0;
> + static char buf[50];
> + const char *t;
> +
> + t = text;
> + while (1) {
> + const char *sep = strchr(t, '\n');
> +
> + if (sep == NULL)
> + sep = strchr(t, '\0');
> + len = sep - t;
> + if (max_len < len)
> + max_len = len;
> + ++nr_lines;
> + if (*sep == '\0')
> + break;
> + t = sep + 1;
> + }
> +
> + max_len += 2;
> + nr_lines += 8;
> + y = SLtt_Screen_Rows / 2 - nr_lines / 2;
> + x = SLtt_Screen_Cols / 2 - max_len / 2;
> +
> + SLsmg_set_color(0);
> + SLsmg_draw_box(y, x++, nr_lines, max_len);
> + if (title) {
> + SLsmg_gotorc(y, x + 1);
> + SLsmg_write_string((char *)title);
> + }
> + SLsmg_gotorc(++y, x);
> + nr_lines -= 7;
> + max_len -= 2;
> + SLsmg_write_wrapped_string((unsigned char *)text, y, x,
> + nr_lines, max_len, 1);
> + y += nr_lines + 1;
> + SLsmg_set_color(0);
> + SLsmg_draw_box(y - 1, x + 1, 3, max_len - 2);
> +
> + SLsmg_gotorc(y + 3, x);
> + SLsmg_write_nstring((char *)exit_msg, max_len);
> + SLsmg_refresh();
> +
> + x += 2;
> + len = 0;
> + key = ui__getch(delay_secs);
> + while (key != K_TIMER && key != K_ENTER && key != K_ESC) {
> + if (key == K_BKSPC) {
> + if (len == 0)
> + goto next_key;
> + SLsmg_gotorc(y, x + --len);
> + SLsmg_write_char(' ');
> + } else {
> + buf[len] = key;
> + SLsmg_gotorc(y, x + len++);
> + SLsmg_write_char(key);
> + }
> + SLsmg_refresh();
> +
> + /* XXX more graceful overflow handling needed */
> + if (len == sizeof(buf) - 1) {
> + ui_helpline__push("maximum size of symbol name reached!");
> + key = K_ENTER;
> + break;
> + }
> +next_key:
> + key = ui__getch(delay_secs);
> + }
> +
> + buf[len] = '\0';
> + strncpy(input, buf, len+1);
> + return key;
> +}
> +
> int ui__question_window(const char *title, const char *text,
> const char *exit_msg, int delay_secs)
> {
> --
> 1.7.9
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 4/5] perf report: Add --symbol-filter option
2012-03-16 8:50 ` [PATCH v2 4/5] perf report: Add --symbol-filter option Namhyung Kim
@ 2012-03-16 19:42 ` Arnaldo Carvalho de Melo
2012-03-19 2:53 ` [PATCH] perf report: Document " Namhyung Kim
2012-03-19 20:04 ` [tip:perf/core] perf report: Add " tip-bot for Namhyung Kim
1 sibling, 1 reply; 16+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-16 19:42 UTC (permalink / raw)
To: Namhyung Kim
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
Em Fri, Mar 16, 2012 at 05:50:54PM +0900, Namhyung Kim escreveu:
> Add new --symbol-filter command line option to set appropriate
> filter string. Its short version is missing as I couldn't find
> an ideal one and --filter option of perf record also has no
> short version.
You need to update tools/perf/Documentation/perf-report.txt, please send
a follow on patch.
> Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
> ---
> tools/perf/builtin-report.c | 6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> index 8e91c6eba18a..80fb90741b64 100644
> --- a/tools/perf/builtin-report.c
> +++ b/tools/perf/builtin-report.c
> @@ -50,6 +50,7 @@ struct perf_report {
> const char *pretty_printing_style;
> symbol_filter_t annotate_init;
> const char *cpu_list;
> + const char *symbol_filter_str;
> DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
> };
>
> @@ -400,6 +401,9 @@ static int __cmd_report(struct perf_report *rep)
> list_for_each_entry(pos, &session->evlist->entries, node) {
> struct hists *hists = &pos->hists;
>
> + if (pos->idx == 0)
> + hists->symbol_filter_str = rep->symbol_filter_str;
> +
> hists__collapse_resort(hists);
> hists__output_resort(hists);
> nr_samples += hists->stats.nr_events[PERF_RECORD_SAMPLE];
> @@ -591,6 +595,8 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
> "only consider symbols in these comms"),
> OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]",
> "only consider these symbols"),
> + OPT_STRING(0, "symbol-filter", &report.symbol_filter_str, "filter",
> + "only show symbols that (partially) match with this filter"),
> OPT_STRING('w', "column-widths", &symbol_conf.col_width_list_str,
> "width[,width...]",
> "don't try to adjust column width, use these fixed values"),
> --
> 1.7.9
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH] perf ui browser: Clean lines inside of the input window
2012-03-16 19:40 ` Arnaldo Carvalho de Melo
@ 2012-03-19 2:46 ` Namhyung Kim
2012-03-19 20:06 ` [tip:perf/core] " tip-bot for Namhyung Kim
0 siblings, 1 reply; 16+ messages in thread
From: Namhyung Kim @ 2012-03-19 2:46 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
As Arnaldo pointed out, it should be cleared to prevent the window
from displaying overlapped strings on the region.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/util/ui/util.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
index 360f43fd5400..ad4374a16bb0 100644
--- a/tools/perf/util/ui/util.c
+++ b/tools/perf/util/ui/util.c
@@ -108,9 +108,13 @@ int ui_browser__input_window(const char *title, const char *text, char *input,
max_len -= 2;
SLsmg_write_wrapped_string((unsigned char *)text, y, x,
nr_lines, max_len, 1);
- y += nr_lines + 1;
- SLsmg_set_color(0);
- SLsmg_draw_box(y - 1, x + 1, 3, max_len - 2);
+ y += nr_lines;
+ len = 5;
+ while (len--) {
+ SLsmg_gotorc(y + len - 1, x);
+ SLsmg_write_nstring((char *)" ", max_len);
+ }
+ SLsmg_draw_box(y++, x + 1, 3, max_len - 2);
SLsmg_gotorc(y + 3, x);
SLsmg_write_nstring((char *)exit_msg, max_len);
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH] perf report: Document --symbol-filter option
2012-03-16 19:42 ` Arnaldo Carvalho de Melo
@ 2012-03-19 2:53 ` Namhyung Kim
2012-03-19 20:07 ` [tip:perf/core] " tip-bot for Namhyung Kim
0 siblings, 1 reply; 16+ messages in thread
From: Namhyung Kim @ 2012-03-19 2:53 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML
Add missing description of --symbol-filter in Documentation/perf-report.txt.
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
---
tools/perf/Documentation/perf-report.txt | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 87feeee8b90c..68bbf9cec4b7 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -48,6 +48,9 @@ OPTIONS
Only consider these symbols. CSV that understands
file://filename entries.
+--symbol-filter=::
+ Only show symbols that match (partially) with this filter.
+
-U::
--hide-unresolved::
Only display entries resolved to a symbol.
--
1.7.9
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf hists: Add hists__filter_by_symbol
2012-03-16 8:50 [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol Namhyung Kim
` (3 preceding siblings ...)
2012-03-16 8:50 ` [PATCH v2 5/5] perf report: Treat an argument as a symbol filter Namhyung Kim
@ 2012-03-19 20:02 ` tip-bot for Namhyung Kim
4 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:02 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx, mingo
Commit-ID: e94d53ebec2fb4795c18ad2e76ec633390b1e794
Gitweb: http://git.kernel.org/tip/e94d53ebec2fb4795c18ad2e76ec633390b1e794
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Fri, 16 Mar 2012 17:50:51 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 16 Mar 2012 16:31:09 -0300
perf hists: Add hists__filter_by_symbol
This function will be used for simple (sub-)string matching filter based
on user input.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1331887855-874-1-git-send-email-namhyung.kim@lge.com
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/hist.c | 35 +++++++++++++++++++++++++++++++++++
tools/perf/util/hist.h | 2 ++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 8380c3d..2c624ad 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -10,11 +10,14 @@ static bool hists__filter_entry_by_dso(struct hists *hists,
struct hist_entry *he);
static bool hists__filter_entry_by_thread(struct hists *hists,
struct hist_entry *he);
+static bool hists__filter_entry_by_symbol(struct hists *hists,
+ struct hist_entry *he);
enum hist_filter {
HIST_FILTER__DSO,
HIST_FILTER__THREAD,
HIST_FILTER__PARENT,
+ HIST_FILTER__SYMBOL,
};
struct callchain_param callchain_param = {
@@ -420,6 +423,7 @@ static void hists__apply_filters(struct hists *hists, struct hist_entry *he)
{
hists__filter_entry_by_dso(hists, he);
hists__filter_entry_by_thread(hists, he);
+ hists__filter_entry_by_symbol(hists, he);
}
static void __hists__collapse_resort(struct hists *hists, bool threaded)
@@ -1247,6 +1251,37 @@ void hists__filter_by_thread(struct hists *hists)
}
}
+static bool hists__filter_entry_by_symbol(struct hists *hists,
+ struct hist_entry *he)
+{
+ if (hists->symbol_filter_str != NULL &&
+ (!he->ms.sym || strstr(he->ms.sym->name,
+ hists->symbol_filter_str) == NULL)) {
+ he->filtered |= (1 << HIST_FILTER__SYMBOL);
+ return true;
+ }
+
+ return false;
+}
+
+void hists__filter_by_symbol(struct hists *hists)
+{
+ struct rb_node *nd;
+
+ hists->nr_entries = hists->stats.total_period = 0;
+ hists->stats.nr_events[PERF_RECORD_SAMPLE] = 0;
+ hists__reset_col_len(hists);
+
+ for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
+ struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
+
+ if (hists__filter_entry_by_symbol(hists, h))
+ continue;
+
+ hists__remove_entry_filter(hists, h, HIST_FILTER__SYMBOL);
+ }
+}
+
int hist_entry__inc_addr_samples(struct hist_entry *he, int evidx, u64 ip)
{
return symbol__inc_addr_samples(he->ms.sym, he->ms.map, evidx, ip);
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 9413f3e..10343c0 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -62,6 +62,7 @@ struct hists {
const struct thread *thread_filter;
const struct dso *dso_filter;
const char *uid_filter_str;
+ const char *symbol_filter_str;
pthread_mutex_t lock;
struct events_stats stats;
u64 event_stream;
@@ -107,6 +108,7 @@ int hist_entry__annotate(struct hist_entry *self, size_t privsize);
void hists__filter_by_dso(struct hists *hists);
void hists__filter_by_thread(struct hists *hists);
+void hists__filter_by_symbol(struct hists *hists);
u16 hists__col_len(struct hists *self, enum hist_column col);
void hists__set_col_len(struct hists *self, enum hist_column col, u16 len);
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf ui browser: Introduce ui_browser__input_window
2012-03-16 8:50 ` [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window Namhyung Kim
2012-03-16 19:40 ` Arnaldo Carvalho de Melo
@ 2012-03-19 20:03 ` tip-bot for Namhyung Kim
1 sibling, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx, mingo
Commit-ID: aa49f6ec990baa9d8f1b46a86fc169a8028776d4
Gitweb: http://git.kernel.org/tip/aa49f6ec990baa9d8f1b46a86fc169a8028776d4
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Fri, 16 Mar 2012 17:50:52 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 16 Mar 2012 16:32:36 -0300
perf ui browser: Introduce ui_browser__input_window
The ui_browser__input_window() function is to get user's key input.
Current implementation can handle maximum 49 characters.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1331887855-874-2-git-send-email-namhyung.kim@lge.com
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/ui/browser.h | 2 +
tools/perf/util/ui/keysyms.h | 2 +
tools/perf/util/ui/util.c | 78 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 82 insertions(+), 0 deletions(-)
diff --git a/tools/perf/util/ui/browser.h b/tools/perf/util/ui/browser.h
index 84d761b..6ee82f6 100644
--- a/tools/perf/util/ui/browser.h
+++ b/tools/perf/util/ui/browser.h
@@ -49,6 +49,8 @@ int ui_browser__warning(struct ui_browser *browser, int timeout,
const char *format, ...);
int ui_browser__help_window(struct ui_browser *browser, const char *text);
bool ui_browser__dialog_yesno(struct ui_browser *browser, const char *text);
+int ui_browser__input_window(const char *title, const char *text, char *input,
+ const char *exit_msg, int delay_sec);
void ui_browser__argv_seek(struct ui_browser *browser, off_t offset, int whence);
unsigned int ui_browser__argv_refresh(struct ui_browser *browser);
diff --git a/tools/perf/util/ui/keysyms.h b/tools/perf/util/ui/keysyms.h
index 3458b19..809eca5 100644
--- a/tools/perf/util/ui/keysyms.h
+++ b/tools/perf/util/ui/keysyms.h
@@ -16,6 +16,8 @@
#define K_TAB '\t'
#define K_UNTAB SL_KEY_UNTAB
#define K_UP SL_KEY_UP
+#define K_BKSPC 0x7f
+#define K_DEL SL_KEY_DELETE
/* Not really keys */
#define K_TIMER -1
diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
index 45daa7c..360f43f 100644
--- a/tools/perf/util/ui/util.c
+++ b/tools/perf/util/ui/util.c
@@ -69,6 +69,84 @@ int ui__popup_menu(int argc, char * const argv[])
return popup_menu__run(&menu);
}
+int ui_browser__input_window(const char *title, const char *text, char *input,
+ const char *exit_msg, int delay_secs)
+{
+ int x, y, len, key;
+ int max_len = 60, nr_lines = 0;
+ static char buf[50];
+ const char *t;
+
+ t = text;
+ while (1) {
+ const char *sep = strchr(t, '\n');
+
+ if (sep == NULL)
+ sep = strchr(t, '\0');
+ len = sep - t;
+ if (max_len < len)
+ max_len = len;
+ ++nr_lines;
+ if (*sep == '\0')
+ break;
+ t = sep + 1;
+ }
+
+ max_len += 2;
+ nr_lines += 8;
+ y = SLtt_Screen_Rows / 2 - nr_lines / 2;
+ x = SLtt_Screen_Cols / 2 - max_len / 2;
+
+ SLsmg_set_color(0);
+ SLsmg_draw_box(y, x++, nr_lines, max_len);
+ if (title) {
+ SLsmg_gotorc(y, x + 1);
+ SLsmg_write_string((char *)title);
+ }
+ SLsmg_gotorc(++y, x);
+ nr_lines -= 7;
+ max_len -= 2;
+ SLsmg_write_wrapped_string((unsigned char *)text, y, x,
+ nr_lines, max_len, 1);
+ y += nr_lines + 1;
+ SLsmg_set_color(0);
+ SLsmg_draw_box(y - 1, x + 1, 3, max_len - 2);
+
+ SLsmg_gotorc(y + 3, x);
+ SLsmg_write_nstring((char *)exit_msg, max_len);
+ SLsmg_refresh();
+
+ x += 2;
+ len = 0;
+ key = ui__getch(delay_secs);
+ while (key != K_TIMER && key != K_ENTER && key != K_ESC) {
+ if (key == K_BKSPC) {
+ if (len == 0)
+ goto next_key;
+ SLsmg_gotorc(y, x + --len);
+ SLsmg_write_char(' ');
+ } else {
+ buf[len] = key;
+ SLsmg_gotorc(y, x + len++);
+ SLsmg_write_char(key);
+ }
+ SLsmg_refresh();
+
+ /* XXX more graceful overflow handling needed */
+ if (len == sizeof(buf) - 1) {
+ ui_helpline__push("maximum size of symbol name reached!");
+ key = K_ENTER;
+ break;
+ }
+next_key:
+ key = ui__getch(delay_secs);
+ }
+
+ buf[len] = '\0';
+ strncpy(input, buf, len+1);
+ return key;
+}
+
int ui__question_window(const char *title, const char *text,
const char *exit_msg, int delay_secs)
{
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf ui browser: Add 's' key to filter by symbol name
2012-03-16 8:50 ` [PATCH v2 3/5] perf ui browser: Add 's' key to filter by symbol name Namhyung Kim
@ 2012-03-19 20:03 ` tip-bot for Namhyung Kim
0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx, mingo
Commit-ID: 938a23ae7f656ffde9dd67e83dddf4406f85d773
Gitweb: http://git.kernel.org/tip/938a23ae7f656ffde9dd67e83dddf4406f85d773
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Fri, 16 Mar 2012 17:50:53 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 16 Mar 2012 16:34:13 -0300
perf ui browser: Add 's' key to filter by symbol name
Now user can enter symbol name interested via ui_browser__input_window,
and perf can process it using hists__filter_by_symbol(). Giving empty
symbol (by pressing 's' followed by ENTER) will disable the filtering.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1331887855-874-3-git-send-email-namhyung.kim@lge.com
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/ui/browsers/hists.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/tools/perf/util/ui/browsers/hists.c b/tools/perf/util/ui/browsers/hists.c
index de8ece8..c4173c9 100644
--- a/tools/perf/util/ui/browsers/hists.c
+++ b/tools/perf/util/ui/browsers/hists.c
@@ -879,6 +879,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
char *options[16];
int nr_options = 0;
int key = -1;
+ char buf[64];
if (browser == NULL)
return -1;
@@ -933,6 +934,16 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
goto zoom_dso;
case 't':
goto zoom_thread;
+ case 's':
+ if (ui_browser__input_window("Symbol to show",
+ "Please enter the name of symbol you want to see",
+ buf, "ENTER: OK, ESC: Cancel",
+ delay_secs * 2) == K_ENTER) {
+ self->symbol_filter_str = *buf ? buf : NULL;
+ hists__filter_by_symbol(self);
+ hist_browser__reset(browser);
+ }
+ continue;
case K_F1:
case 'h':
case '?':
@@ -950,7 +961,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
"C Collapse all callchains\n"
"E Expand all callchains\n"
"d Zoom into current DSO\n"
- "t Zoom into current Thread");
+ "t Zoom into current Thread\n"
+ "s Filter symbol by name");
continue;
case K_ENTER:
case K_RIGHT:
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf report: Add --symbol-filter option
2012-03-16 8:50 ` [PATCH v2 4/5] perf report: Add --symbol-filter option Namhyung Kim
2012-03-16 19:42 ` Arnaldo Carvalho de Melo
@ 2012-03-19 20:04 ` tip-bot for Namhyung Kim
1 sibling, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:04 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx, mingo
Commit-ID: b14ffaca44c60da1c900aa36131ef3d9858001fc
Gitweb: http://git.kernel.org/tip/b14ffaca44c60da1c900aa36131ef3d9858001fc
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Fri, 16 Mar 2012 17:50:54 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 16 Mar 2012 16:41:30 -0300
perf report: Add --symbol-filter option
Add new --symbol-filter command line option to set appropriate filter
string.
Its short version is missing as I couldn't find an ideal one and
--filter option of perf record also has no short version.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1331887855-874-4-git-send-email-namhyung.kim@lge.com
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-report.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 8e91c6e..80fb907 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -50,6 +50,7 @@ struct perf_report {
const char *pretty_printing_style;
symbol_filter_t annotate_init;
const char *cpu_list;
+ const char *symbol_filter_str;
DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
};
@@ -400,6 +401,9 @@ static int __cmd_report(struct perf_report *rep)
list_for_each_entry(pos, &session->evlist->entries, node) {
struct hists *hists = &pos->hists;
+ if (pos->idx == 0)
+ hists->symbol_filter_str = rep->symbol_filter_str;
+
hists__collapse_resort(hists);
hists__output_resort(hists);
nr_samples += hists->stats.nr_events[PERF_RECORD_SAMPLE];
@@ -591,6 +595,8 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
"only consider symbols in these comms"),
OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]",
"only consider these symbols"),
+ OPT_STRING(0, "symbol-filter", &report.symbol_filter_str, "filter",
+ "only show symbols that (partially) match with this filter"),
OPT_STRING('w', "column-widths", &symbol_conf.col_width_list_str,
"width[,width...]",
"don't try to adjust column width, use these fixed values"),
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf report: Treat an argument as a symbol filter
2012-03-16 8:50 ` [PATCH v2 5/5] perf report: Treat an argument as a symbol filter Namhyung Kim
@ 2012-03-19 20:05 ` tip-bot for Namhyung Kim
0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:05 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx, mingo
Commit-ID: 6db6127c4dad634ab98709b81e2f2770890b0d53
Gitweb: http://git.kernel.org/tip/6db6127c4dad634ab98709b81e2f2770890b0d53
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Fri, 16 Mar 2012 17:50:55 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 16 Mar 2012 16:44:36 -0300
perf report: Treat an argument as a symbol filter
As Ingo requested, it'd be better off treating first (and the only)
argument as a symbol filter, so that user doesn't need to input the
symbol on the dialog window on TUI.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1331887855-874-5-git-send-email-namhyung.kim@lge.com
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-report.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 80fb907..c005458 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -715,11 +715,16 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
} else
symbol_conf.exclude_other = false;
- /*
- * Any (unrecognized) arguments left?
- */
- if (argc)
- usage_with_options(report_usage, options);
+ if (argc) {
+ /*
+ * Special case: if there's an argument left then assume that
+ * it's a symbol filter:
+ */
+ if (argc > 1)
+ usage_with_options(report_usage, options);
+
+ report.symbol_filter_str = argv[0];
+ }
sort_entry__setup_elide(&sort_comm, symbol_conf.comm_list, "comm", stdout);
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf ui browser: Clean lines inside of the input window
2012-03-19 2:46 ` [PATCH] perf ui browser: Clean lines inside of the input window Namhyung Kim
@ 2012-03-19 20:06 ` tip-bot for Namhyung Kim
0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:06 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, paulus, acme, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx
Commit-ID: f7e5410920fabadf294177f590b54ab0cadc4775
Gitweb: http://git.kernel.org/tip/f7e5410920fabadf294177f590b54ab0cadc4775
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Mon, 19 Mar 2012 11:46:20 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 19 Mar 2012 12:07:30 -0300
perf ui browser: Clean lines inside of the input window
As Arnaldo pointed out, it should be cleared to prevent the window from
displaying overlapped strings on the region.
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1332125180-23041-1-git-send-email-namhyung.kim@lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/ui/util.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
index 360f43f..ad4374a 100644
--- a/tools/perf/util/ui/util.c
+++ b/tools/perf/util/ui/util.c
@@ -108,9 +108,13 @@ int ui_browser__input_window(const char *title, const char *text, char *input,
max_len -= 2;
SLsmg_write_wrapped_string((unsigned char *)text, y, x,
nr_lines, max_len, 1);
- y += nr_lines + 1;
- SLsmg_set_color(0);
- SLsmg_draw_box(y - 1, x + 1, 3, max_len - 2);
+ y += nr_lines;
+ len = 5;
+ while (len--) {
+ SLsmg_gotorc(y + len - 1, x);
+ SLsmg_write_nstring((char *)" ", max_len);
+ }
+ SLsmg_draw_box(y++, x + 1, 3, max_len - 2);
SLsmg_gotorc(y + 3, x);
SLsmg_write_nstring((char *)exit_msg, max_len);
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [tip:perf/core] perf report: Document --symbol-filter option
2012-03-19 2:53 ` [PATCH] perf report: Document " Namhyung Kim
@ 2012-03-19 20:07 ` tip-bot for Namhyung Kim
0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-03-19 20:07 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, paulus, acme, hpa, mingo, a.p.zijlstra,
namhyung.kim, namhyung, tglx
Commit-ID: fde0eeaba7fe18dfd2ee6142fb562123e510ef84
Gitweb: http://git.kernel.org/tip/fde0eeaba7fe18dfd2ee6142fb562123e510ef84
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Mon, 19 Mar 2012 11:53:48 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 19 Mar 2012 12:13:56 -0300
perf report: Document --symbol-filter option
Add missing description of --symbol-filter in Documentation/perf-report.txt.
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1332125628-23088-1-git-send-email-namhyung.kim@lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Documentation/perf-report.txt | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 87feeee..68bbf9c 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -48,6 +48,9 @@ OPTIONS
Only consider these symbols. CSV that understands
file://filename entries.
+--symbol-filter=::
+ Only show symbols that match (partially) with this filter.
+
-U::
--hide-unresolved::
Only display entries resolved to a symbol.
^ permalink raw reply related [flat|nested] 16+ messages in thread
end of thread, other threads:[~2012-03-19 20:07 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-16 8:50 [PATCH v2 1/5] perf hists: Add hists__filter_by_symbol Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 2/5] perf ui browser: Introduce ui_browser__input_window Namhyung Kim
2012-03-16 19:40 ` Arnaldo Carvalho de Melo
2012-03-19 2:46 ` [PATCH] perf ui browser: Clean lines inside of the input window Namhyung Kim
2012-03-19 20:06 ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-03-19 20:03 ` [tip:perf/core] perf ui browser: Introduce ui_browser__input_window tip-bot for Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 3/5] perf ui browser: Add 's' key to filter by symbol name Namhyung Kim
2012-03-19 20:03 ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 4/5] perf report: Add --symbol-filter option Namhyung Kim
2012-03-16 19:42 ` Arnaldo Carvalho de Melo
2012-03-19 2:53 ` [PATCH] perf report: Document " Namhyung Kim
2012-03-19 20:07 ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-03-19 20:04 ` [tip:perf/core] perf report: Add " tip-bot for Namhyung Kim
2012-03-16 8:50 ` [PATCH v2 5/5] perf report: Treat an argument as a symbol filter Namhyung Kim
2012-03-19 20:05 ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-03-19 20:02 ` [tip:perf/core] perf hists: Add hists__filter_by_symbol tip-bot for Namhyung Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).