linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL 0/3] perf/core fixes and improvements
@ 2012-03-19 19:12 Arnaldo Carvalho de Melo
  2012-03-19 19:12 ` [PATCH 1/3] perf ui browser: Clean lines inside of the input window Arnaldo Carvalho de Melo
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-19 19:12 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Colin Walters,
	Namhyung Kim, Namhyung Kim, Paul Mackerras, Pekka Enberg,
	Peter Zijlstra, arnaldo.melo, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling, now there are two pull request worth of
changesets in my perf/core branch,

- Arnaldo

The following changes since commit 6db6127c4dad634ab98709b81e2f2770890b0d53:

  perf report: Treat an argument as a symbol filter (2012-03-16 16:44:36 -0300)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo

for you to fetch changes up to c31a94570552dcaa517c4f7a043ffd28835016be:

  perf report: Add a simple GTK2-based 'perf report' browser (2012-03-19 15:13:29 -0300)

----------------------------------------------------------------
Fixes for the last batch from Namhyung and the initial GTK report browser
from Pekka.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Namhyung Kim (2):
      perf ui browser: Clean lines inside of the input window
      perf report: Document --symbol-filter option

Pekka Enberg (1):
      perf report: Add a simple GTK2-based 'perf report' browser

 tools/perf/Documentation/perf-report.txt |    5 +
 tools/perf/Makefile                      |   14 +++
 tools/perf/builtin-report.c              |   19 ++-
 tools/perf/config/feature-tests.mak      |   15 +++
 tools/perf/util/cache.h                  |   12 ++
 tools/perf/util/gtk/browser.c            |  189 ++++++++++++++++++++++++++++++
 tools/perf/util/gtk/gtk.h                |    8 ++
 tools/perf/util/hist.h                   |   17 +++
 tools/perf/util/ui/util.c                |   10 +-
 9 files changed, 282 insertions(+), 7 deletions(-)
 create mode 100644 tools/perf/util/gtk/browser.c
 create mode 100644 tools/perf/util/gtk/gtk.h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] perf ui browser: Clean lines inside of the input window
  2012-03-19 19:12 [GIT PULL 0/3] perf/core fixes and improvements Arnaldo Carvalho de Melo
@ 2012-03-19 19:12 ` Arnaldo Carvalho de Melo
  2012-03-19 19:12 ` [PATCH 2/3] perf report: Document --symbol-filter option Arnaldo Carvalho de Melo
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-19 19:12 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Namhyung Kim, Namhyung Kim, Paul Mackerras,
	Peter Zijlstra, Arnaldo Carvalho de Melo

From: Namhyung Kim <namhyung.kim@lge.com>

As Arnaldo pointed out, it should be cleared to prevent the window from
displaying overlapped strings on the region.

Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1332125180-23041-1-git-send-email-namhyung.kim@lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/ui/util.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/ui/util.c b/tools/perf/util/ui/util.c
index 360f43f..ad4374a 100644
--- a/tools/perf/util/ui/util.c
+++ b/tools/perf/util/ui/util.c
@@ -108,9 +108,13 @@ int ui_browser__input_window(const char *title, const char *text, char *input,
 	max_len -= 2;
 	SLsmg_write_wrapped_string((unsigned char *)text, y, x,
 				   nr_lines, max_len, 1);
-	y += nr_lines + 1;
-	SLsmg_set_color(0);
-	SLsmg_draw_box(y - 1, x + 1, 3, max_len - 2);
+	y += nr_lines;
+	len = 5;
+	while (len--) {
+		SLsmg_gotorc(y + len - 1, x);
+		SLsmg_write_nstring((char *)" ", max_len);
+	}
+	SLsmg_draw_box(y++, x + 1, 3, max_len - 2);
 
 	SLsmg_gotorc(y + 3, x);
 	SLsmg_write_nstring((char *)exit_msg, max_len);
-- 
1.7.9.2.358.g22243


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] perf report: Document --symbol-filter option
  2012-03-19 19:12 [GIT PULL 0/3] perf/core fixes and improvements Arnaldo Carvalho de Melo
  2012-03-19 19:12 ` [PATCH 1/3] perf ui browser: Clean lines inside of the input window Arnaldo Carvalho de Melo
