lkml.org 
[lkml]   [2009]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 5/7] pref_counter: tools: report: --sort option
    option parsing for dynamic sorting

    LKML-Reference: <new-submission>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    Documentation/perf_counter/builtin-report.c | 43 ++++++++++++++++++++++++++--
    1 file changed, 41 insertions(+), 2 deletions(-)

    Index: linux-2.6/Documentation/perf_counter/builtin-report.c
    ===================================================================
    --- linux-2.6.orig/Documentation/perf_counter/builtin-report.c
    +++ linux-2.6/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()
    };

    --



    \
     
     \ /
      Last update: 2009-05-27 20:25    [W:0.023 / U:0.148 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site