From: tip-bot for Namhyung Kim <namhyung.kim@lge.com>
To: linux-tip-commits@vger.kernel.org
Cc: acme@redhat.com, linux-kernel@vger.kernel.org, paulus@samba.org,
hpa@zytor.com, mingo@kernel.org, andi@firstfloor.org,
a.p.zijlstra@chello.nl, penberg@kernel.org, namhyung.kim@lge.com,
bp@alien8.de, namhyung@kernel.org, jolsa@redhat.com,
tglx@linutronix.de
Subject: [tip:perf/core] perf gtk/annotate: Support multiple event annotation
Date: Fri, 15 Feb 2013 08:33:30 -0800 [thread overview]
Message-ID: <tip-7a60ba948267336d77a48a3539f98151f9dcfba6@git.kernel.org> (raw)
In-Reply-To: <1360227734-375-3-git-send-email-namhyung@kernel.org>
Commit-ID: 7a60ba948267336d77a48a3539f98151f9dcfba6
Gitweb: http://git.kernel.org/tip/7a60ba948267336d77a48a3539f98151f9dcfba6
Author: Namhyung Kim <namhyung.kim@lge.com>
AuthorDate: Thu, 7 Feb 2013 18:02:09 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 14 Feb 2013 14:59:28 -0300
perf gtk/annotate: Support multiple event annotation
Show multiple annotation result for each evsel. Each result represents
the most frquently sampled symbol/function for the evsel and it will be
shown in a tab window.
For this add a reference to main container (notebook) to the pgctx. At
the first call to annotate browser, hist_entry__find_annotations() will
setup a new browser, and next calls will add new tabs to the browser.
But it requires final perf_gtk__show_annotations() to start processing
GUI events.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Borislav Petkov <bp@alien8.de>
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>
Link: http://lkml.kernel.org/r/1360227734-375-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-annotate.c | 4 +++
tools/perf/ui/gtk/annotate.c | 74 +++++++++++++++++++++++++++----------------
tools/perf/ui/gtk/gtk.h | 1 +
tools/perf/util/annotate.h | 4 +++
4 files changed, 56 insertions(+), 27 deletions(-)
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index 9d758c9..68e3a16 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -227,6 +227,10 @@ static int __cmd_annotate(struct perf_annotate *ann)
ui__error("The %s file has no samples!\n", session->filename);
goto out_delete;
}
+
+ if (use_browser == 2)
+ perf_gtk__show_annotations();
+
out_delete:
/*
* Speed up the exit process, for large files this can
diff --git a/tools/perf/ui/gtk/annotate.c b/tools/perf/ui/gtk/annotate.c
index 19d84fa..1ce89f2 100644
--- a/tools/perf/ui/gtk/annotate.c
+++ b/tools/perf/ui/gtk/annotate.c
@@ -126,31 +126,52 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym,
int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx,
struct hist_browser_timer *hbt)
{
- GtkWidget *vbox;
- GtkWidget *notebook;
- GtkWidget *infobar;
- GtkWidget *statbar;
GtkWidget *window;
+ GtkWidget *notebook;
GtkWidget *scrolled_window;
GtkWidget *tab_label;
- 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);
+ if (perf_gtk__is_active_context(pgctx)) {
+ window = pgctx->main_window;
+ notebook = pgctx->notebook;
+ } else {
+ GtkWidget *vbox;
+ GtkWidget *infobar;
+ GtkWidget *statbar;
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), "perf annotate");
+ 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);
- g_signal_connect(window, "delete_event", gtk_main_quit, NULL);
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "perf annotate");
- pgctx = perf_gtk__activate_context(window);
- if (!pgctx)
- return -1;
+ g_signal_connect(window, "delete_event", gtk_main_quit, NULL);
+
+ pgctx = perf_gtk__activate_context(window);
+ if (!pgctx)
+ return -1;
+
+ vbox = gtk_vbox_new(FALSE, 0);
+ notebook = gtk_notebook_new();
+ pgctx->notebook = notebook;
+
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+
+ infobar = perf_gtk__setup_info_bar();
+ if (infobar) {
+ gtk_box_pack_start(GTK_BOX(vbox), infobar,
+ FALSE, FALSE, 0);
+ }
+
+ statbar = perf_gtk__setup_statusbar();
+ gtk_box_pack_start(GTK_BOX(vbox), statbar, FALSE, FALSE, 0);
+
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ }
- vbox = gtk_vbox_new(FALSE, 0);
- notebook = gtk_notebook_new();
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
tab_label = gtk_label_new(sym->name);
@@ -160,19 +181,19 @@ int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx,
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolled_window,
tab_label);
- gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
-
- infobar = perf_gtk__setup_info_bar();
- if (infobar)
- gtk_box_pack_start(GTK_BOX(vbox), infobar, FALSE, FALSE, 0);
- statbar = perf_gtk__setup_statusbar();
- gtk_box_pack_start(GTK_BOX(vbox), statbar, FALSE, FALSE, 0);
+ perf_gtk__annotate_symbol(scrolled_window, sym, map, evidx, hbt);
+ return 0;
+}
- gtk_container_add(GTK_CONTAINER(window), vbox);
+void perf_gtk__show_annotations(void)
+{
+ GtkWidget *window;
- perf_gtk__annotate_symbol(scrolled_window, sym, map, evidx, hbt);
+ if (!perf_gtk__is_active_context(pgctx))
+ return;
+ window = pgctx->main_window;
gtk_widget_show_all(window);
perf_gtk__resize_window(window);
@@ -181,5 +202,4 @@ int symbol__gtk_annotate(struct symbol *sym, struct map *map, int evidx,
gtk_main();
perf_gtk__deactivate_context(&pgctx);
- return 0;
}
diff --git a/tools/perf/ui/gtk/gtk.h b/tools/perf/ui/gtk/gtk.h
index 5d36937..3d96785 100644
--- a/tools/perf/ui/gtk/gtk.h
+++ b/tools/perf/ui/gtk/gtk.h
@@ -10,6 +10,7 @@
struct perf_gtk_context {
GtkWidget *main_window;
+ GtkWidget *notebook;
#ifdef HAVE_GTK_INFO_BAR
GtkWidget *info_bar;
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index a8ccbda..c422440 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -164,6 +164,8 @@ static inline int hist_entry__gtk_annotate(struct hist_entry *he, int evidx,
{
return symbol__gtk_annotate(he->ms.sym, he->ms.map, evidx, hbt);
}
+
+void perf_gtk__show_annotations(void);
#else
static inline int hist_entry__gtk_annotate(struct hist_entry *he __maybe_unused,
int evidx __maybe_unused,
@@ -172,6 +174,8 @@ static inline int hist_entry__gtk_annotate(struct hist_entry *he __maybe_unused,
{
return 0;
}
+
+static inline void perf_gtk__show_annotations(void) {}
#endif
extern const char *disassembler_style;
next prev parent reply other threads:[~2013-02-15 16:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 9:02 [PATCH 0/7] perf annotate: Add support for GTK+ annotation browser (v2) Namhyung Kim
2013-02-07 9:02 ` [PATCH 1/7] perf ui/gtk: Implement basic GTK2 annotation browser Namhyung Kim
2013-02-15 16:32 ` [tip:perf/core] " tip-bot for Namhyung Kim
2013-02-07 9:02 ` [PATCH 2/7] perf gtk/annotate: Support multiple event annotation Namhyung Kim
2013-02-15 16:33 ` tip-bot for Namhyung Kim [this message]
2013-02-07 9:02 ` [PATCH 3/7] perf gtk/annotate: Show source lines with gray color Namhyung Kim
2013-02-15 16:34 ` [tip:perf/core] " tip-bot for Namhyung Kim
2013-02-07 9:02 ` [PATCH 4/7] perf buildid-cache: Add --update option Namhyung Kim
2013-02-15 16:29 ` [tip:perf/core] " tip-bot for Namhyung Kim
2013-02-07 9:02 ` [PATCH 5/7] perf annotate: Fix warning message on a missing vmlinux Namhyung Kim
2013-02-15 16:30 ` [tip:perf/core] " tip-bot for Namhyung Kim
2013-02-07 9:02 ` [PATCH 6/7] perf gtk/annotate: Fail early if it can't annotate Namhyung Kim
2013-02-15 16:35 ` [tip:perf/core] perf gtk/annotate: Fail early if it can' t annotate tip-bot for Namhyung Kim
2013-02-07 9:02 ` [PATCH 7/7] perf annotate: Make it to be able to skip unannotatable symbols Namhyung Kim
2013-02-05 1:12 ` Arnaldo Carvalho de Melo
2013-02-08 7:09 ` Namhyung Kim
2013-02-15 16:36 ` [tip:perf/core] " tip-bot for Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-7a60ba948267336d77a48a3539f98151f9dcfba6@git.kernel.org \
--to=namhyung.kim@lge.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=andi@firstfloor.org \
--cc=bp@alien8.de \
--cc=hpa@zytor.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
--cc=penberg@kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.