@ 2012-03-19 19:12 ` Arnaldo Carvalho de Melo
  2012-03-19 19:12 ` [PATCH 3/3] perf report: Add a simple GTK2-based 'perf report' browser Arnaldo Carvalho de Melo
  2012-03-19 19:47 ` [GIT PULL 0/3] perf/core fixes and improvements Ingo Molnar
  3 siblings, 0 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-19 19:12 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Namhyung Kim, Namhyung Kim, Paul Mackerras,
	Peter Zijlstra, Arnaldo Carvalho de Melo

From: Namhyung Kim <namhyung.kim@lge.com>

Add missing description of --symbol-filter in Documentation/perf-report.txt.

Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1332125628-23088-1-git-send-email-namhyung.kim@lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-report.txt |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 87feeee..68bbf9c 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -48,6 +48,9 @@ OPTIONS
 	Only consider these symbols. CSV that understands
 	file://filename entries.
 
+--symbol-filter=::
+	Only show symbols that match (partially) with this filter.
+
 -U::
 --hide-unresolved::
         Only display entries resolved to a symbol.
-- 
1.7.9.2.358.g22243


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] perf report: Add a simple GTK2-based 'perf report' browser
  2012-03-19 19:12 [GIT PULL 0/3] perf/core fixes and improvements Arnaldo Carvalho de Melo
  2012-03-19 19:12 ` [PATCH 1/3] perf ui browser: Clean lines inside of the input window Arnaldo Carvalho de Melo
  2012-03-19 19:12 ` [PATCH 2/3] perf report: Document --symbol-filter option Arnaldo Carvalho de Melo
@ 2012-03-19 19:12 ` Arnaldo Carvalho de Melo
  2012-03-19 19:47 ` [GIT PULL 0/3] perf/core fixes and improvements Ingo Molnar
  3 siblings, 0 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-19 19:12 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Pekka Enberg, Colin Walters, Peter Zijlstra,
	Paul Mackerras, Arnaldo Carvalho de Melo

From: Pekka Enberg <penberg@kernel.org>

This patch adds a simple GTK2-based browser to 'perf report' that's
based on the TTY-based browser in builtin-report.c.

To launch "perf report" using the new GTK interface just type:

  $ perf report --gtk

The interface is somewhat limited in features at the moment:

  - No callgraph support

  - No KVM guest profiling support

  - No color coding for percentages

  - No sorting from the UI

  - ..and many, many more!

That said, I think this patch a reasonable start to build future features on.

Signed-off-by: Pekka Enberg <penberg@kernel.org>
Cc: Colin Walters <walters@verbum.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1202231952410.6689@tux.localdomain
[ committer note: Added #pragma to make gtk no strict prototype problem go
  away as suggested by Colin Walters modulo avoiding push/pop ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-report.txt |    2 +
 tools/perf/Makefile                      |   14 +++
 tools/perf/builtin-report.c              |   19 ++-
 tools/perf/config/feature-tests.mak      |   15 +++
 tools/perf/util/cache.h                  |   12 ++
 tools/perf/util/gtk/browser.c            |  189 ++++++++++++++++++++++++++++++
 tools/perf/util/gtk/gtk.h                |    8 ++
 tools/perf/util/hist.h                   |   17 +++
 8 files changed, 272 insertions(+), 4 deletions(-)
 create mode 100644 tools/perf/util/gtk/browser.c
 create mode 100644 tools/perf/util/gtk/gtk.h

diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 68bbf9c..2d89f02 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -113,6 +113,8 @@ OPTIONS
 	requires a tty, if one is not present, as when piping to other
 	commands, the stdio interface is used.
 
+--gtk:: Use the GTK2 interface.
+
 -k::
 --vmlinux=<file>::
         vmlinux pathname
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index e07fbd8..cc27148 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -507,6 +507,20 @@ else
 	endif
 endif
 
+ifdef NO_GTK2
+	BASIC_CFLAGS += -DNO_GTK2
+else
+	FLAGS_GTK2=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) $(shell pkg-config --libs --cflags gtk+-2.0)
+	ifneq ($(call try-cc,$(SOURCE_GTK2),$(FLAGS_GTK2)),y)
+		msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
+		BASIC_CFLAGS += -DNO_GTK2_SUPPORT
+	else
+		BASIC_CFLAGS += $(shell pkg-config --cflags gtk+-2.0)
+		EXTLIBS += $(shell pkg-config --libs gtk+-2.0)
+		LIB_OBJS += $(OUTPUT)util/gtk/browser.o
+	endif
+endif
+
 ifdef NO_LIBPERL
 	BASIC_CFLAGS += -DNO_LIBPERL
 else
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index c005458..2e31743 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -40,7 +40,7 @@ struct perf_report {
 	struct perf_tool	tool;
 	struct perf_session	*session;
 	char const		*input_name;
-	bool			force, use_tui, use_stdio;
+	bool			force, use_tui, use_gtk, use_stdio;
 	bool			hide_unresolved;
 	bool			dont_use_callchains;
 	bool			show_full_info;
@@ -415,8 +415,13 @@ static int __cmd_report(struct perf_report *rep)
 	}
 
 	if (use_browser > 0) {
-		perf_evlist__tui_browse_hists(session->evlist, help,
-					      NULL, NULL, 0);
+		if (use_browser == 1) {
+			perf_evlist__tui_browse_hists(session->evlist, help,
+						      NULL, NULL, 0);
+		} else if (use_browser == 2) {
+			perf_evlist__gtk_browse_hists(session->evlist, help,
+						      NULL, NULL, 0);
+		}
 	} else
 		perf_evlist__tty_browse_hists(session->evlist, rep, help);
 
@@ -573,6 +578,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
 	OPT_STRING(0, "pretty", &report.pretty_printing_style, "key",
 		   "pretty printing style key: normal raw"),
 	OPT_BOOLEAN(0, "tui", &report.use_tui, "Use the TUI interface"),
+	OPT_BOOLEAN(0, "gtk", &report.use_gtk, "Use the GTK2 interface"),
 	OPT_BOOLEAN(0, "stdio", &report.use_stdio,
 		    "Use the stdio interface"),
 	OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
@@ -630,6 +636,8 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
 		use_browser = 0;
 	else if (report.use_tui)
 		use_browser = 1;
+	else if (report.use_gtk)
+		use_browser = 2;
 
 	if (report.inverted_callchain)
 		callchain_param.order = ORDER_CALLER;
@@ -666,7 +674,10 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
 	}
 
 	if (strcmp(report.input_name, "-") != 0) {
-		setup_browser(true);
+		if (report.use_gtk)
+			perf_gtk_setup_browser(argc, argv, true);
+		else
+			setup_browser(true);
 	} else {
 		use_browser = 0;
 	}
diff --git a/tools/perf/config/feature-tests.mak b/tools/perf/config/feature-tests.mak
index 6170fd2..d9084e0 100644
--- a/tools/perf/config/feature-tests.mak
+++ b/tools/perf/config/feature-tests.mak
@@ -65,6 +65,21 @@ int main(void)
 endef
 endif
 
+ifndef NO_GTK2
+define SOURCE_GTK2
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#include <gtk/gtk.h>
+#pragma GCC diagnostic error \"-Wstrict-prototypes\"
+
+int main(int argc, char *argv[])
+{
+        gtk_init(&argc, &argv);
+
+        return 0;
+}
+endef
+endif
+
 ifndef NO_LIBPERL
 define SOURCE_PERL_EMBED
 #include <EXTERN.h>
diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h
index fc5e5a0..8dd224d 100644
--- a/tools/perf/util/cache.h
+++ b/tools/perf/util/cache.h
@@ -45,6 +45,18 @@ void setup_browser(bool fallback_to_pager);
 void exit_browser(bool wait_for_ok);
 #endif
 
+#ifdef NO_GTK2_SUPPORT
+static inline void perf_gtk_setup_browser(int argc __used, const char *argv[] __used, bool fallback_to_pager)
+{
+	if (fallback_to_pager)
+		setup_pager();
+}
+static inline void perf_gtk_exit_browser(bool wait_for_ok __used) {}
+#else
+void perf_gtk_setup_browser(int argc, const char *argv[], bool fallback_to_pager);
+void perf_gtk_exit_browser(bool wait_for_ok);
+#endif
+
 char *alias_lookup(const char *alias);
 int split_cmdline(char *cmdline, const char ***argv);
 
diff --git a/tools/perf/util/gtk/browser.c b/tools/perf/util/gtk/browser.c
new file mode 100644
index 0000000..258352a
--- /dev/null
+++ b/tools/perf/util/gtk/browser.c
@@ -0,0 +1,189 @@
+#include "../evlist.h"
+#include "../cache.h"
+#include "../evsel.h"
+#include "../sort.h"
+#include "../hist.h"
+#include "gtk.h"
+
+#include <signal.h>
+
+#define MAX_COLUMNS			32
+
+void perf_gtk_setup_browser(int argc, const char *argv[],
+			    bool fallback_to_pager __used)
+{
+	gtk_init(&argc, (char ***)&argv);
+}
+
+void perf_gtk_exit_browser(bool wait_for_ok __used)
+{
+	gtk_main_quit();
+}
+
+static void perf_gtk_signal(int sig)
+{
+	psignal(sig, "perf");
+	gtk_main_quit();
+}
+
+static void perf_gtk_resize_window(GtkWidget *window)
+{
+	GdkRectangle rect;
+	GdkScreen *screen;
+	int monitor;
+	int height;
+	int width;
+
+	screen = gtk_widget_get_screen(window);
+
+	monitor = gdk_screen_get_monitor_at_window(screen, window->window);
+
+	gdk_screen_get_monitor_geometry(screen, monitor, &rect);
+
+	width	= rect.width * 3 / 4;
+	height	= rect.height * 3 / 4;
+
+	gtk_window_resize(GTK_WINDOW(window), width, height);
+}
+
+static void perf_gtk_show_hists(GtkWidget *window, struct hists *hists)
+{
+	GType col_types[MAX_COLUMNS];
+	GtkCellRenderer *renderer;
+	struct sort_entry *se;
+	GtkListStore *store;
+	struct rb_node *nd;
+	u64 total_period;
+	GtkWidget *view;
+	int col_idx;
+	int nr_cols;
+
+	nr_cols = 0;
+
+	/* The percentage column */
+	col_types[nr_cols++] = G_TYPE_STRING;
+
+	list_for_each_entry(se, &hist_entry__sort_list, list) {
+		if (se->elide)
+			continue;
+
+		col_types[nr_cols++] = G_TYPE_STRING;
+	}
+
+	store = gtk_list_store_newv(nr_cols, col_types);
+
+	view = gtk_tree_view_new();
+
+	renderer = gtk_cell_renderer_text_new();
+
+	col_idx = 0;
+
+	/* The percentage column */
+	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
+						    -1, "Overhead (%)",
+						    renderer, "text",
+						    col_idx++, NULL);
+
+	list_for_each_entry(se, &hist_entry__sort_list, list) {
+		if (se->elide)
+			continue;
+
+		gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
+							    -1, se->se_header,
+							    renderer, "text",
+							    col_idx++, NULL);
+	}
+
+	gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store));
+
+	g_object_unref(GTK_TREE_MODEL(store));
+
+	total_period = hists->stats.total_period;
+
+	for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
+		struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
+		GtkTreeIter iter;
+		double percent;
+		char s[512];
+
+		if (h->filtered)
+			continue;
+
+		gtk_list_store_append(store, &iter);
+
+		col_idx = 0;
+
+		percent = (h->period * 100.0) / total_period;
+
+		snprintf(s, ARRAY_SIZE(s), "%.2f", percent);
+
+		gtk_list_store_set(store, &iter, col_idx++, s, -1);
+
+		list_for_each_entry(se, &hist_entry__sort_list, list) {
+			if (se->elide)
+				continue;
+
+			se->se_snprintf(h, s, ARRAY_SIZE(s),
+					hists__col_len(hists, se->se_width_idx));
+
+			gtk_list_store_set(store, &iter, col_idx++, s, -1);
+		}
+	}
+
+	gtk_container_add(GTK_CONTAINER(window), view);
+}
+
+int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist,
+				  const char *help __used,
+				  void (*timer) (void *arg)__used,
+				  void *arg __used, int delay_secs __used)
+{
+	struct perf_evsel *pos;
+	GtkWidget *notebook;
+	GtkWidget *window;
+
+	signal(SIGSEGV, perf_gtk_signal);
+	signal(SIGFPE,  perf_gtk_signal);
+	signal(SIGINT,  perf_gtk_signal);
+	signal(SIGQUIT, perf_gtk_signal);
+	signal(SIGTERM, perf_gtk_signal);
+
+	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+	gtk_window_set_title(GTK_WINDOW(window), "perf report");
+
+	g_signal_connect(window, "delete_event", gtk_main_quit, NULL);
+
+	notebook = gtk_notebook_new();
+
+	list_for_each_entry(pos, &evlist->entries, node) {
+		struct hists *hists = &pos->hists;
+		const char *evname = event_name(pos);
+		GtkWidget *scrolled_window;
+		GtkWidget *tab_label;
+
+		scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+
+		gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
+							GTK_POLICY_AUTOMATIC,
+							GTK_POLICY_AUTOMATIC);
+
+		perf_gtk_show_hists(scrolled_window, hists);
+
+		tab_label = gtk_label_new(evname);
+
+		gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolled_window, tab_label);
+	}
+
+	gtk_container_add(GTK_CONTAINER(window), notebook);
+
+	gtk_widget_show_all(window);
+
+	perf_gtk_resize_window(window);
+
+	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+
+	gtk_main();
+
+	return 0;
+}
diff --git a/tools/perf/util/gtk/gtk.h b/tools/perf/util/gtk/gtk.h
new file mode 100644
index 0000000..75177ee
--- /dev/null
+++ b/tools/perf/util/gtk/gtk.h
@@ -0,0 +1,8 @@
+#ifndef _PERF_GTK_H_
+#define _PERF_GTK_H_ 1
+
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#include <gtk/gtk.h>
+#pragma GCC diagnostic error "-Wstrict-prototypes"
+
+#endif /* _PERF_GTK_H_ */
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 10343c0..2cae9df 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -147,6 +147,23 @@ int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help,
 				  int refresh);
 #endif
 
+#ifdef NO_GTK2_SUPPORT
+static inline
+int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist __used,
+				  const char *help __used,
+				  void(*timer)(void *arg) __used,
+				  void *arg __used,
+				  int refresh __used)
+{
+	return 0;
+}
+
+#else
+int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, const char *help,
+				  void(*timer)(void *arg), void *arg,
+				  int refresh);
+#endif
+
 unsigned int hists__sort_list_width(struct hists *self);
 
 #endif	/* __PERF_HIST_H */
-- 
1.7.9.2.358.g22243


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [GIT PULL 0/3] perf/core fixes and improvements
  2012-03-19 19:12 [GIT PULL 0/3] perf/core fixes and improvements Arnaldo Carvalho de Melo
                   ` (2 preceding siblings ...)
  2012-03-19 19:12 ` [PATCH 3/3] perf report: Add a simple GTK2-based 'perf report' browser Arnaldo Carvalho de Melo
@ 2012-03-19 19:47 ` Ingo Molnar
  2012-03-19 19:56   ` Ingo Molnar
                     ` (2 more replies)
  3 siblings, 3 replies; 8+ messages in thread
