diff options
author | Namhyung Kim <namhyung.kim@lge.com> | 2013-01-22 04:09:35 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-01-31 11:07:46 -0500 |
commit | 5aed9d24934be5b7fec1b66cc2a5f29fab4ec11e (patch) | |
tree | d46484bda42163897be565be4103fef70de5581f /tools | |
parent | 4fb71074a570aab9ba8a30b7a756a3c637a14c03 (diff) |
perf hists browser: Convert hpp helpers to a function
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: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1358845787-1350-8-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/ui/browsers/hists.c | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 57b82c26cd05..46242deee8d2 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c | |||
@@ -567,23 +567,41 @@ static int hist_browser__show_callchain(struct hist_browser *browser, | |||
567 | return row - first_row; | 567 | return row - first_row; |
568 | } | 568 | } |
569 | 569 | ||
570 | #define HPP__COLOR_FN(_name, _field) \ | 570 | static int __hpp__color_fmt(struct perf_hpp *hpp, struct hist_entry *he, |
571 | static int hist_browser__hpp_color_ ## _name(struct perf_hpp *hpp, \ | 571 | u64 (*get_field)(struct hist_entry *)) |
572 | struct hist_entry *he) \ | 572 | { |
573 | int ret; | ||
574 | double percent = 0.0; | ||
575 | struct hists *hists = he->hists; | ||
576 | |||
577 | if (hists->stats.total_period) | ||
578 | percent = 100.0 * get_field(he) / hists->stats.total_period; | ||
579 | |||
580 | *(double *)hpp->ptr = percent; | ||
581 | |||
582 | ret = scnprintf(hpp->buf, hpp->size, "%6.2f%%", percent); | ||
583 | return ret; | ||
584 | } | ||
585 | |||
586 | #define __HPP_COLOR_PERCENT_FN(_type, _field) \ | ||
587 | static u64 __hpp_get_##_field(struct hist_entry *he) \ | ||
588 | { \ | ||
589 | return he->stat._field; \ | ||
590 | } \ | ||
591 | \ | ||
592 | static int hist_browser__hpp_color_##_type(struct perf_hpp *hpp, \ | ||
593 | struct hist_entry *he) \ | ||
573 | { \ | 594 | { \ |
574 | struct hists *hists = he->hists; \ | 595 | return __hpp__color_fmt(hpp, he, __hpp_get_##_field); \ |
575 | double percent = 100.0 * he->stat._field / hists->stats.total_period; \ | ||
576 | *(double *)hpp->ptr = percent; \ | ||
577 | return scnprintf(hpp->buf, hpp->size, "%6.2f%%", percent); \ | ||
578 | } | 596 | } |
579 | 597 | ||
580 | HPP__COLOR_FN(overhead, period) | 598 | __HPP_COLOR_PERCENT_FN(overhead, period) |
581 | HPP__COLOR_FN(overhead_sys, period_sys) | 599 | __HPP_COLOR_PERCENT_FN(overhead_sys, period_sys) |
582 | HPP__COLOR_FN(overhead_us, period_us) | 600 | __HPP_COLOR_PERCENT_FN(overhead_us, period_us) |
583 | HPP__COLOR_FN(overhead_guest_sys, period_guest_sys) | 601 | __HPP_COLOR_PERCENT_FN(overhead_guest_sys, period_guest_sys) |
584 | HPP__COLOR_FN(overhead_guest_us, period_guest_us) | 602 | __HPP_COLOR_PERCENT_FN(overhead_guest_us, period_guest_us) |
585 | 603 | ||
586 | #undef HPP__COLOR_FN | 604 | #undef __HPP_COLOR_PERCENT_FN |
587 | 605 | ||
588 | void hist_browser__init_hpp(void) | 606 | void hist_browser__init_hpp(void) |
589 | { | 607 | { |
@@ -646,7 +664,7 @@ static int hist_browser__show_entry(struct hist_browser *browser, | |||
646 | 664 | ||
647 | if (fmt->color) { | 665 | if (fmt->color) { |
648 | hpp.ptr = &percent; | 666 | hpp.ptr = &percent; |
649 | /* It will set percent for us. See HPP__COLOR_FN above. */ | 667 | /* It will set percent for us. See __hpp__color_fmt above. */ |
650 | width -= fmt->color(&hpp, entry); | 668 | width -= fmt->color(&hpp, entry); |
651 | 669 | ||
652 | ui_browser__set_percent_color(&browser->b, percent, current_entry); | 670 | ui_browser__set_percent_color(&browser->b, percent, current_entry); |