aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--trace-graph-main.c26
-rw-r--r--trace-graph.c44
-rw-r--r--trace-graph.h5
3 files changed, 75 insertions, 0 deletions
diff --git a/trace-graph-main.c b/trace-graph-main.c
index e6fca6b..987a80d 100644
--- a/trace-graph-main.c
+++ b/trace-graph-main.c
@@ -110,6 +110,16 @@ events_clicked (gpointer data)
110 trace_graph_event_filter_callback, ginfo); 110 trace_graph_event_filter_callback, ginfo);
111} 111}
112 112
113/* Callback for the clicked signal of the Advanced filter button */
114static void
115adv_filter_clicked (gpointer data)
116{
117 struct graph_info *ginfo = data;
118
119 trace_adv_filter_dialog(ginfo->handle, ginfo->event_filter,
120 trace_graph_adv_filter_callback, ginfo);
121}
122
113void trace_graph(int argc, char **argv) 123void trace_graph(int argc, char **argv)
114{ 124{
115 struct tracecmd_input *handle = NULL; 125 struct tracecmd_input *handle = NULL;
@@ -246,6 +256,22 @@ void trace_graph(int argc, char **argv)
246 gtk_widget_show(sub_item); 256 gtk_widget_show(sub_item);
247 257
248 258
259 /* --- Filter - Advanced Events Option --- */
260
261 sub_item = gtk_menu_item_new_with_label("advanced event filter");
262
263 /* Add them to the menu */
264 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
265
266 /* We can attach the Quit menu item to our exit function */
267 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
268 G_CALLBACK (adv_filter_clicked),
269 (gpointer) ginfo);
270
271 /* We do need to show menu items */
272 gtk_widget_show(sub_item);
273
274
249 /* --- End Filter Options --- */ 275 /* --- End Filter Options --- */
250 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu); 276 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
251 277
diff --git a/trace-graph.c b/trace-graph.c
index 8283824..e83bf27 100644
--- a/trace-graph.c
+++ b/trace-graph.c
@@ -32,6 +32,8 @@
32#include "trace-hash.h" 32#include "trace-hash.h"
33#include "trace-filter.h" 33#include "trace-filter.h"
34 34
35#include "util.h"
36
35#define DEBUG_LEVEL 0 37#define DEBUG_LEVEL 0
36#if DEBUG_LEVEL > 0 38#if DEBUG_LEVEL > 0
37# define dprintf(l, x...) \ 39# define dprintf(l, x...) \
@@ -1752,6 +1754,48 @@ void trace_graph_event_filter_callback(gboolean accept,
1752 redraw_graph(ginfo); 1754 redraw_graph(ginfo);
1753} 1755}
1754 1756
1757void trace_graph_adv_filter_callback(gboolean accept,
1758 const gchar *text,
1759 gint *event_ids,
1760 gpointer data)
1761{
1762 struct graph_info *ginfo = data;
1763 struct event_filter *event_filter;
1764 char *error_str;
1765 int ret;
1766 int i;
1767
1768 if (!accept)
1769 return;
1770
1771 if (!has_text(text) && !event_ids)
1772 return;
1773
1774 event_filter = ginfo->event_filter;
1775
1776 if (event_ids) {
1777 for (i = 0; event_ids[i] >= 0; i++)
1778 pevent_filter_remove_event(event_filter, event_ids[i]);
1779 }
1780
1781 if (has_text(text)) {
1782
1783 ginfo->all_events = FALSE;
1784
1785 pevent_filter_clear_trivial(event_filter,
1786 FILTER_TRIVIAL_BOTH);
1787
1788 ret = pevent_filter_add_filter_str(event_filter, text, &error_str);
1789 if (ret < 0) {
1790 warning("filter failed due to: %s", error_str);
1791 free(error_str);
1792 return;
1793 }
1794 }
1795
1796 redraw_graph(ginfo);
1797}
1798
1755static void redraw_pixmap_backend(struct graph_info *ginfo) 1799static void redraw_pixmap_backend(struct graph_info *ginfo)
1756{ 1800{
1757 GdkPixmap *old_pix; 1801 GdkPixmap *old_pix;
diff --git a/trace-graph.h b/trace-graph.h
index 411e750..3130e98 100644
--- a/trace-graph.h
+++ b/trace-graph.h
@@ -231,6 +231,11 @@ void trace_graph_event_filter_callback(gboolean accept,
231 gint *events, 231 gint *events,
232 gpointer data); 232 gpointer data);
233 233
234void trace_graph_adv_filter_callback(gboolean accept,
235 const gchar *text,
236 gint *event_ids,
237 gpointer data);
238
234static inline GtkWidget *trace_graph_get_draw(struct graph_info *ginfo) 239static inline GtkWidget *trace_graph_get_draw(struct graph_info *ginfo)
235{ 240{
236 return ginfo->draw; 241 return ginfo->draw;