From: Ingo Molnar @ 2012-03-19 19:47 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Colin Walters, Namhyung Kim, Namhyung Kim,
	Paul Mackerras, Pekka Enberg, Peter Zijlstra, arnaldo.melo,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling, now there are two pull request worth of
> changesets in my perf/core branch,
> 
> - Arnaldo
> 
> The following changes since commit 6db6127c4dad634ab98709b81e2f2770890b0d53:
> 
>   perf report: Treat an argument as a symbol filter (2012-03-16 16:44:36 -0300)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo
> 
> for you to fetch changes up to c31a94570552dcaa517c4f7a043ffd28835016be:
> 
>   perf report: Add a simple GTK2-based 'perf report' browser (2012-03-19 15:13:29 -0300)
> 
> ----------------------------------------------------------------
> Fixes for the last batch from Namhyung and the initial GTK report browser
> from Pekka.
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Namhyung Kim (2):
>       perf ui browser: Clean lines inside of the input window
>       perf report: Document --symbol-filter option
> 
> Pekka Enberg (1):
>       perf report: Add a simple GTK2-based 'perf report' browser
> 
>  tools/perf/Documentation/perf-report.txt |    5 +
>  tools/perf/Makefile                      |   14 +++
>  tools/perf/builtin-report.c              |   19 ++-
>  tools/perf/config/feature-tests.mak      |   15 +++
>  tools/perf/util/cache.h                  |   12 ++
>  tools/perf/util/gtk/browser.c            |  189 ++++++++++++++++++++++++++++++
>  tools/perf/util/gtk/gtk.h                |    8 ++
>  tools/perf/util/hist.h                   |   17 +++
>  tools/perf/util/ui/util.c                |   10 +-
>  9 files changed, 282 insertions(+), 7 deletions(-)
>  create mode 100644 tools/perf/util/gtk/browser.c
>  create mode 100644 tools/perf/util/gtk/gtk.h

