aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--trace-capture.c137
1 files changed, 42 insertions, 95 deletions
diff --git a/trace-capture.c b/trace-capture.c
index 8ce13c7..c3cb269 100644
--- a/trace-capture.c
+++ b/trace-capture.c
@@ -47,7 +47,7 @@
47 47
48#define PLUGIN_NONE "NONE" 48#define PLUGIN_NONE "NONE"
49 49
50#define DIALOG_WIDTH 320 50#define DIALOG_WIDTH 620
51#define DIALOG_HEIGHT 600 51#define DIALOG_HEIGHT 600
52 52
53struct trace_capture { 53struct trace_capture {
@@ -58,7 +58,6 @@ struct trace_capture {
58 GtkWidget *file_entry; 58 GtkWidget *file_entry;
59 GtkWidget *output_text; 59 GtkWidget *output_text;
60 GtkTextBuffer *output_buffer; 60 GtkTextBuffer *output_buffer;
61 GtkWidget *output_dialog;
62 GtkWidget *event_view; 61 GtkWidget *event_view;
63 GtkWidget *plugin_combo; 62 GtkWidget *plugin_combo;
64 GtkWidget *settings_combo; 63 GtkWidget *settings_combo;
@@ -290,93 +289,6 @@ static int is_latency(char *plugin)
290 strcmp(plugin, "preemptirqsoff") == 0; 289 strcmp(plugin, "preemptirqsoff") == 0;
291} 290}
292 291
293static void close_command_display(struct trace_capture *cap)
294{
295 gtk_widget_destroy(cap->output_dialog);
296 cap->output_dialog = NULL;
297 cap->stop_dialog = NULL;
298}
299
300static void display_command_close(GtkWidget *widget, gint id, gpointer data)
301{
302 struct trace_capture *cap = data;
303
304 close_command_display(cap);
305}
306
307static void display_command_destroy(GtkWidget *widget, gpointer data)
308{
309 struct trace_capture *cap = data;
310
311 close_command_display(cap);
312}
313
314static void display_command(struct trace_capture *cap)
315{
316 GtkWidget *dialog;
317 GtkWidget *scrollwin;
318 GtkWidget *viewport;
319 GtkWidget *textview;
320 GtkTextBuffer *buffer;
321 const gchar *command;
322 GString *str;
323
324 command = gtk_entry_get_text(GTK_ENTRY(cap->command_entry));
325
326 if (!command || !strlen(command) || is_just_ws(command))
327 command = "trace-cmd";
328
329 str = g_string_new("");
330
331 g_string_printf(str, "(%s)", command);
332
333 dialog = gtk_dialog_new_with_buttons(str->str,
334 NULL,
335 GTK_DIALOG_MODAL,
336 "Close",
337 GTK_RESPONSE_ACCEPT,
338 NULL);
339
340 g_string_free(str, TRUE);
341
342 g_signal_connect(dialog, "response",
343 G_CALLBACK(display_command_close),
344 (gpointer)cap);
345
346 gtk_signal_connect (GTK_OBJECT(dialog), "delete_event",
347 (GtkSignalFunc) display_command_destroy,
348 (gpointer)cap);
349
350 scrollwin = gtk_scrolled_window_new(NULL, NULL);
351 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
352 GTK_POLICY_AUTOMATIC,
353 GTK_POLICY_AUTOMATIC);
354 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), scrollwin, TRUE, TRUE, 0);
355 gtk_widget_show(scrollwin);
356
357 viewport = gtk_viewport_new(NULL, NULL);
358 gtk_widget_show(viewport);
359
360 gtk_container_add(GTK_CONTAINER(scrollwin), viewport);
361
362 textview = gtk_text_view_new();
363 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
364
365 gtk_container_add(GTK_CONTAINER(viewport), textview);
366 gtk_widget_show(textview);
367
368 cap->output_text = textview;
369 cap->output_buffer = buffer;
370
371 gtk_widget_set_size_request(GTK_WIDGET(dialog),
372 500, 600);
373
374 gtk_widget_show(dialog);
375
376 cap->output_dialog = dialog;
377
378}
379
380static int calculate_trace_cmd_words(struct trace_capture *cap) 292static int calculate_trace_cmd_words(struct trace_capture *cap)
381{ 293{
382 int words = 4; /* trace-cmd record -o file */ 294 int words = 4; /* trace-cmd record -o file */
@@ -896,8 +808,6 @@ static void execute_button_clicked(struct trace_capture *cap)
896 return; 808 return;
897 } 809 }
898 810
899 display_command(cap);
900
901 run_command(cap); 811 run_command(cap);
902 812
903 dialog = gtk_dialog_new_with_buttons("Stop Execution", 813 dialog = gtk_dialog_new_with_buttons("Stop Execution",
@@ -1332,10 +1242,14 @@ static void tracing_dialog(struct shark_info *info, const char *tracing)
1332 GtkWidget *label; 1242 GtkWidget *label;
1333 GtkWidget *entry; 1243 GtkWidget *entry;
1334 GtkWidget *frame; 1244 GtkWidget *frame;
1245 GtkWidget *vbox;
1335 GtkWidget *scrollwin; 1246 GtkWidget *scrollwin;
1336 GtkWidget *table; 1247 GtkWidget *table;
1337 GtkWidget *table2; 1248 GtkWidget *table2;
1338 GtkWidget *event_tree; 1249 GtkWidget *event_tree;
1250 GtkWidget *viewport;
1251 GtkWidget *textview;
1252 GtkTextBuffer *buffer;
1339 char **plugins; 1253 char **plugins;
1340 int nr_plugins; 1254 int nr_plugins;
1341 struct trace_capture cap; 1255 struct trace_capture cap;
@@ -1382,7 +1296,7 @@ static void tracing_dialog(struct shark_info *info, const char *tracing)
1382 cap.main_dialog = dialog; 1296 cap.main_dialog = dialog;
1383 1297
1384 /* --- Top Level Hpaned --- */ 1298 /* --- Top Level Hpaned --- */
1385 table = gtk_table_new(4, 1, FALSE); 1299 table = gtk_table_new(4, 2, FALSE);
1386 1300
1387 /* It is possible that no pevents exist. */ 1301 /* It is possible that no pevents exist. */
1388 if (pevent) { 1302 if (pevent) {
@@ -1537,6 +1451,42 @@ static void tracing_dialog(struct shark_info *info, const char *tracing)
1537 G_CALLBACK (file_clicked), 1451 G_CALLBACK (file_clicked),
1538 (gpointer)&cap); 1452 (gpointer)&cap);
1539 1453
1454
1455 /*------------------ Command Output ------------------ */
1456
1457 vbox = gtk_vbox_new(FALSE, 0);
1458 gtk_table_attach_defaults(GTK_TABLE(table), vbox, 1, 2, 0, 4);
1459 gtk_widget_show(vbox);
1460 gtk_widget_set_size_request(GTK_WIDGET(vbox), 300, 0);
1461
1462
1463 label = gtk_label_new("Command Output:");
1464 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
1465 gtk_widget_show(label);
1466
1467 scrollwin = gtk_scrolled_window_new(NULL, NULL);
1468 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
1469 GTK_POLICY_AUTOMATIC,
1470 GTK_POLICY_AUTOMATIC);
1471 gtk_box_pack_start(GTK_BOX(vbox), scrollwin, TRUE, TRUE, 0);
1472 gtk_widget_show(scrollwin);
1473
1474 viewport = gtk_viewport_new(NULL, NULL);
1475 gtk_widget_show(viewport);
1476
1477 gtk_container_add(GTK_CONTAINER(scrollwin), viewport);
1478
1479 textview = gtk_text_view_new();
1480 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
1481
1482 gtk_container_add(GTK_CONTAINER(viewport), textview);
1483 gtk_widget_show(textview);
1484
1485 cap.output_text = textview;
1486 cap.output_buffer = buffer;
1487
1488
1489
1540 gtk_widget_set_size_request(GTK_WIDGET(dialog), 1490 gtk_widget_set_size_request(GTK_WIDGET(dialog),
1541 DIALOG_WIDTH, DIALOG_HEIGHT); 1491 DIALOG_WIDTH, DIALOG_HEIGHT);
1542 1492
@@ -1569,9 +1519,6 @@ static void tracing_dialog(struct shark_info *info, const char *tracing)
1569 1519
1570 end_capture(&cap); 1520 end_capture(&cap);
1571 1521
1572 if (cap.output_dialog)
1573 gtk_widget_destroy(cap.output_dialog);
1574
1575 if (pevent) 1522 if (pevent)
1576 pevent_free(pevent); 1523 pevent_free(pevent);
1577 1524