lkml.org 
[lkml]   [2013]   [Jan]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/25] perf gtk/browser: Convert hpp helpers to a function
    Date
    From: Namhyung Kim <namhyung.kim@lge.com>

    The hpp helpers do same job for each field so it was implemented as
    macro in order to access those fields easily. But it gets cumbersome to
    maintain a large function in a macro as the function grows. Factor it
    out to a function with a little helper macro to access field.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/r/1358845787-1350-9-git-send-email-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/ui/gtk/hists.c | 68 ++++++++++++++++++++++++++++++++---------------
    1 file changed, 47 insertions(+), 21 deletions(-)

    diff --git a/tools/perf/ui/gtk/hists.c b/tools/perf/ui/gtk/hists.c
    index c03da79..38be79d 100644
    --- a/tools/perf/ui/gtk/hists.c
    +++ b/tools/perf/ui/gtk/hists.c
    @@ -8,32 +8,58 @@

    #define MAX_COLUMNS 32

    -#define HPP__COLOR_FN(_name, _field) \
    -static int perf_gtk__hpp_color_ ## _name(struct perf_hpp *hpp, \
    - struct hist_entry *he) \
    +static int perf_gtk__percent_color_snprintf(char *buf, size_t size,
    + double percent)
    +{
    + int ret = 0;
    + const char *markup;
    +
    + markup = perf_gtk__get_percent_color(percent);
    + if (markup)
    + ret += scnprintf(buf, size, markup);
    +
    + ret += scnprintf(buf + ret, size - ret, "%6.2f%%", percent);
    +
    + if (markup)
    + ret += scnprintf(buf + ret, size - ret, "</span>");
    +
    + return ret;
    +}
    +
    +
    +static int __hpp__color_fmt(struct perf_hpp *hpp, struct hist_entry *he,
    + u64 (*get_field)(struct hist_entry *))
    +{
    + int ret;
    + double percent = 0.0;
    + struct hists *hists = he->hists;
    +
    + if (hists->stats.total_period)
    + percent = 100.0 * get_field(he) / hists->stats.total_period;
    +
    + ret = perf_gtk__percent_color_snprintf(hpp->buf, hpp->size, percent);
    + return ret;
    +}
    +
    +#define __HPP_COLOR_PERCENT_FN(_type, _field) \
    +static u64 he_get_##_field(struct hist_entry *he) \
    { \
    - struct hists *hists = he->hists; \
    - double percent = 100.0 * he->stat._field / hists->stats.total_period; \
    - const char *markup; \
    - int ret = 0; \
    - \
    - markup = perf_gtk__get_percent_color(percent); \
    - if (markup) \
    - ret += scnprintf(hpp->buf, hpp->size, "%s", markup); \
    - ret += scnprintf(hpp->buf + ret, hpp->size - ret, "%6.2f%%", percent); \
    - if (markup) \
    - ret += scnprintf(hpp->buf + ret, hpp->size - ret, "</span>"); \
    + return he->stat._field; \
    +} \
    \
    - return ret; \
    +static int perf_gtk__hpp_color_##_type(struct perf_hpp *hpp, \
    + struct hist_entry *he) \
    +{ \
    + return __hpp__color_fmt(hpp, he, he_get_##_field); \
    }

    -HPP__COLOR_FN(overhead, period)
    -HPP__COLOR_FN(overhead_sys, period_sys)
    -HPP__COLOR_FN(overhead_us, period_us)
    -HPP__COLOR_FN(overhead_guest_sys, period_guest_sys)
    -HPP__COLOR_FN(overhead_guest_us, period_guest_us)
    +__HPP_COLOR_PERCENT_FN(overhead, period)
    +__HPP_COLOR_PERCENT_FN(overhead_sys, period_sys)
    +__HPP_COLOR_PERCENT_FN(overhead_us, period_us)
    +__HPP_COLOR_PERCENT_FN(overhead_guest_sys, period_guest_sys)
    +__HPP_COLOR_PERCENT_FN(overhead_guest_us, period_guest_us)

    -#undef HPP__COLOR_FN
    +#undef __HPP_COLOR_PERCENT_FN


    void perf_gtk__init_hpp(void)
    --
    1.8.1.1.361.gec3ae6e


    \
     
     \ /
      Last update: 2013-01-31 19:03    [W:2.265 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site