lkml.org 
[lkml]   [2016]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf hists: Fix indent for multiple hierarchy sort key
    Commit-ID:  2dbbe9f26c082be5aa0e8ba5480e7bac43b2c4f0
    Gitweb: http://git.kernel.org/tip/2dbbe9f26c082be5aa0e8ba5480e7bac43b2c4f0
    Author: Namhyung Kim <namhyung@kernel.org>
    AuthorDate: Mon, 7 Mar 2016 16:44:48 -0300
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Tue, 8 Mar 2016 10:11:20 +0100

    perf hists: Fix indent for multiple hierarchy sort key

    When multiple sort keys are used in a single hierarchy, it should indent
    using number of hierarchy levels instead of number of sort keys.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1457361308-514-5-git-send-email-namhyung@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    tools/perf/ui/browsers/hists.c | 23 ++++++++++-------------
    tools/perf/ui/hist.c | 1 +
    tools/perf/ui/stdio/hist.c | 26 +++++++++++---------------
    tools/perf/util/hist.h | 1 +
    4 files changed, 23 insertions(+), 28 deletions(-)

    diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
    index 928b482..2f02ce7 100644
    --- a/tools/perf/ui/browsers/hists.c
    +++ b/tools/perf/ui/browsers/hists.c
    @@ -1280,7 +1280,7 @@ static int hist_browser__show_entry(struct hist_browser *browser,
    static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
    struct hist_entry *entry,
    unsigned short row,
    - int level, int nr_sort_keys)
    + int level)
    {
    int printed = 0;
    int width = browser->b.width;
    @@ -1294,7 +1294,7 @@ static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
    .current_entry = current_entry,
    };
    int column = 0;
    - int hierarchy_indent = (nr_sort_keys - 1) * HIERARCHY_INDENT;
    + int hierarchy_indent = (entry->hists->nr_hpp_node - 2) * HIERARCHY_INDENT;

    if (current_entry) {
    browser->he_selection = entry;
    @@ -1436,8 +1436,7 @@ show_callchain:
    }

    static int hist_browser__show_no_entry(struct hist_browser *browser,
    - unsigned short row,
    - int level, int nr_sort_keys)
    + unsigned short row, int level)
    {
    int width = browser->b.width;
    bool current_entry = ui_browser__is_current_entry(&browser->b, row);
    @@ -1445,6 +1444,7 @@ static int hist_browser__show_no_entry(struct hist_browser *browser,
    int column = 0;
    int ret;
    struct perf_hpp_fmt *fmt;
    + int indent = browser->hists->nr_hpp_node - 2;

    if (current_entry) {
    browser->he_selection = NULL;
    @@ -1485,8 +1485,8 @@ static int hist_browser__show_no_entry(struct hist_browser *browser,
    width -= ret;
    }

    - ui_browser__write_nstring(&browser->b, "", nr_sort_keys * HIERARCHY_INDENT);
    - width -= nr_sort_keys * HIERARCHY_INDENT;
    + ui_browser__write_nstring(&browser->b, "", indent * HIERARCHY_INDENT);
    + width -= indent * HIERARCHY_INDENT;

    if (column >= browser->b.horiz_scroll) {
    char buf[32];
    @@ -1553,7 +1553,7 @@ static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *brows
    struct perf_hpp_fmt *fmt;
    size_t ret = 0;
    int column = 0;
    - int nr_sort_keys = hists->nr_sort_keys;
    + int indent = hists->nr_hpp_node - 2;
    bool first = true;

    ret = scnprintf(buf, size, " ");
    @@ -1577,7 +1577,7 @@ static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *brows
    }

    ret = scnprintf(dummy_hpp.buf, dummy_hpp.size, "%*s",
    - (nr_sort_keys - 1) * HIERARCHY_INDENT, "");
    + indent * HIERARCHY_INDENT, "");
    if (advance_hpp_check(&dummy_hpp, ret))
    return ret;

    @@ -1645,7 +1645,6 @@ static unsigned int hist_browser__refresh(struct ui_browser *browser)
    u16 header_offset = 0;
    struct rb_node *nd;
    struct hist_browser *hb = container_of(browser, struct hist_browser, b);
    - int nr_sort = hb->hists->nr_sort_keys;

    if (hb->show_headers) {
    hist_browser__show_headers(hb);
    @@ -1672,14 +1671,12 @@ static unsigned int hist_browser__refresh(struct ui_browser *browser)

    if (symbol_conf.report_hierarchy) {
    row += hist_browser__show_hierarchy_entry(hb, h, row,
    - h->depth,
    - nr_sort);
    + h->depth);
    if (row == browser->rows)
    break;

    if (h->has_no_entry) {
    - hist_browser__show_no_entry(hb, row, h->depth,
    - nr_sort);
    + hist_browser__show_no_entry(hb, row, h->depth);
    row++;
    }
    } else {
    diff --git a/tools/perf/ui/hist.c b/tools/perf/ui/hist.c
    index 95795ef..f03c4f7 100644
    --- a/tools/perf/ui/hist.c
    +++ b/tools/perf/ui/hist.c
    @@ -740,6 +740,7 @@ static int add_hierarchy_fmt(struct hists *hists, struct perf_hpp_fmt *fmt)
    node->level = fmt->level;
    perf_hpp_list__init(&node->hpp);

    + hists->nr_hpp_node++;
    list_add_tail(&node->list, &hists->hpp_formats);
    }

    diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
    index 073642a..543d713 100644
    --- a/tools/perf/ui/stdio/hist.c
    +++ b/tools/perf/ui/stdio/hist.c
    @@ -412,7 +412,7 @@ static int hist_entry__snprintf(struct hist_entry *he, struct perf_hpp *hpp)

    static int hist_entry__hierarchy_fprintf(struct hist_entry *he,
    struct perf_hpp *hpp,
    - int nr_sort_key, struct hists *hists,
    + struct hists *hists,
    FILE *fp)
    {
    const char *sep = symbol_conf.field_sep;
    @@ -453,7 +453,7 @@ static int hist_entry__hierarchy_fprintf(struct hist_entry *he,

    if (!sep)
    ret = scnprintf(hpp->buf, hpp->size, "%*s",
    - (nr_sort_key - 1) * HIERARCHY_INDENT, "");
    + (hists->nr_hpp_node - 2) * HIERARCHY_INDENT, "");
    advance_hpp(hpp, ret);

    printed += fprintf(fp, "%s", buf);
    @@ -504,12 +504,8 @@ static int hist_entry__fprintf(struct hist_entry *he, size_t size,
    if (size == 0 || size > bfsz)
    size = hpp.size = bfsz;

    - if (symbol_conf.report_hierarchy) {
    - int nr_sort = hists->nr_sort_keys;
    -
    - return hist_entry__hierarchy_fprintf(he, &hpp, nr_sort,
    - hists, fp);
    - }
    + if (symbol_conf.report_hierarchy)
    + return hist_entry__hierarchy_fprintf(he, &hpp, hists, fp);

    hist_entry__snprintf(he, &hpp);

    @@ -521,29 +517,29 @@ static int hist_entry__fprintf(struct hist_entry *he, size_t size,
    return ret;
    }

    -static int print_hierarchy_indent(const char *sep, int nr_sort,
    +static int print_hierarchy_indent(const char *sep, int indent,
    const char *line, FILE *fp)
    {
    - if (sep != NULL || nr_sort < 1)
    + if (sep != NULL || indent < 2)
    return 0;

    - return fprintf(fp, "%-.*s", (nr_sort - 1) * HIERARCHY_INDENT, line);
    + return fprintf(fp, "%-.*s", (indent - 2) * HIERARCHY_INDENT, line);
    }

    static int print_hierarchy_header(struct hists *hists, struct perf_hpp *hpp,
    const char *sep, FILE *fp)
    {
    bool first = true;
    - int nr_sort;
    + int indent;
    int depth;
    unsigned width = 0;
    unsigned header_width = 0;
    struct perf_hpp_fmt *fmt;

    - nr_sort = hists->nr_sort_keys;
    + indent = hists->nr_hpp_node;

    /* preserve max indent depth for column headers */
    - print_hierarchy_indent(sep, nr_sort, spaces, fp);
    + print_hierarchy_indent(sep, indent, spaces, fp);

    hists__for_each_format(hists, fmt) {
    if (perf_hpp__is_sort_entry(fmt) || perf_hpp__is_dynamic_entry(fmt))
    @@ -582,7 +578,7 @@ static int print_hierarchy_header(struct hists *hists, struct perf_hpp *hpp,
    fprintf(fp, "\n# ");

    /* preserve max indent depth for initial dots */
    - print_hierarchy_indent(sep, nr_sort, dots, fp);
    + print_hierarchy_indent(sep, indent, dots, fp);

    first = true;
    hists__for_each_format(hists, fmt) {
    diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
    index 2209188..2cb017f 100644
    --- a/tools/perf/util/hist.h
    +++ b/tools/perf/util/hist.h
    @@ -80,6 +80,7 @@ struct hists {
    struct perf_hpp_list *hpp_list;
    struct list_head hpp_formats;
    int nr_sort_keys;
    + int nr_hpp_node;
    };

    struct hist_entry_iter;
    \
     
     \ /
      Last update: 2016-03-08 12:01    [W:3.406 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site