aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-12-29 21:16:20 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-12-29 21:16:20 -0500
commit53336fb4d2d41f865557bb5ff0bc686db5e31793 (patch)
treecc101d284e7862bbb0cb6663640a088e57bd31b3
parentaabc0ac51066e9abb995ed13878565b17ee36f45 (diff)
trace-view: Make CPU filter modify all cpus with other toggles
When clicking the All CPUs toggle, it will now select all the individual CPU toggle buttons. When disabling an individual CPU toggle, it will also disable the All CPUs toggle. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--trace-filter.c46
1 files changed, 37 insertions, 9 deletions
diff --git a/trace-filter.c b/trace-filter.c
index 62a17df..3c1e23b 100644
--- a/trace-filter.c
+++ b/trace-filter.c
@@ -191,8 +191,17 @@ void trace_filter_event_dialog(void *trace_tree)
191struct cpu_filter_helper { 191struct cpu_filter_helper {
192 gboolean allcpus; 192 gboolean allcpus;
193 guint64 *cpu_mask; 193 guint64 *cpu_mask;
194 GtkWidget **buttons;
195 int cpus;
194}; 196};
195 197
198static void destroy_cpu_helper(struct cpu_filter_helper *cpu_helper)
199{
200 g_free(cpu_helper->cpu_mask);
201 g_free(cpu_helper->buttons);
202 g_free(cpu_helper);
203}
204
196/* Callback for the clicked signal of the CPUS filter button */ 205/* Callback for the clicked signal of the CPUS filter button */
197static void 206static void
198cpu_dialog_response (gpointer data, gint response_id) 207cpu_dialog_response (gpointer data, gint response_id)
@@ -201,7 +210,7 @@ cpu_dialog_response (gpointer data, gint response_id)
201 struct cpu_filter_helper *cpu_helper = helper->data; 210 struct cpu_filter_helper *cpu_helper = helper->data;
202 GtkTreeView *view = GTK_TREE_VIEW(helper->trace_tree); 211 GtkTreeView *view = GTK_TREE_VIEW(helper->trace_tree);
203 TraceViewStore *store; 212 TraceViewStore *store;
204 gint cpus, cpu; 213 gint cpu;
205 214
206 store = TRACE_VIEW_STORE(gtk_tree_view_get_model(view)); 215 store = TRACE_VIEW_STORE(gtk_tree_view_get_model(view));
207 216
@@ -216,9 +225,8 @@ cpu_dialog_response (gpointer data, gint response_id)
216 g_object_unref(store); 225 g_object_unref(store);
217 break; 226 break;
218 } 227 }
219 cpus = trace_view_store_get_cpus(store);
220 228
221 for (cpu = 0; cpu < cpus; cpu++) { 229 for (cpu = 0; cpu < cpu_helper->cpus; cpu++) {
222 if (cpu_mask_isset(cpu_helper->cpu_mask, cpu)) 230 if (cpu_mask_isset(cpu_helper->cpu_mask, cpu))
223 trace_view_store_set_cpu(store, cpu); 231 trace_view_store_set_cpu(store, cpu);
224 else 232 else
@@ -236,8 +244,7 @@ cpu_dialog_response (gpointer data, gint response_id)
236 244
237 gtk_widget_destroy(GTK_WIDGET(helper->dialog)); 245 gtk_widget_destroy(GTK_WIDGET(helper->dialog));
238 246
239 g_free(cpu_helper->cpu_mask); 247 destroy_cpu_helper(helper->data);
240 g_free(cpu_helper);
241 g_free(helper); 248 g_free(helper);
242} 249}
243 250
@@ -255,16 +262,29 @@ void cpu_toggle(gpointer data, GtkWidget *widget)
255 262
256 if (strcmp(label, CPU_ALL_CPUS_STR) == 0) { 263 if (strcmp(label, CPU_ALL_CPUS_STR) == 0) {
257 cpu_helper->allcpus = active; 264 cpu_helper->allcpus = active;
265 if (active) {
266 /* enable all toggles */
267 for (cpu = 0; cpu < cpu_helper->cpus; cpu++)
268 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpu_helper->buttons[cpu]),
269 TRUE);
270 }
258 return; 271 return;
259 } 272 }
260 273
261 /* Get the CPU # from the label. Pass "CPU " */ 274 /* Get the CPU # from the label. Pass "CPU " */
262 cpu = atoi(label + 4); 275 cpu = atoi(label + 4);
263 if (active) 276 if (active) {
264 cpu_mask_set(cpu_helper->cpu_mask, cpu); 277 cpu_mask_set(cpu_helper->cpu_mask, cpu);
265 else 278 return;
266 cpu_mask_clear(cpu_helper->cpu_mask, cpu); 279 }
280
281 cpu_mask_clear(cpu_helper->cpu_mask, cpu);
267 282
283 if (!cpu_helper->allcpus)
284 return;
285
286 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cpu_helper->buttons[cpu_helper->cpus]),
287 FALSE);
268} 288}
269 289
270void trace_filter_cpu_dialog(void *trace_tree) 290void trace_filter_cpu_dialog(void *trace_tree)
@@ -312,6 +332,10 @@ void trace_filter_cpu_dialog(void *trace_tree)
312 helper->dialog = dialog; 332 helper->dialog = dialog;
313 helper->trace_tree = tree_view; 333 helper->trace_tree = tree_view;
314 334
335 cpu_helper->cpus = cpus;
336 cpu_helper->buttons = g_new0(GtkWidget *, cpus + 1);
337 g_assert(cpu_helper->buttons);
338
315 g_signal_connect_swapped (dialog, "response", 339 g_signal_connect_swapped (dialog, "response",
316 G_CALLBACK (cpu_dialog_response), 340 G_CALLBACK (cpu_dialog_response),
317 (gpointer) helper); 341 (gpointer) helper);
@@ -334,9 +358,12 @@ void trace_filter_cpu_dialog(void *trace_tree)
334 gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, FALSE, 0); 358 gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, FALSE, 0);
335 gtk_widget_show(vbox); 359 gtk_widget_show(vbox);
336 360
337 check = gtk_check_button_new_with_label("All CPUs"); 361 check = gtk_check_button_new_with_label(CPU_ALL_CPUS_STR);
338 gtk_box_pack_start(GTK_BOX(vbox), check, TRUE, TRUE, 0); 362 gtk_box_pack_start(GTK_BOX(vbox), check, TRUE, TRUE, 0);
339 363
364 /* The last button will be the all CPUs button */
365 cpu_helper->buttons[cpus] = check;
366
340 allset = trace_view_store_get_all_cpus(store); 367 allset = trace_view_store_get_all_cpus(store);
341 if (allset) 368 if (allset)
342 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE); 369 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
@@ -354,6 +381,7 @@ void trace_filter_cpu_dialog(void *trace_tree)
354 for (cpu = 0; cpu < cpus; cpu++) { 381 for (cpu = 0; cpu < cpus; cpu++) {
355 g_snprintf(counter, 100, "CPU %d", cpu); 382 g_snprintf(counter, 100, "CPU %d", cpu);
356 check = gtk_check_button_new_with_label(counter); 383 check = gtk_check_button_new_with_label(counter);
384 cpu_helper->buttons[cpu] = check;
357 gtk_box_pack_start(GTK_BOX(vbox), check, TRUE, FALSE, 0); 385 gtk_box_pack_start(GTK_BOX(vbox), check, TRUE, FALSE, 0);
358 if (allset || trace_view_store_cpu_isset(store, cpu)) { 386 if (allset || trace_view_store_cpu_isset(store, cpu)) {
359 cpu_mask_set(cpu_helper->cpu_mask, cpu); 387 cpu_mask_set(cpu_helper->cpu_mask, cpu);