aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile7
-rw-r--r--trace-local.h8
-rw-r--r--trace-view-main.c247
-rw-r--r--trace-view.c261
-rw-r--r--trace-view.h17
5 files changed, 277 insertions, 263 deletions
diff --git a/Makefile b/Makefile
index 7533dee..022d0a4 100644
--- a/Makefile
+++ b/Makefile
@@ -32,15 +32,16 @@ trace-cmd.o:: $(HEADERS) $(LIB_FILE)
32trace-util.o:: $(HEADERS) 32trace-util.o:: $(HEADERS)
33trace-ftrace.o:: $(HEADERS) 33trace-ftrace.o:: $(HEADERS)
34trace-input.o:: $(HEADERS) 34trace-input.o:: $(HEADERS)
35trace-view.o:: $(HEADERS) trace-view-store.h 35trace-view.o:: $(HEADERS) trace-view-store.h trace-view.h
36trace-view-store.o:: $(HEADERS) trace-view-store.h 36trace-view-store.o:: $(HEADERS) trace-view-store.h trace-view.h
37trace-view-main.o:: $(HEADERS) trace-view-store.h trace-view.h
37trace-filter.o:: $(HEADERS) 38trace-filter.o:: $(HEADERS)
38trace-graph.o:: $(HEADERS) 39trace-graph.o:: $(HEADERS)
39 40
40trace-cmd:: trace-cmd.o trace-read.o 41trace-cmd:: trace-cmd.o trace-read.o
41 $(CC) $^ -rdynamic -o $@ $(LIBS) 42 $(CC) $^ -rdynamic -o $@ $(LIBS)
42 43
43trace-view:: trace-view.o trace-view-store.o trace-filter.o 44trace-view:: trace-view-main.o trace-view.o trace-view-store.o trace-filter.o
44 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS) 45 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS)
45 46
46trace-graph:: trace-graph.o trace-compat.o 47trace-graph:: trace-graph.o trace-compat.o
diff --git a/trace-local.h b/trace-local.h
index 3c11422..0be298f 100644
--- a/trace-local.h
+++ b/trace-local.h
@@ -11,13 +11,5 @@ struct tracecmd_input *read_trace_header(void);
11int read_trace_files(void); 11int read_trace_files(void);
12 12
13void trace_report(int argc, char **argv); 13void trace_report(int argc, char **argv);
14void trace_view(int argc, char **argv);
15
16
17/* GUI */
18
19/* We use void because this can be used by non gtk files */
20void trace_filter_event_dialog(void *traceview);
21void trace_filter_cpu_dialog(void *trace_tree);
22 14
23#endif /* __TRACE_LOCAL_H */ 15#endif /* __TRACE_LOCAL_H */
diff --git a/trace-view-main.c b/trace-view-main.c
new file mode 100644
index 0000000..bf01543
--- /dev/null
+++ b/trace-view-main.c
@@ -0,0 +1,247 @@
1#include <gtk/gtk.h>
2
3#include "trace-cmd.h"
4#include "trace-view.h"
5
6#define version "0.1.1"
7
8#define TRACE_WIDTH 800
9#define TRACE_HEIGHT 600
10#define input_file "trace.dat"
11
12GtkWidget *trace_tree;
13
14/* Callback for the clicked signal of the Exit button */
15static void
16exit_clicked (GtkWidget *widget, gpointer data)
17{
18 gtk_widget_destroy (GTK_WIDGET (data)); /* the user data points to the main window */
19 gtk_main_quit ();
20}
21
22/* Callback for the delete_event signal of the main application window */
23static gint
24delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
25{
26 gtk_widget_destroy (widget); /* destroy the main window */
27 gtk_main_quit ();
28 return TRUE;
29}
30
31/* Callback for the clicked signal of the Events filter button */
32static void
33events_clicked (gpointer data)
34{
35 GtkWidget *trace_tree = data;
36
37 trace_filter_event_dialog(trace_tree);
38}
39
40/* Callback for the clicked signal of the CPUs filter button */
41static void
42cpus_clicked (gpointer data)
43{
44 GtkWidget *trace_tree = data;
45
46 trace_filter_cpu_dialog(trace_tree);
47}
48
49#if 0
50static GtkTreeModel *
51create_combo_box_model(void)
52{
53 GtkListStore *store;
54 GtkTreeIter iter;
55
56 store = gtk_list_store_new(1, G_TYPE_STRING);
57 gtk_list_store_append(store, &iter);
58 gtk_list_store_set(store, &iter, 0, "1", -1);
59
60 return GTK_TREE_MODEL(store);
61}
62#endif
63
64void trace_view(int argc, char **argv)
65{
66 struct tracecmd_input *handle;
67 GtkWidget *window;
68 GtkWidget *vbox;
69 GtkWidget *hbox;
70 GtkWidget *menu_bar;
71 GtkWidget *menu;
72 GtkWidget *menu_item;
73 GtkWidget *sub_item;
74 GtkWidget *scrollwin;
75 GtkWidget *label;
76 GtkWidget *spin;
77
78 handle = tracecmd_open(input_file);
79
80 if (!handle)
81 die("error reading header");
82
83 if (tracecmd_read_headers(handle) < 0)
84 return;
85
86 if (tracecmd_init_data(handle) < 0)
87 die("failed to init data");
88
89 gtk_init(&argc, &argv);
90
91 /* --- Main window --- */
92
93 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
94
95 /* --- Get handle for trace view first --- */
96
97 trace_tree = gtk_tree_view_new();
98
99 /* --- Top Level Vbox --- */
100
101 vbox = gtk_vbox_new(FALSE, 0);
102 gtk_container_add(GTK_CONTAINER (window), vbox);
103 gtk_widget_show(vbox);
104
105 /* --- Menu Bar --- */
106
107 menu_bar = gtk_menu_bar_new();
108 gtk_box_pack_start(GTK_BOX (vbox), menu_bar, FALSE, FALSE, 0);
109 gtk_widget_show(menu_bar);
110
111 /* --- File Option --- */
112
113 menu_item = gtk_menu_item_new_with_label("File");
114 gtk_widget_show(menu_item);
115
116 gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item);
117
118 menu = gtk_menu_new(); /* Don't need to show menus */
119
120
121 /* --- File - Quit Option --- */
122
123 sub_item = gtk_menu_item_new_with_label("Quit");
124
125 /* Add them to the menu */
126 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
127
128 /* We can attach the Quit menu item to our exit function */
129 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
130 G_CALLBACK (exit_clicked),
131 (gpointer) window);
132
133 /* We do need to show menu items */
134 gtk_widget_show(sub_item);
135
136 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
137
138 /* --- end File options --- */
139
140
141 /* --- Filter Option --- */
142
143 menu_item = gtk_menu_item_new_with_label("Filter");
144 gtk_widget_show(menu_item);
145
146 gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item);
147
148 menu = gtk_menu_new(); /* Don't need to show menus */
149
150
151 /* --- Filter - Events Option --- */
152
153 sub_item = gtk_menu_item_new_with_label("events");
154
155 /* Add them to the menu */
156 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
157
158 /* We can attach the Quit menu item to our exit function */
159 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
160 G_CALLBACK (events_clicked),
161 (gpointer) trace_tree);
162
163 /* We do need to show menu items */
164 gtk_widget_show(sub_item);
165
166
167 /* --- Filter - CPUs Option --- */
168
169 sub_item = gtk_menu_item_new_with_label("CPUs");
170
171 /* Add them to the menu */
172 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
173
174 /* We can attach the Quit menu item to our exit function */
175 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
176 G_CALLBACK (cpus_clicked),
177 (gpointer) trace_tree);
178
179 /* We do need to show menu items */
180 gtk_widget_show(sub_item);
181
182
183 /* --- End Filter Options --- */
184 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
185
186
187 /* --- Paging Hbox --- */
188
189 hbox = gtk_hbox_new(FALSE, 0);
190 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
191 gtk_widget_show(hbox);
192
193 /* --- Page Spin Button --- */
194
195 label = gtk_label_new("Page");
196 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
197 gtk_widget_show(label);
198
199 spin = gtk_spin_button_new(NULL, 1.0, 0);
200 gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin), 1, 1);
201 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0);
202 gtk_widget_show(spin);
203
204 /* --- Top Level Hbox --- */
205
206 hbox = gtk_hbox_new(FALSE, 0);
207 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
208 gtk_widget_show(hbox);
209
210 /* --- Scroll Window --- */
211 scrollwin = gtk_scrolled_window_new(NULL, NULL);
212 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
213 GTK_POLICY_AUTOMATIC,
214 GTK_POLICY_AUTOMATIC);
215 gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0);
216 gtk_widget_show(scrollwin);
217
218 /* --- Set up Trace Tree --- */
219
220 trace_view_load(trace_tree, handle, spin);
221
222 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin),
223 trace_tree);
224 gtk_widget_show(trace_tree);
225
226
227 /**********************************************
228 * Main Window
229 **********************************************/
230
231 /* Connect to the delete_event signal and Run the application */
232
233 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
234 (GtkSignalFunc) delete_event,
235 NULL);
236
237 gtk_widget_set_size_request(window, TRACE_WIDTH, TRACE_HEIGHT);
238
239 gtk_widget_show (window);
240 gtk_main ();
241}
242
243int main(int argc, char **argv)
244{
245 trace_view(argc, argv);
246 return 0;
247}
diff --git a/trace-view.c b/trace-view.c
index f5cdf5e..bd68a47 100644
--- a/trace-view.c
+++ b/trace-view.c
@@ -25,13 +25,7 @@
25 25
26#include "trace-cmd.h" 26#include "trace-cmd.h"
27#include "trace-local.h" 27#include "trace-local.h"
28#include "trace-view-store.h" 28#include "trace-view.h"
29
30#define version "0.1.1"
31
32#define TRACE_WIDTH 800
33#define TRACE_HEIGHT 600
34#define input_file "trace.dat"
35 29
36enum { 30enum {
37 COL_CPU, 31 COL_CPU,
@@ -44,57 +38,15 @@ enum {
44 NUM_COLS 38 NUM_COLS
45}; 39};
46 40
47GtkWidget *trace_tree;
48
49/* Callback for the clicked signal of the Exit button */
50static void
51exit_clicked (GtkWidget *widget, gpointer data)
52{
53 gtk_widget_destroy (GTK_WIDGET (data)); /* the user data points to the main window */
54 gtk_main_quit ();
55}
56
57/* Callback for the delete_event signal of the main application window */
58static gint
59delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
60{
61 gtk_widget_destroy (widget); /* destroy the main window */
62 gtk_main_quit ();
63 return TRUE;
64}
65
66/* Callback for the clicked signal of the Events filter button */
67static void
68events_clicked (gpointer data)
69{
70 GtkWidget *trace_tree = data;
71
72 trace_filter_event_dialog(trace_tree);
73}
74
75/* Callback for the clicked signal of the CPUs filter button */
76static void
77cpus_clicked (gpointer data)
78{
79 GtkWidget *trace_tree = data;
80
81 trace_filter_cpu_dialog(trace_tree);
82}
83
84#if 0
85static GtkTreeModel * 41static GtkTreeModel *
86create_combo_box_model(void) 42create_trace_view_model(struct tracecmd_input *handle)
87{ 43{
88 GtkListStore *store; 44 TraceViewStore *store;
89 GtkTreeIter iter;
90 45
91 store = gtk_list_store_new(1, G_TYPE_STRING); 46 store = trace_view_store_new(handle);
92 gtk_list_store_append(store, &iter);
93 gtk_list_store_set(store, &iter, 0, "1", -1);
94 47
95 return GTK_TREE_MODEL(store); 48 return GTK_TREE_MODEL(store);
96} 49}
97#endif
98 50
99static void 51static void
100spin_changed(gpointer data, GtkWidget *spin) 52spin_changed(gpointer data, GtkWidget *spin)
@@ -122,18 +74,8 @@ spin_changed(gpointer data, GtkWidget *spin)
122 g_object_unref(model); 74 g_object_unref(model);
123} 75}
124 76
125static GtkTreeModel * 77void
126create_trace_view_model(struct tracecmd_input *handle) 78trace_view_load(GtkWidget *view, struct tracecmd_input *handle,
127{
128 TraceViewStore *store;
129
130 store = trace_view_store_new(handle);
131
132 return GTK_TREE_MODEL(store);
133}
134
135static void
136load_trace_view(GtkWidget *view, struct tracecmd_input *handle,
137 GtkWidget *spin) 79 GtkWidget *spin)
138{ 80{
139 GtkTreeViewColumn *col; 81 GtkTreeViewColumn *col;
@@ -208,197 +150,12 @@ load_trace_view(GtkWidget *view, struct tracecmd_input *handle,
208 150
209 trace_view_store_set_spin_button(TRACE_VIEW_STORE(model), spin); 151 trace_view_store_set_spin_button(TRACE_VIEW_STORE(model), spin);
210 152
211 gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
212
213 g_object_unref(model); /* destroy model automatically with view */
214}
215
216void trace_view(int argc, char **argv)
217{
218 struct tracecmd_input *handle;
219 GtkWidget *window;
220 GtkWidget *vbox;
221 GtkWidget *hbox;
222 GtkWidget *menu_bar;
223 GtkWidget *menu;
224 GtkWidget *menu_item;
225 GtkWidget *sub_item;
226 GtkWidget *scrollwin;
227 GtkWidget *label;
228 GtkWidget *spin;
229
230 handle = tracecmd_open(input_file);
231
232 if (!handle)
233 die("error reading header");
234
235 if (tracecmd_read_headers(handle) < 0)
236 return;
237
238 if (tracecmd_init_data(handle) < 0)
239 die("failed to init data");
240
241 gtk_init(&argc, &argv);
242
243 /* --- Main window --- */
244
245 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
246
247 /* --- Get handle for trace view first --- */
248
249 trace_tree = gtk_tree_view_new();
250
251 /* --- Top Level Vbox --- */
252
253 vbox = gtk_vbox_new(FALSE, 0);
254 gtk_container_add(GTK_CONTAINER (window), vbox);
255 gtk_widget_show(vbox);
256
257 /* --- Menu Bar --- */
258
259 menu_bar = gtk_menu_bar_new();
260 gtk_box_pack_start(GTK_BOX (vbox), menu_bar, FALSE, FALSE, 0);
261 gtk_widget_show(menu_bar);
262
263 /* --- File Option --- */
264
265 menu_item = gtk_menu_item_new_with_label("File");
266 gtk_widget_show(menu_item);
267
268 gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item);
269
270 menu = gtk_menu_new(); /* Don't need to show menus */
271
272
273 /* --- File - Quit Option --- */
274
275 sub_item = gtk_menu_item_new_with_label("Quit");
276
277 /* Add them to the menu */
278 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
279
280 /* We can attach the Quit menu item to our exit function */
281 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
282 G_CALLBACK (exit_clicked),
283 (gpointer) window);
284
285 /* We do need to show menu items */
286 gtk_widget_show(sub_item);
287
288 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
289
290 /* --- end File options --- */
291
292
293 /* --- Filter Option --- */
294
295 menu_item = gtk_menu_item_new_with_label("Filter");
296 gtk_widget_show(menu_item);
297
298 gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item);
299
300 menu = gtk_menu_new(); /* Don't need to show menus */
301
302
303 /* --- Filter - Events Option --- */
304
305 sub_item = gtk_menu_item_new_with_label("events");
306
307 /* Add them to the menu */
308 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
309
310 /* We can attach the Quit menu item to our exit function */
311 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
312 G_CALLBACK (events_clicked),
313 (gpointer) trace_tree);
314
315 /* We do need to show menu items */
316 gtk_widget_show(sub_item);
317
318
319 /* --- Filter - CPUs Option --- */
320
321 sub_item = gtk_menu_item_new_with_label("CPUs");
322
323 /* Add them to the menu */
324 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
325
326 /* We can attach the Quit menu item to our exit function */
327 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
328 G_CALLBACK (cpus_clicked),
329 (gpointer) trace_tree);
330
331 /* We do need to show menu items */
332 gtk_widget_show(sub_item);
333
334
335 /* --- End Filter Options --- */
336 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
337
338
339 /* --- Paging Hbox --- */
340
341 hbox = gtk_hbox_new(FALSE, 0);
342 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
343 gtk_widget_show(hbox);
344
345 /* --- Page Spin Button --- */
346
347 label = gtk_label_new("Page");
348 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
349 gtk_widget_show(label);
350
351 spin = gtk_spin_button_new(NULL, 1.0, 0);
352 gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin), 1, 1);
353 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0);
354 gtk_widget_show(spin);
355
356 g_signal_connect_swapped (G_OBJECT (spin), "value-changed", 153 g_signal_connect_swapped (G_OBJECT (spin), "value-changed",
357 G_CALLBACK (spin_changed), 154 G_CALLBACK (spin_changed),
358 (gpointer) trace_tree); 155 (gpointer) view);
359
360
361 /* --- Top Level Hbox --- */
362 156
363 hbox = gtk_hbox_new(FALSE, 0);
364 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
365 gtk_widget_show(hbox);
366 157
367 /* --- Scroll Window --- */ 158 gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
368 scrollwin = gtk_scrolled_window_new(NULL, NULL);
369 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
370 GTK_POLICY_AUTOMATIC,
371 GTK_POLICY_AUTOMATIC);
372 gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0);
373 gtk_widget_show(scrollwin);
374
375 /* --- Set up Trace Tree --- */
376
377 load_trace_view(trace_tree, handle, spin);
378
379 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin),
380 trace_tree);
381 gtk_widget_show(trace_tree);
382
383
384 /**********************************************
385 * Main Window
386 **********************************************/
387
388 /* Connect to the delete_event signal and Run the application */
389
390 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
391 (GtkSignalFunc) delete_event,
392 NULL);
393
394 gtk_widget_set_size_request(window, TRACE_WIDTH, TRACE_HEIGHT);
395
396 gtk_widget_show (window);
397 gtk_main ();
398}
399 159
400int main(int argc, char **argv) 160 g_object_unref(model); /* destroy model automatically with view */
401{
402 trace_view(argc, argv);
403 return 0;
404} 161}
diff --git a/trace-view.h b/trace-view.h
new file mode 100644
index 0000000..ece52b1
--- /dev/null
+++ b/trace-view.h
@@ -0,0 +1,17 @@
1#ifndef _TRACE_VIEW_H
2#define _TRACE_VIEW_H
3
4#include "trace-view-store.h"
5
6void
7trace_view_load(GtkWidget *view, struct tracecmd_input *handle,
8 GtkWidget *spin);
9
10void trace_view(int argc, char **argv);
11
12
13/* We use void because this can be used by non gtk files */
14void trace_filter_event_dialog(void *traceview);
15void trace_filter_cpu_dialog(void *trace_tree);
16
17#endif /* _TRACE_VIEW_H */