perf ui browser: Introduce ui_browser__printf()
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 11 Aug 2015 15:50:55 +0000 (12:50 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 12 Aug 2015 13:27:05 +0000 (10:27 -0300)
To remove direct access to libslang functions, with the immediate goal
of implementing horizontal scrolling at the ui_browser level, but also
because we may at some point want to implement ui_browser with other UIs
in addition to the current libslang implementation.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-w0niblabqrkecs4o0eogfy6c@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/browser.c
tools/perf/ui/browser.h
tools/perf/ui/browsers/annotate.c
tools/perf/ui/browsers/hists.c
tools/perf/ui/browsers/map.c
tools/perf/ui/libslang.h

index 5c730ab553e9b1457d75d64c73e6dc7e34044544..c6c7e5189214fb7f8df1c3fb3659a673d80e8ffa 100644 (file)
@@ -52,6 +52,15 @@ void ui_browser__write_nstring(struct ui_browser *browser __maybe_unused, const
        slsmg_write_nstring(msg, width);
 }
 
+void ui_browser__printf(struct ui_browser *browser __maybe_unused, const char *fmt, ...)
+{
+       va_list args;
+
+       va_start(args, fmt);
+       slsmg_vprintf(fmt, args);
+       va_end(args);
+}
+
 static struct list_head *
 ui_browser__list_head_filter_entries(struct ui_browser *browser,
                                     struct list_head *pos)
index ba276c7ba26f572c7136bf75836689984db77ed0..52be87125defa46e17f033e4b89a8d3e14b8c7a4 100644 (file)
@@ -39,6 +39,7 @@ void ui_browser__reset_index(struct ui_browser *browser);
 void ui_browser__gotorc(struct ui_browser *browser, int y, int x);
 void ui_browser__write_nstring(struct ui_browser *browser, const char *msg,
                               unsigned int width);
+void ui_browser__printf(struct ui_browser *browser, const char *fmt, ...);
 void ui_browser__write_graph(struct ui_browser *browser, int graph);
 void __ui_browser__line_arrow(struct ui_browser *browser, unsigned int column,
                              u64 start, u64 end);
index c14f8f9e0b6a426ce30c948f8c6cbbd97668e34b..29739b34759923f6a7c099f070c5689fd80a03d3 100644 (file)
@@ -1,7 +1,6 @@
 #include "../../util/util.h"
 #include "../browser.h"
 #include "../helpline.h"
-#include "../libslang.h"
 #include "../ui.h"
 #include "../util.h"
 #include "../../util/annotate.h"
@@ -134,11 +133,13 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
                                ui_browser__set_percent_color(browser,
                                                        bdl->samples[i].percent,
                                                        current_entry);
-                               if (annotate_browser__opts.show_total_period)
-                                       slsmg_printf("%6" PRIu64 " ",
-                                                    bdl->samples[i].nr);
-                               else
-                                       slsmg_printf("%6.2f ", bdl->samples[i].percent);
+                               if (annotate_browser__opts.show_total_period) {
+                                       ui_browser__printf(browser, "%6" PRIu64 " ",
+                                                          bdl->samples[i].nr);
+                               } else {
+                                       ui_browser__printf(browser, "%6.2f ",
+                                                          bdl->samples[i].percent);
+                               }
                        }
                } else {
                        ui_browser__write_nstring(browser, " ", 7 * ab->nr_events);
@@ -149,12 +150,12 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
        }
        if (ab->have_cycles) {
                if (dl->ipc)
-                       slsmg_printf("%*.2f ", IPC_WIDTH - 1, dl->ipc);
+                       ui_browser__printf(browser, "%*.2f ", IPC_WIDTH - 1, dl->ipc);
                else
                        ui_browser__write_nstring(browser, " ", IPC_WIDTH);
                if (dl->cycles)
-                       slsmg_printf("%*" PRIu64 " ",
-                                    CYCLES_WIDTH - 1, dl->cycles);
+                       ui_browser__printf(browser, "%*" PRIu64 " ",
+                                          CYCLES_WIDTH - 1, dl->cycles);
                else
                        ui_browser__write_nstring(browser, " ", CYCLES_WIDTH);
        }
index 9e94dc88621b56c19b08e0dad98f159645398929..2de53d6e4df425c1b093e1db60926b42eacda29c 100644 (file)
@@ -1,5 +1,4 @@
 #include <stdio.h>
-#include "../libslang.h"
 #include <stdlib.h>
 #include <string.h>
 #include <linux/rbtree.h>
@@ -541,7 +540,7 @@ static void hist_browser__show_callchain_entry(struct hist_browser *browser,
        ui_browser__set_color(&browser->b, color);
        hist_browser__gotorc(browser, row, 0);
        ui_browser__write_nstring(&browser->b, " ", offset);
-       slsmg_printf("%c", folded_sign);
+       ui_browser__printf(&browser->b, "%c", folded_sign);
        ui_browser__write_graph(&browser->b, show_annotated ? SLSMG_RARROW_CHAR : ' ');
        ui_browser__write_nstring(&browser->b, str, width);
 }
