aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNamhyung Kim2012-11-13 07:30:33 -0600
committerArnaldo Carvalho de Melo2012-11-14 13:52:48 -0600
commita753579c3ec096bba9d24e1594a07dbb25aca8e4 (patch)
tree9324d6e2a658ca338619f88f4fbd91089a6e781d /tools/perf
parent688f2f5b99311b127ea43efdbf47bb2e3c7a2e32 (diff)
downloadkernel-omap-a753579c3ec096bba9d24e1594a07dbb25aca8e4.tar.gz
kernel-omap-a753579c3ec096bba9d24e1594a07dbb25aca8e4.tar.xz
kernel-omap-a753579c3ec096bba9d24e1594a07dbb25aca8e4.zip
perf ui gtk: Implement ui_progress functions
Implement progress update function for GTK2 front end. Note that since it will be called before gtk main loop so that we should call gtk event loop handler directly. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Pekka Enberg <penberg@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1352813436-14173-3-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/Makefile1
-rw-r--r--tools/perf/ui/gtk/gtk.h1
-rw-r--r--tools/perf/ui/gtk/progress.c50
-rw-r--r--tools/perf/ui/gtk/setup.c2
4 files changed, 54 insertions, 0 deletions
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index f8466b49b922..5a9075ea218e 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -648,6 +648,7 @@ ifndef NO_GTK2
648 LIB_OBJS += $(OUTPUT)ui/gtk/setup.o 648 LIB_OBJS += $(OUTPUT)ui/gtk/setup.o
649 LIB_OBJS += $(OUTPUT)ui/gtk/util.o 649 LIB_OBJS += $(OUTPUT)ui/gtk/util.o
650 LIB_OBJS += $(OUTPUT)ui/gtk/helpline.o 650 LIB_OBJS += $(OUTPUT)ui/gtk/helpline.o
651 LIB_OBJS += $(OUTPUT)ui/gtk/progress.o
651 # Make sure that it'd be included only once. 652 # Make sure that it'd be included only once.
652 ifeq ($(findstring -DNEWT_SUPPORT,$(BASIC_CFLAGS)),) 653 ifeq ($(findstring -DNEWT_SUPPORT,$(BASIC_CFLAGS)),)
653 LIB_OBJS += $(OUTPUT)ui/setup.o 654 LIB_OBJS += $(OUTPUT)ui/setup.o
diff --git a/tools/perf/ui/gtk/gtk.h b/tools/perf/ui/gtk/gtk.h
index 687af0bba187..856320e2cc05 100644
--- a/tools/perf/ui/gtk/gtk.h
+++ b/tools/perf/ui/gtk/gtk.h
@@ -30,6 +30,7 @@ struct perf_gtk_context *perf_gtk__activate_context(GtkWidget *window);
30int perf_gtk__deactivate_context(struct perf_gtk_context **ctx); 30int perf_gtk__deactivate_context(struct perf_gtk_context **ctx);
31 31
32void perf_gtk__init_helpline(void); 32void perf_gtk__init_helpline(void);
33void perf_gtk__init_progress(void);
33void perf_gtk__init_hpp(void); 34void perf_gtk__init_hpp(void);
34 35
35#ifndef HAVE_GTK_INFO_BAR 36#ifndef HAVE_GTK_INFO_BAR
diff --git a/tools/perf/ui/gtk/progress.c b/tools/perf/ui/gtk/progress.c
new file mode 100644
index 000000000000..903426fe27cf
--- /dev/null
+++ b/tools/perf/ui/gtk/progress.c
@@ -0,0 +1,50 @@
1#include <inttypes.h>
2
3#include "gtk.h"
4#include "../progress.h"
5#include "util.h"
6
7static GtkWidget *dialog;
8static GtkWidget *progress;
9
10static void gtk_progress_update(u64 curr, u64 total, const char *title)
11{
12 double fraction = total ? 1.0 * curr / total : 0.0;
13 char buf[1024];
14
15 if (dialog == NULL) {
16 GtkWidget *vbox = gtk_vbox_new(TRUE, 5);
17 GtkWidget *label = gtk_label_new(title);
18
19 dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
20 progress = gtk_progress_bar_new();
21
22 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, FALSE, 3);
23 gtk_box_pack_start(GTK_BOX(vbox), progress, TRUE, TRUE, 3);
24
25 gtk_container_add(GTK_CONTAINER(dialog), vbox);
26
27 gtk_window_set_title(GTK_WINDOW(dialog), "perf");
28 gtk_window_resize(GTK_WINDOW(dialog), 300, 80);
29 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
30
31 gtk_widget_show_all(dialog);
32 }
33
34 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), fraction);
35 snprintf(buf, sizeof(buf), "%"PRIu64" / %"PRIu64, curr, total);
36 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress), buf);
37
38 /* we didn't call gtk_main yet, so do it manually */
39 while (gtk_events_pending())
40 gtk_main_iteration();
41}
42
43static struct ui_progress gtk_progress_fns = {
44 .update = gtk_progress_update,
45};
46
47void perf_gtk__init_progress(void)
48{
49 progress_fns = &gtk_progress_fns;
50}
diff --git a/tools/perf/ui/gtk/setup.c b/tools/perf/ui/gtk/setup.c
index 3c4c6ef78283..6c2dd2e423f3 100644
--- a/tools/perf/ui/gtk/setup.c
+++ b/tools/perf/ui/gtk/setup.c
@@ -8,7 +8,9 @@ int perf_gtk__init(void)
8{ 8{
9 perf_error__register(&perf_gtk_eops); 9 perf_error__register(&perf_gtk_eops);
10 perf_gtk__init_helpline(); 10 perf_gtk__init_helpline();
11 perf_gtk__init_progress();
11 perf_gtk__init_hpp(); 12 perf_gtk__init_hpp();
13
12 return gtk_init_check(NULL, NULL) ? 0 : -1; 14 return gtk_init_check(NULL, NULL) ? 0 : -1;
13} 15}
14 16