Pulled, thanks Arnaldo!

I noticed that there's no help text for GTK support - how will a 
user find that 'perf report --gtk' will do something nice?

Another detail is that if GTK support is not compiled in:

Makefile:515: GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev

then the --gtk output is not very informative:

  earth5:~/tip/tools/perf> perf report --gtk
  earth5:~/tip/tools/perf> 

:-)

A third detail, I do have gtk2-devel installed:

 Package gtk2-devel-2.24.10-1.fc17.x86_64 already installed and latest version

yet I got the above message.

It is not easy to figure out *why* a feature test failed, 
unfortunately. It would be nice if V=1 or something like that 
would output the failure.

I applied the hack below and ran the gtk testcase, which gave:

earth5:~/tip/tools/perf> . ./test.4273.sh
In file included from /usr/lib64/glib-2.0/include/glibconfig.h:9:0,
                 from /usr/include/glib-2.0/glib/gtypes.h:34,
                 from /usr/include/glib-2.0/glib/galloca.h:34,
                 from /usr/include/glib-2.0/glib.h:32,
                 from /usr/include/glib-2.0/gobject/gbinding.h:30,
                 from /usr/include/glib-2.0/glib-object.h:25,
                 from /usr/include/glib-2.0/gio/gioenums.h:30,
                 from /usr/include/glib-2.0/gio/giotypes.h:30,
                 from /usr/include/glib-2.0/gio/gio.h:28,
                 from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
                 from /usr/include/gtk-2.0/gdk/gdk.h:32,
                 from /usr/include/gtk-2.0/gtk/gtk.h:32,
                 from test.4273.c:2:
