diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-06-18 14:30:42 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-18 17:40:52 -0400 |
| commit | 4cd56f27508fe3b224824f035903f061e8fccdfb (patch) | |
| tree | dda00171e7bdd9cb10d561ebac25b8b9e80a05ba | |
| parent | 51717dd4a1a779ac045767d9ccbea5a9a42dcb5c (diff) | |
kernelshark: Move the event tree into the capture dialog box
Since the events are a major selection feature of the capture, move
the event tree into the main dialog box.
Requested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
| -rw-r--r-- | trace-capture.c | 177 |
1 files changed, 109 insertions, 68 deletions
diff --git a/trace-capture.c b/trace-capture.c index 0be4c9a..aaa993e 100644 --- a/trace-capture.c +++ b/trace-capture.c | |||
| @@ -46,6 +46,9 @@ | |||
| 46 | 46 | ||
| 47 | #define PLUGIN_NONE "NONE" | 47 | #define PLUGIN_NONE "NONE" |
| 48 | 48 | ||
| 49 | #define DIALOG_WIDTH 600 | ||
| 50 | #define DIALOG_HEIGHT 600 | ||
| 51 | |||
| 49 | struct trace_capture { | 52 | struct trace_capture { |
| 50 | struct pevent *pevent; | 53 | struct pevent *pevent; |
| 51 | struct shark_info *info; | 54 | struct shark_info *info; |
| @@ -55,6 +58,7 @@ struct trace_capture { | |||
| 55 | GtkWidget *output_text; | 58 | GtkWidget *output_text; |
| 56 | GtkTextBuffer *output_buffer; | 59 | GtkTextBuffer *output_buffer; |
| 57 | GtkWidget *output_dialog; | 60 | GtkWidget *output_dialog; |
| 61 | GtkWidget *event_view; | ||
| 58 | GtkWidget *plugin_combo; | 62 | GtkWidget *plugin_combo; |
| 59 | GtkWidget *stop_dialog; | 63 | GtkWidget *stop_dialog; |
| 60 | pthread_t thread; | 64 | pthread_t thread; |
| @@ -453,6 +457,21 @@ static void set_plugin(struct trace_capture *cap) | |||
| 453 | &iter); | 457 | &iter); |
| 454 | } | 458 | } |
| 455 | 459 | ||
| 460 | static void update_events(struct trace_capture *cap) | ||
| 461 | { | ||
| 462 | struct shark_info *info = cap->info; | ||
| 463 | |||
| 464 | if (!cap->event_view) | ||
| 465 | return; | ||
| 466 | |||
| 467 | clear_capture_events(cap); | ||
| 468 | |||
| 469 | trace_extract_event_list_view(cap->event_view, | ||
| 470 | &info->cap_all_events, | ||
| 471 | &info->cap_systems, | ||
| 472 | &info->cap_events); | ||
| 473 | } | ||
| 474 | |||
| 456 | static void execute_command(struct trace_capture *cap) | 475 | static void execute_command(struct trace_capture *cap) |
| 457 | { | 476 | { |
| 458 | const gchar *ccommand; | 477 | const gchar *ccommand; |
| @@ -464,6 +483,7 @@ static void execute_command(struct trace_capture *cap) | |||
| 464 | int i; | 483 | int i; |
| 465 | 484 | ||
| 466 | update_plugin(cap); | 485 | update_plugin(cap); |
| 486 | update_events(cap); | ||
| 467 | 487 | ||
| 468 | ccommand = gtk_entry_get_text(GTK_ENTRY(cap->command_entry)); | 488 | ccommand = gtk_entry_get_text(GTK_ENTRY(cap->command_entry)); |
| 469 | if (!ccommand || !strlen(ccommand) || is_just_ws(ccommand)) { | 489 | if (!ccommand || !strlen(ccommand) || is_just_ws(ccommand)) { |
| @@ -682,57 +702,6 @@ static int trim_plugins(char **plugins) | |||
| 682 | return len; | 702 | return len; |
| 683 | } | 703 | } |
| 684 | 704 | ||
| 685 | static void event_filter_callback(gboolean accept, | ||
| 686 | gboolean all_events, | ||
| 687 | gchar **systems, | ||
| 688 | gint *events, | ||
| 689 | gpointer data) | ||
| 690 | { | ||
| 691 | struct trace_capture *cap = data; | ||
| 692 | int nr_sys, nr_events; | ||
| 693 | int i; | ||
| 694 | |||
| 695 | if (!accept) | ||
| 696 | return; | ||
| 697 | |||
| 698 | clear_capture_events(cap); | ||
| 699 | |||
| 700 | if (all_events) { | ||
| 701 | cap->info->cap_all_events = TRUE; | ||
| 702 | return; | ||
| 703 | } | ||
| 704 | |||
| 705 | if (systems) { | ||
| 706 | for (nr_sys = 0; systems[nr_sys]; nr_sys++) | ||
| 707 | ; | ||
| 708 | cap->info->cap_systems = malloc_or_die(sizeof(*cap->info->cap_systems) * | ||
| 709 | (nr_sys + 1)); | ||
| 710 | for (i = 0; i < nr_sys; i++) | ||
| 711 | cap->info->cap_systems[i] = strdup(systems[i]); | ||
| 712 | cap->info->cap_systems[i] = NULL; | ||
| 713 | } | ||
| 714 | |||
| 715 | if (events) { | ||
| 716 | for (nr_events = 0; events[nr_events] >= 0; nr_events++) | ||
| 717 | ; | ||
| 718 | cap->info->cap_events = malloc_or_die(sizeof(*cap->info->cap_events) * | ||
| 719 | (nr_events + 1)); | ||
| 720 | for (i = 0; i < nr_events; i++) | ||
| 721 | cap->info->cap_events[i] = events[i]; | ||
| 722 | cap->info->cap_events[i] = -1; | ||
| 723 | } | ||
| 724 | } | ||
| 725 | |||
| 726 | static void event_button_clicked(GtkWidget *widget, gpointer data) | ||
| 727 | { | ||
| 728 | struct trace_capture *cap = data; | ||
| 729 | struct pevent *pevent = cap->pevent; | ||
| 730 | |||
| 731 | trace_filter_pevent_dialog(pevent, cap->info->cap_all_events, | ||
| 732 | cap->info->cap_systems, cap->info->cap_events, | ||
| 733 | event_filter_callback, cap); | ||
| 734 | } | ||
| 735 | |||
| 736 | static void | 705 | static void |
| 737 | file_clicked (GtkWidget *widget, gpointer data) | 706 | file_clicked (GtkWidget *widget, gpointer data) |
| 738 | { | 707 | { |
| @@ -788,7 +757,7 @@ static void execute_button_clicked(GtkWidget *widget, gpointer data) | |||
| 788 | cap->stop_dialog = dialog; | 757 | cap->stop_dialog = dialog; |
| 789 | 758 | ||
| 790 | label = gtk_label_new("Hit Stop to end execution"); | 759 | label = gtk_label_new("Hit Stop to end execution"); |
| 791 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); | 760 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, FALSE, 0); |
| 792 | gtk_widget_show(label); | 761 | gtk_widget_show(label); |
| 793 | 762 | ||
| 794 | gtk_signal_connect(GTK_OBJECT (dialog), "delete_event", | 763 | gtk_signal_connect(GTK_OBJECT (dialog), "delete_event", |
| @@ -925,8 +894,15 @@ static void load_settings_clicked(GtkWidget *widget, gpointer data) | |||
| 925 | 894 | ||
| 926 | do { | 895 | do { |
| 927 | name = tracecmd_xml_node_type(syschild); | 896 | name = tracecmd_xml_node_type(syschild); |
| 928 | if (strcmp(name, "Events") == 0) | 897 | if (strcmp(name, "Events") == 0) { |
| 929 | load_cap_events(cap, handle, syschild); | 898 | load_cap_events(cap, handle, syschild); |
| 899 | trace_update_event_view(cap->event_view, | ||
| 900 | cap->pevent, | ||
| 901 | NULL, | ||
| 902 | info->cap_all_events, | ||
| 903 | info->cap_systems, | ||
| 904 | info->cap_events); | ||
| 905 | } | ||
| 930 | 906 | ||
| 931 | else if (strcmp(name, "Plugin") == 0) { | 907 | else if (strcmp(name, "Plugin") == 0) { |
| 932 | plugin = tracecmd_xml_node_value(handle, syschild); | 908 | plugin = tracecmd_xml_node_value(handle, syschild); |
| @@ -1006,6 +982,8 @@ static void save_settings_clicked(GtkWidget *widget, gpointer data) | |||
| 1006 | 982 | ||
| 1007 | g_free(filename); | 983 | g_free(filename); |
| 1008 | 984 | ||
| 985 | update_events(cap); | ||
| 986 | |||
| 1009 | tracecmd_xml_start_system(handle, "CaptureSettings"); | 987 | tracecmd_xml_start_system(handle, "CaptureSettings"); |
| 1010 | 988 | ||
| 1011 | tracecmd_xml_start_sub_system(handle, "Events"); | 989 | tracecmd_xml_start_sub_system(handle, "Events"); |
| @@ -1060,15 +1038,37 @@ static GtkTreeModel *create_plugin_combo_model(gpointer data) | |||
| 1060 | return GTK_TREE_MODEL(list); | 1038 | return GTK_TREE_MODEL(list); |
| 1061 | } | 1039 | } |
| 1062 | 1040 | ||
| 1041 | /* | ||
| 1042 | * Trace Capture Dialog Window | ||
| 1043 | * | ||
| 1044 | * +--------------------------------------------------------------------+ | ||
| 1045 | * | Dialog Window | | ||
| 1046 | * | +-------------------------------+-------------------------------+ | | ||
| 1047 | * | | Paned Window | +---------------------------+ | | | ||
| 1048 | * | | +---------------------------+ | | Scroll window | | | | ||
| 1049 | * | | | Hbox | | | +-----------------------+ | | | | ||
| 1050 | * | | | Label Plugin Combo | | | | Event Tree | | | | | ||
| 1051 | * | | +---------------------------+ | | | | | | | | ||
| 1052 | * | | | | | | | | | | ||
| 1053 | * | | | | +-----------------------+ | | | | ||
| 1054 | * | | | +---------------------------+ | | | ||
| 1055 | * | +-------------------------------+-------------------------------+ | | ||
| 1056 | * +--------------------------------------------------------------------+ | ||
| 1057 | */ | ||
| 1063 | static void tracing_dialog(struct shark_info *info, const char *tracing) | 1058 | static void tracing_dialog(struct shark_info *info, const char *tracing) |
| 1064 | { | 1059 | { |
| 1065 | struct pevent *pevent; | 1060 | struct pevent *pevent; |
| 1066 | GtkWidget *dialog; | 1061 | GtkWidget *dialog; |
| 1062 | GtkWidget *vbox; | ||
| 1063 | GtkWidget *vbox2; | ||
| 1067 | GtkWidget *button; | 1064 | GtkWidget *button; |
| 1068 | GtkWidget *hbox; | 1065 | GtkWidget *hbox; |
| 1069 | GtkWidget *combo; | 1066 | GtkWidget *combo; |
| 1070 | GtkWidget *label; | 1067 | GtkWidget *label; |
| 1071 | GtkWidget *entry; | 1068 | GtkWidget *entry; |
| 1069 | GtkWidget *hpaned; | ||
| 1070 | GtkWidget *scrollwin; | ||
| 1071 | GtkWidget *event_tree; | ||
| 1072 | char **plugins; | 1072 | char **plugins; |
| 1073 | int nr_plugins; | 1073 | int nr_plugins; |
| 1074 | struct trace_capture cap; | 1074 | struct trace_capture cap; |
| @@ -1109,19 +1109,46 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1109 | 1109 | ||
| 1110 | cap.main_dialog = dialog; | 1110 | cap.main_dialog = dialog; |
| 1111 | 1111 | ||
| 1112 | /* --- Top Level Hpaned --- */ | ||
| 1113 | |||
| 1114 | hpaned = gtk_hpaned_new(); | ||
| 1115 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hpaned, TRUE, TRUE, 0); | ||
| 1116 | gtk_widget_show(hpaned); | ||
| 1117 | |||
| 1118 | /* It is possible that no pevents exist. */ | ||
| 1112 | if (pevent) { | 1119 | if (pevent) { |
| 1113 | button = gtk_button_new_with_label("Select Events"); | 1120 | scrollwin = gtk_scrolled_window_new(NULL, NULL); |
| 1114 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), | 1121 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), |
| 1115 | button, TRUE, TRUE, 0); | 1122 | GTK_POLICY_AUTOMATIC, |
| 1116 | gtk_widget_show(button); | 1123 | GTK_POLICY_AUTOMATIC); |
| 1117 | 1124 | ||
| 1118 | g_signal_connect (button, "clicked", | 1125 | gtk_paned_add2(GTK_PANED(hpaned), scrollwin); |
| 1119 | G_CALLBACK (event_button_clicked), | 1126 | gtk_widget_show(scrollwin); |
| 1120 | (gpointer)&cap); | 1127 | |
| 1128 | event_tree = trace_create_event_list_view(pevent, NULL, | ||
| 1129 | cap.info->cap_all_events, | ||
| 1130 | cap.info->cap_systems, | ||
| 1131 | cap.info->cap_events); | ||
| 1132 | |||
| 1133 | gtk_container_add(GTK_CONTAINER(scrollwin), event_tree); | ||
| 1134 | gtk_widget_show(event_tree); | ||
| 1135 | |||
| 1136 | cap.event_view = event_tree; | ||
| 1137 | |||
| 1138 | } else { | ||
| 1139 | /* No events */ | ||
| 1140 | label = gtk_label_new("No events enabled on system"); | ||
| 1141 | gtk_paned_add2(GTK_PANED(hpaned), label); | ||
| 1142 | gtk_widget_show(label); | ||
| 1143 | cap.event_view = NULL; | ||
| 1121 | } | 1144 | } |
| 1122 | 1145 | ||
| 1146 | vbox = gtk_vbox_new(TRUE, 0); | ||
| 1147 | gtk_paned_add1(GTK_PANED(hpaned), vbox); | ||
| 1148 | gtk_widget_show(vbox); | ||
| 1149 | |||
| 1123 | hbox = gtk_hbox_new(FALSE, 0); | 1150 | hbox = gtk_hbox_new(FALSE, 0); |
| 1124 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 0); | 1151 | gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
| 1125 | gtk_widget_show(hbox); | 1152 | gtk_widget_show(hbox); |
| 1126 | 1153 | ||
| 1127 | combo = trace_create_combo_box(hbox, "Plugin: ", create_plugin_combo_model, plugins); | 1154 | combo = trace_create_combo_box(hbox, "Plugin: ", create_plugin_combo_model, plugins); |
| @@ -1130,12 +1157,16 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1130 | if (cap.info->cap_plugin) | 1157 | if (cap.info->cap_plugin) |
| 1131 | set_plugin(&cap); | 1158 | set_plugin(&cap); |
| 1132 | 1159 | ||
| 1160 | vbox2 = gtk_vbox_new(FALSE, 0); | ||
| 1161 | gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0); | ||
| 1162 | gtk_widget_show(vbox2); | ||
| 1163 | |||
| 1133 | label = gtk_label_new("Command:"); | 1164 | label = gtk_label_new("Command:"); |
| 1134 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); | 1165 | gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); |
| 1135 | gtk_widget_show(label); | 1166 | gtk_widget_show(label); |
| 1136 | 1167 | ||
| 1137 | entry = gtk_entry_new(); | 1168 | entry = gtk_entry_new(); |
| 1138 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), entry, TRUE, TRUE, 0); | 1169 | gtk_box_pack_start(GTK_BOX(vbox2), entry, FALSE, FALSE, 0); |
| 1139 | gtk_widget_show(entry); | 1170 | gtk_widget_show(entry); |
| 1140 | 1171 | ||
| 1141 | cap.command_entry = entry; | 1172 | cap.command_entry = entry; |
| @@ -1144,7 +1175,7 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1144 | gtk_entry_set_text(GTK_ENTRY(entry), cap.info->cap_command); | 1175 | gtk_entry_set_text(GTK_ENTRY(entry), cap.info->cap_command); |
| 1145 | 1176 | ||
| 1146 | hbox = gtk_hbox_new(FALSE, 0); | 1177 | hbox = gtk_hbox_new(FALSE, 0); |
| 1147 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 0); | 1178 | gtk_box_pack_start(GTK_BOX(vbox2), hbox, TRUE, FALSE, 0); |
| 1148 | gtk_widget_show(hbox); | 1179 | gtk_widget_show(hbox); |
| 1149 | 1180 | ||
| 1150 | button = gtk_button_new_with_label("Save file: "); | 1181 | button = gtk_button_new_with_label("Save file: "); |
| @@ -1167,8 +1198,9 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1167 | gtk_entry_set_text(GTK_ENTRY(entry), file); | 1198 | gtk_entry_set_text(GTK_ENTRY(entry), file); |
| 1168 | cap.file_entry = entry; | 1199 | cap.file_entry = entry; |
| 1169 | 1200 | ||
| 1201 | |||
| 1170 | button = gtk_button_new_with_label("Execute"); | 1202 | button = gtk_button_new_with_label("Execute"); |
| 1171 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), button, TRUE, TRUE, 0); | 1203 | gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, FALSE, 0); |
| 1172 | gtk_widget_show(button); | 1204 | gtk_widget_show(button); |
| 1173 | 1205 | ||
| 1174 | g_signal_connect (button, "clicked", | 1206 | g_signal_connect (button, "clicked", |
| @@ -1176,8 +1208,12 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1176 | (gpointer)&cap); | 1208 | (gpointer)&cap); |
| 1177 | 1209 | ||
| 1178 | 1210 | ||
| 1211 | vbox2 = gtk_vbox_new(FALSE, 0); | ||
| 1212 | gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0); | ||
| 1213 | gtk_widget_show(vbox2); | ||
| 1214 | |||
| 1179 | button = gtk_button_new_with_label("Load Settings"); | 1215 | button = gtk_button_new_with_label("Load Settings"); |
| 1180 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), button, TRUE, TRUE, 0); | 1216 | gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, FALSE, 0); |
| 1181 | gtk_widget_show(button); | 1217 | gtk_widget_show(button); |
| 1182 | 1218 | ||
| 1183 | g_signal_connect (button, "clicked", | 1219 | g_signal_connect (button, "clicked", |
| @@ -1186,13 +1222,16 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1186 | 1222 | ||
| 1187 | 1223 | ||
| 1188 | button = gtk_button_new_with_label("Save Settings"); | 1224 | button = gtk_button_new_with_label("Save Settings"); |
| 1189 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), button, TRUE, TRUE, 0); | 1225 | gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, FALSE, 0); |
| 1190 | gtk_widget_show(button); | 1226 | gtk_widget_show(button); |
| 1191 | 1227 | ||
| 1192 | g_signal_connect (button, "clicked", | 1228 | g_signal_connect (button, "clicked", |
| 1193 | G_CALLBACK (save_settings_clicked), | 1229 | G_CALLBACK (save_settings_clicked), |
| 1194 | (gpointer)&cap); | 1230 | (gpointer)&cap); |
| 1195 | 1231 | ||
| 1232 | gtk_widget_set_size_request(GTK_WIDGET(dialog), | ||
| 1233 | DIALOG_WIDTH, DIALOG_HEIGHT); | ||
| 1234 | |||
| 1196 | gtk_widget_show(dialog); | 1235 | gtk_widget_show(dialog); |
| 1197 | gtk_dialog_run(GTK_DIALOG(dialog)); | 1236 | gtk_dialog_run(GTK_DIALOG(dialog)); |
| 1198 | 1237 | ||
| @@ -1209,6 +1248,8 @@ static void tracing_dialog(struct shark_info *info, const char *tracing) | |||
| 1209 | else | 1248 | else |
| 1210 | cap.info->cap_command = NULL; | 1249 | cap.info->cap_command = NULL; |
| 1211 | 1250 | ||
| 1251 | update_events(&cap); | ||
| 1252 | |||
| 1212 | gtk_widget_destroy(dialog); | 1253 | gtk_widget_destroy(dialog); |
| 1213 | 1254 | ||
| 1214 | end_capture(&cap); | 1255 | end_capture(&cap); |
