From 092c7f325fba0903c2a7b832eefe87d4953a8028 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Wed, 27 May 2009 20:20:26 +0200 Subject: [PATCH] --- yaml --- r: 147551 b: refs/heads/master c: 37f440cba299bb479cf45d12eef923f0979dbcaf h: refs/heads/master i: 147549: 948facc5119fa57e5d7065f8815f1cc9ffe90b50 147547: 4e767841b150438746e9ed891aa2ea5320295e00 147543: e467ba9ad3c9c81c5fa6f1a9628110c314b1d663 147535: f8db253b6971785d165b39ca47d15167e8ba31ae 147519: 07e3d0fb1dd1bbe831766d37eb0dc94b9e470f96 v: v3 --- [refs] | 2 +- .../perf_counter/builtin-report.c | 43 ++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index dd6cf8bef6c9..32bd4d1a3706 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1aa167382323eeeeb38368cab85cf17979793cbe +refs/heads/master: 37f440cba299bb479cf45d12eef923f0979dbcaf diff --git a/trunk/Documentation/perf_counter/builtin-report.c b/trunk/Documentation/perf_counter/builtin-report.c index 856186fd2bd4..982abce0e7c1 100644 --- a/trunk/Documentation/perf_counter/builtin-report.c +++ b/trunk/Documentation/perf_counter/builtin-report.c @@ -20,6 +20,7 @@ static char const *input_name = "perf.data"; static char *vmlinux = NULL; +static char *sort_order = "pid,symbol"; static int input; static int show_mask = SHOW_KERNEL | SHOW_USER | SHOW_HV; @@ -770,12 +771,49 @@ static struct sort_entry sort_sym = { .print = sort__sym_print, }; +struct sort_dimension { + char *name; + struct sort_entry *entry; + int taken; +}; + +static struct sort_dimension sort_dimensions[] = { + { .name = "pid", .entry = &sort_thread, }, + { .name = "symbol", .entry = &sort_sym, }, +}; + static LIST_HEAD(hist_entry__sort_list); +static int sort_dimension__add(char *tok) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(sort_dimensions); i++) { + struct sort_dimension *sd = &sort_dimensions[i]; + + if (sd->taken) + continue; + + if (strcmp(tok, sd->name)) + continue; + + list_add_tail(&sd->entry->list, &hist_entry__sort_list); + sd->taken = 1; + return 0; + } + + return -ESRCH; +} + static void setup_sorting(void) { - list_add_tail(&sort_thread.list, &hist_entry__sort_list); - list_add_tail(&sort_sym.list, &hist_entry__sort_list); + char *tmp, *tok, *str = strdup(sort_order); + + for (tok = strtok_r(str, ", ", &tmp); + tok; tok = strtok_r(NULL, ", ", &tmp)) + sort_dimension__add(tok); + + free(str); } static int64_t @@ -1137,6 +1175,7 @@ static const struct option options[] = { OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, "dump raw trace in ASCII"), OPT_STRING('k', "vmlinux", &vmlinux, "file", "vmlinux pathname"), + OPT_STRING('s', "sort", &sort_order, "foo", "bar"), OPT_END() };