/usr/include/glib-2.0/glib/gmacros.h:346:7: error: "_MSC_VER" is not defined [-Werror=undef]
cc1: all warnings being treated as errors

Which allowed me to fix the feature test and the gtk.h include 
file wrapper via the second patch below.

And then I was greeted by the GTK report window on 'perf report 
--gtk' ;-)

Thanks,

	Ingo

diff --git a/tools/perf/config/utilities.mak b/tools/perf/config/utilities.mak
index 8046182..68cf795 100644
--- a/tools/perf/config/utilities.mak
+++ b/tools/perf/config/utilities.mak
@@ -183,6 +183,8 @@ _gea_err  = $(if $(1),$(error Please set '$(1)' appropriately))
 # Usage: option = $(call try-cc, source-to-build, cc-options)
 try-cc = $(shell sh -c						  \
 	'TMP="$(OUTPUT)$(TMPOUT).$$$$";				  \
+	 echo "$(1)" > test.$$$$.c;					  \
+	 echo $(CC) -x c test.$$$$.c $(2) -o "$$TMP" > test.$$$$.sh;		  \
 	 echo "$(1)" |						  \
 	 $(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y; \
 	 rm -f "$$TMP"')

Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/tools/perf/config/feature-tests.mak b/tools/perf/config/feature-tests.mak
index d9084e0..ae8b471 100644
--- a/tools/perf/config/feature-tests.mak
+++ b/tools/perf/config/feature-tests.mak
@@ -68,7 +68,9 @@ endif
 ifndef NO_GTK2
 define SOURCE_GTK2
 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#pragma GCC diagnostic ignored \"-Wundef\"
 #include <gtk/gtk.h>