@@ -680,7 +679,7 @@ static int __hpp__slsmg_color_printf(struct perf_hpp *hpp, const char *fmt, ...)
        ui_browser__set_percent_color(arg->b, percent, arg->current_entry);
 
        ret = scnprintf(hpp->buf, hpp->size, fmt, len, percent);
-       slsmg_printf("%s", hpp->buf);
+       ui_browser__printf(arg->b, "%s", hpp->buf);
 
        advance_hpp(hpp, ret);
        return ret;
@@ -713,10 +712,11 @@ hist_browser__hpp_color_##_type(struct perf_hpp_fmt *fmt,         \
                                struct hist_entry *he)                  \
 {                                                                      \
        if (!symbol_conf.cumulate_callchain) {                          \
+               struct hpp_arg *arg = hpp->ptr;                         \
                int len = fmt->user_len ?: fmt->len;                    \
                int ret = scnprintf(hpp->buf, hpp->size,                \
                                    "%*s", len, "N/A");                 \
-               slsmg_printf("%s", hpp->buf);                           \
+               ui_browser__printf(arg->b, "%s", hpp->buf);             \
                                                                        \
                return ret;                                             \
        }                                                               \
@@ -801,12 +801,12 @@ static int hist_browser__show_entry(struct hist_browser *browser,
 
                        if (first) {
                                if (symbol_conf.use_callchain) {
-                                       slsmg_printf("%c ", folded_sign);
+                                       ui_browser__printf(&browser->b, "%c ", folded_sign);
                                        width -= 2;
                                }
                                first = false;
                        } else {
-                               slsmg_printf("  ");
+                               ui_browser__printf(&browser->b, "  ");
                                width -= 2;
                        }
 
@@ -814,7 +814,7 @@ static int hist_browser__show_entry(struct hist_browser *browser,
                                width -= fmt->color(fmt, &hpp, entry);
                        } else {
                                width -= fmt->entry(fmt, &hpp, entry);
-                               slsmg_printf("%s", s);
+                               ui_browser__printf(&browser->b, "%s", s);
                        }
                }
 
@@ -2044,7 +2044,7 @@ static void perf_evsel_menu__write(struct ui_browser *browser,
        nr_events = convert_unit(nr_events, &unit);
        printed = scnprintf(bf, sizeof(bf), "%lu%c%s%s", nr_events,
                           unit, unit == ' ' ? "" : " ", ev_name);
-       slsmg_printf("%s", bf);
+       ui_browser__printf(browser, "%s", bf);
 
        nr_events = hists->stats.nr_events[PERF_RECORD_LOST];
        if (nr_events != 0) {
index fb1ae241f0de150aff47bcd50dad62e3b1574ec8..8c154c7d46697455c6fb8da8e8362f8c24f85953 100644 (file)
@@ -1,4 +1,3 @@
-#include "../libslang.h"
 #include <elf.h>
 #include <inttypes.h>
 #include <sys/ttydefaults.h>
@@ -26,10 +25,10 @@ static void map_browser__write(struct ui_browser *browser, void *nd, int row)
        int width;
 
        ui_browser__set_percent_color(browser, 0, current_entry);
-       slsmg_printf("%*" PRIx64 " %*" PRIx64 " %c ",
-                    mb->addrlen, sym->start, mb->addrlen, sym->end,
-                    sym->binding == STB_GLOBAL ? 'g' :
-                    sym->binding == STB_LOCAL  ? 'l' : 'w');
+       ui_browser__printf(browser, "%*" PRIx64 " %*" PRIx64 " %c ",
+                          mb->addrlen, sym->start, mb->addrlen, sym->end,
+                          sym->binding == STB_GLOBAL ? 'g' :
+                               sym->binding == STB_LOCAL  ? 'l' : 'w');
        width = browser->width - ((mb->addrlen * 2) + 4);
        if (width > 0)
                ui_browser__write_nstring(browser, sym->name, width);
index 4d54b6450f5bc48245139f0143cfc5549cb1fe5e..db816695ad970a3c990e3480787d1ebff9ec2414 100644 (file)
 #if SLANG_VERSION < 20104
 #define slsmg_printf(msg, args...) \
        SLsmg_printf((char *)(msg), ##args)
+#define slsmg_vprintf(msg, vargs) \
+       SLsmg_vprintf((char *)(msg), vargs)
 #define slsmg_write_nstring(msg, len) \
        SLsmg_write_nstring((char *)(msg), len)
 #define sltt_set_color(obj, name, fg, bg) \
        SLtt_set_color(obj,(char *)(name), (char *)(fg), (char *)(bg))
 #else
 #define slsmg_printf SLsmg_printf
+#define slsmg_vprintf SLsmg_vprintf
 #define slsmg_write_nstring SLsmg_write_nstring
 #define sltt_set_color SLtt_set_color
 #endif