+#pragma GCC diagnostic error \"-Wundef\"
 #pragma GCC diagnostic error \"-Wstrict-prototypes\"
 
 int main(int argc, char *argv[])
diff --git a/tools/perf/util/gtk/gtk.h b/tools/perf/util/gtk/gtk.h
index 75177ee..c7a941f 100644
--- a/tools/perf/util/gtk/gtk.h
+++ b/tools/perf/util/gtk/gtk.h
@@ -2,7 +2,9 @@
 #define _PERF_GTK_H_ 1
 
 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#pragma GCC diagnostic ignored "-Wundef"
 #include <gtk/gtk.h>
+#pragma GCC diagnostic error "-Wundef"
 #pragma GCC diagnostic error "-Wstrict-prototypes"
 
 #endif /* _PERF_GTK_H_ */

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [GIT PULL 0/3] perf/core fixes and improvements
  2012-03-19 19:47 ` [GIT PULL 0/3] perf/core fixes and improvements Ingo Molnar
@ 2012-03-19 19:56   ` Ingo Molnar
  2012-03-19 20:20   ` Ingo Molnar
  2012-03-19 21:17   ` Arnaldo Carvalho de Melo
  2 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2012-03-19 19:56 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Colin Walters, Namhyung Kim, Namhyung Kim,
	Paul Mackerras, Pekka Enberg, Peter Zijlstra, arnaldo.melo,
	Arnaldo Carvalho de Melo


* Ingo Molnar <mingo@kernel.org> wrote:

> diff --git a/tools/perf/config/utilities.mak b/tools/perf/config/utilities.mak
> index 8046182..68cf795 100644
> --- a/tools/perf/config/utilities.mak
> +++ b/tools/perf/config/utilities.mak
> @@ -183,6 +183,8 @@ _gea_err  = $(if $(1),$(error Please set '$(1)' appropriately))
>  # Usage: option = $(call try-cc, source-to-build, cc-options)
>  try-cc = $(shell sh -c						  \
>  	'TMP="$(OUTPUT)$(TMPOUT).$$$$";				  \
> +	 echo "$(1)" > test.$$$$.c;					  \
> +	 echo $(CC) -x c test.$$$$.c $(2) -o "$$TMP" > test.$$$$.sh;		  \
>  	 echo "$(1)" |						  \
>  	 $(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y; \
>  	 rm -f "$$TMP"')

So, instead of this hack we'd like to output the build failure 
that gcc gives, when 'make V=1' is specified or so.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [GIT PULL 0/3] perf/core fixes and improvements
  2012-03-19 19:47 ` [GIT PULL 0/3] perf/core fixes and improvements Ingo Molnar
  2012-03-19 19:56   ` Ingo Molnar
@ 2012-03-19 20:20   ` Ingo Molnar
  2012-03-19 21:17   ` Arnaldo Carvalho de Melo
  2 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2012-03-19 20:20 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Colin Walters, Namhyung Kim, Namhyung Kim,
	Paul Mackerras, Pekka Enberg, Peter Zijlstra, arnaldo.melo,
	Arnaldo Carvalho de Melo


* Ingo Molnar <mingo@kernel.org> wrote:

> I noticed that there's no help text for GTK support - how will a 
> user find that 'perf report --gtk' will do something nice?

Ignore this one - I forgot to do 'make install-doc'.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [GIT PULL 0/3] perf/core fixes and improvements
  2012-03-19 19:47 ` [GIT PULL 0/3] perf/core fixes and improvements Ingo Molnar
  2012-03-19 19:56   ` Ingo Molnar
  2012-03-19 20:20   ` Ingo Molnar
@ 2012-03-19 21:17   ` Arnaldo Carvalho de Melo
  2 siblings, 0 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-03-19 21:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Colin Walters, Namhyung Kim, Namhyung Kim,
	Paul Mackerras, Pekka Enberg, Peter Zijlstra

Em Mon, Mar 19, 2012 at 08:47:25PM +0100, Ingo Molnar escreveu:
> Pulled, thanks Arnaldo!
> 
> I noticed that there's no help text for GTK support - how will a 
> user find that 'perf report --gtk' will do something nice?
> 
> Another detail is that if GTK support is not compiled in:
> 
> Makefile:515: GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev
> 
> then the --gtk output is not very informative:
> 
>   earth5:~/tip/tools/perf> perf report --gtk
>   earth5:~/tip/tools/perf> 
> 
> :-)
> 
> A third detail, I do have gtk2-devel installed:
> 
>  Package gtk2-devel-2.24.10-1.fc17.x86_64 already installed and latest version

Yeah, as you said, the ball is rolling! ;-)

> yet I got the above message.
> 
> It is not easy to figure out *why* a feature test failed, 
> unfortunately. It would be nice if V=1 or something like that 
> would output the failure.

Yeah, I also was frustrated by V=1 not affecting the feature tests, and
did what you did, just didn't got around to fix it properly.
 
> I applied the hack below and ran the gtk testcase, which gave:
> 
> earth5:~/tip/tools/perf> . ./test.4273.sh
> In file included from /usr/lib64/glib-2.0/include/glibconfig.h:9:0,
>                  from /usr/include/glib-2.0/glib/gtypes.h:34,
>                  from /usr/include/glib-2.0/glib/galloca.h:34,
>                  from /usr/include/glib-2.0/glib.h:32,
>                  from /usr/include/glib-2.0/gobject/gbinding.h:30,
>                  from /usr/include/glib-2.0/glib-object.h:25,
>                  from /usr/include/glib-2.0/gio/gioenums.h:30,
>                  from /usr/include/glib-2.0/gio/giotypes.h:30,
>                  from /usr/include/glib-2.0/gio/gio.h:28,
>                  from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
>                  from /usr/include/gtk-2.0/gdk/gdk.h:32,
>                  from /usr/include/gtk-2.0/gtk/gtk.h:32,
>                  from test.4273.c:2:
> /usr/include/glib-2.0/glib/gmacros.h:346:7: error: "_MSC_VER" is not defined [-Werror=undef]
> cc1: all warnings being treated as errors
> 
> Which allowed me to fix the feature test and the gtk.h include 
> file wrapper via the second patch below.
> 
> And then I was greeted by the GTK report window on 'perf report 
> --gtk' ;-)
> 
> Thanks,
> 
> 	Ingo
> 
> diff --git a/tools/perf/config/utilities.mak b/tools/perf/config/utilities.mak
> index 8046182..68cf795 100644
> --- a/tools/perf/config/utilities.mak
> +++ b/tools/perf/config/utilities.mak
> @@ -183,6 +183,8 @@ _gea_err  = $(if $(1),$(error Please set '$(1)' appropriately))
>  # Usage: option = $(call try-cc, source-to-build, cc-options)
>  try-cc = $(shell sh -c						  \
>  	'TMP="$(OUTPUT)$(TMPOUT).$$$$";				  \
> +	 echo "$(1)" > test.$$$$.c;					  \
> +	 echo $(CC) -x c test.$$$$.c $(2) -o "$$TMP" > test.$$$$.sh;		  \
>  	 echo "$(1)" |						  \
>  	 $(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y; \
>  	 rm -f "$$TMP"')
> 
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> 
> diff --git a/tools/perf/config/feature-tests.mak b/tools/perf/config/feature-tests.mak
> index d9084e0..ae8b471 100644
> --- a/tools/perf/config/feature-tests.mak
> +++ b/tools/perf/config/feature-tests.mak
> @@ -68,7 +68,9 @@ endif
>  ifndef NO_GTK2
>  define SOURCE_GTK2
>  #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
> +#pragma GCC diagnostic ignored \"-Wundef\"
>  #include <gtk/gtk.h>
> +#pragma GCC diagnostic error \"-Wundef\"
>  #pragma GCC diagnostic error \"-Wstrict-prototypes\"
>  
>  int main(int argc, char *argv[])
> diff --git a/tools/perf/util/gtk/gtk.h b/tools/perf/util/gtk/gtk.h
> index 75177ee..c7a941f 100644
> --- a/tools/perf/util/gtk/gtk.h
> +++ b/tools/perf/util/gtk/gtk.h
> @@ -2,7 +2,9 @@
>  #define _PERF_GTK_H_ 1
>  
>  #pragma GCC diagnostic ignored "-Wstrict-prototypes"
> +#pragma GCC diagnostic ignored "-Wundef"
>  #include <gtk/gtk.h>
> +#pragma GCC diagnostic error "-Wundef"
>  #pragma GCC diagnostic error "-Wstrict-prototypes"
>  
>  #endif /* _PERF_GTK_H_ */

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-03-19 21:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-19 19:12 [GIT PULL 0/3] perf/core fixes and improvements Arnaldo Carvalho de Melo
2012-03-19 19:12 ` [PATCH 1/3] perf ui browser: Clean lines inside of the input window Arnaldo Carvalho de Melo
2012-03-19 19:12 ` [PATCH 2/3] perf report: Document --symbol-filter option Arnaldo Carvalho de Melo
2012-03-19 19:12 ` [PATCH 3/3] perf report: Add a simple GTK2-based 'perf report' browser Arnaldo Carvalho de Melo
2012-03-19 19:47 ` [GIT PULL 0/3] perf/core fixes and improvements Ingo Molnar
2012-03-19 19:56   ` Ingo Molnar
2012-03-19 20:20   ` Ingo Molnar
2012-03-19 21:17   ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).