X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=gfio.c;h=1ee2745c1f980ac62789f255ae1d6cb43c130ac6;hp=3a0aa8f447a46a1f1b3e313199b87f96f4698fe8;hb=f762cef937f69d6a23127baf47f22e8ffaea4c11;hpb=01a947f067b1a03add33e645ece73ac19d8257dd diff --git a/gfio.c b/gfio.c index 3a0aa8f4..1ee2745c 100644 --- a/gfio.c +++ b/gfio.c @@ -41,7 +41,7 @@ static int gfio_server_running; static unsigned int gfio_graph_limit = 100; GdkColor gfio_color_white; -const char *gfio_graph_font; +const char *gfio_graph_font = GRAPH_DEFAULT_FONT; typedef void (*clickfunction)(GtkWidget *widget, gpointer data); @@ -75,45 +75,45 @@ static struct button_spec { }, }; -static struct graph *setup_iops_graph(void) +static void setup_iops_graph(struct gfio_graphs *gg) { struct graph *g; g = graph_new(DRAWING_AREA_XDIM / 2.0, DRAWING_AREA_YDIM, gfio_graph_font); graph_title(g, "IOPS (IOs/sec)"); graph_x_title(g, "Time (secs)"); - graph_add_label(g, "Read IOPS"); - graph_add_label(g, "Write IOPS"); - graph_set_color(g, "Read IOPS", 0.13, 0.54, 0.13); - graph_set_color(g, "Write IOPS", 1.0, 0.0, 0.0); + gg->read_iops = graph_add_label(g, "Read IOPS"); + gg->write_iops = graph_add_label(g, "Write IOPS"); + graph_set_color(g, gg->read_iops, 0.13, 0.54, 0.13); + graph_set_color(g, gg->write_iops, 1.0, 0.0, 0.0); line_graph_set_data_count_limit(g, gfio_graph_limit); graph_add_extra_space(g, 0.0, 0.0, 0.0, 0.0); graph_set_graph_all_zeroes(g, 0); - return g; + gg->iops_graph = g; } -static struct graph *setup_bandwidth_graph(void) +static void setup_bandwidth_graph(struct gfio_graphs *gg) { struct graph *g; g = graph_new(DRAWING_AREA_XDIM / 2.0, DRAWING_AREA_YDIM, gfio_graph_font); graph_title(g, "Bandwidth (bytes/sec)"); graph_x_title(g, "Time (secs)"); - graph_add_label(g, "Read Bandwidth"); - graph_add_label(g, "Write Bandwidth"); - graph_set_color(g, "Read Bandwidth", 0.13, 0.54, 0.13); - graph_set_color(g, "Write Bandwidth", 1.0, 0.0, 0.0); + gg->read_bw = graph_add_label(g, "Read Bandwidth"); + gg->write_bw = graph_add_label(g, "Write Bandwidth"); + graph_set_color(g, gg->read_bw, 0.13, 0.54, 0.13); + graph_set_color(g, gg->write_bw, 1.0, 0.0, 0.0); graph_set_base_offset(g, 1); line_graph_set_data_count_limit(g, 100); graph_add_extra_space(g, 0.0, 0.0, 0.0, 0.0); graph_set_graph_all_zeroes(g, 0); - return g; + gg->bandwidth_graph = g; } static void setup_graphs(struct gfio_graphs *g) { - g->iops_graph = setup_iops_graph(); - g->bandwidth_graph = setup_bandwidth_graph(); + setup_iops_graph(g); + setup_bandwidth_graph(g); } void clear_ge_ui_info(struct gui_entry *ge) @@ -430,6 +430,18 @@ static int send_job_file(struct gui_entry *ge) struct gfio_client *gc = ge->client; int ret = 0; + /* + * Prune old options, we are expecting the return options + * when the job file is parsed remotely and returned to us. + */ + while (!flist_empty(&gc->o_list)) { + struct gfio_client_options *gco; + + gco = flist_entry(gc->o_list.next, struct gfio_client_options, list); + flist_del(&gco->list); + free(gco); + } + ret = fio_client_send_ini(gc->client, ge->job_file); if (!ret) return 0; @@ -487,7 +499,7 @@ static void hostname_cb(GtkEntry *entry, gpointer data) * or not. Show it if we are a localhost and using network, * or using a socket. */ - ctext = gtk_combo_box_get_active_text(GTK_COMBO_BOX(cw->combo)); + ctext = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(cw->combo)); if (!ctext || !strncmp(ctext, "IPv4", 4) || !strncmp(ctext, "IPv6", 4)) uses_net = 1; g_free(ctext); @@ -526,8 +538,7 @@ static int get_connection_details(struct gui_entry *ge) GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); frame = gtk_frame_new("Hostname / socket name"); - /* gtk_dialog_get_content_area() is 2.14 and newer */ - vbox = GTK_DIALOG(dialog)->vbox; + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); box = gtk_vbox_new(FALSE, 6); @@ -556,10 +567,10 @@ static int get_connection_details(struct gui_entry *ge) hbox = gtk_hbox_new(TRUE, 4); gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); - cw.combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(cw.combo), "IPv4"); - gtk_combo_box_append_text(GTK_COMBO_BOX(cw.combo), "IPv6"); - gtk_combo_box_append_text(GTK_COMBO_BOX(cw.combo), "local socket"); + cw.combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cw.combo), "IPv4"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cw.combo), "IPv6"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cw.combo), "local socket"); gtk_combo_box_set_active(GTK_COMBO_BOX(cw.combo), 0); gtk_container_add(GTK_CONTAINER(hbox), cw.combo); @@ -580,8 +591,8 @@ static int get_connection_details(struct gui_entry *ge) /* * Connect edit signal, so we can show/not-show the auto start button */ - g_signal_connect(GTK_OBJECT(cw.hentry), "changed", G_CALLBACK(hostname_cb), &cw); - g_signal_connect(GTK_OBJECT(cw.combo), "changed", G_CALLBACK(hostname_cb), &cw); + g_signal_connect(G_OBJECT(cw.hentry), "changed", G_CALLBACK(hostname_cb), &cw); + g_signal_connect(G_OBJECT(cw.combo), "changed", G_CALLBACK(hostname_cb), &cw); gtk_widget_show_all(dialog); @@ -593,7 +604,7 @@ static int get_connection_details(struct gui_entry *ge) ge->host = strdup(gtk_entry_get_text(GTK_ENTRY(cw.hentry))); ge->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pentry)); - typeentry = gtk_combo_box_get_active_text(GTK_COMBO_BOX(cw.combo)); + typeentry = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(cw.combo)); if (!typeentry || !strncmp(typeentry, "IPv4", 4)) ge->type = Fio_client_ipv4; else if (!strncmp(typeentry, "IPv6", 4)) @@ -616,14 +627,24 @@ static void gfio_set_client(struct gfio_client *gc, struct fio_client *client) static void gfio_client_added(struct gui_entry *ge, struct fio_client *client) { + struct gfio_client_options *gco; struct gfio_client *gc; - gc = malloc(sizeof(*gc)); - memset(gc, 0, sizeof(*gc)); - options_default_fill(&gc->o); + gc = calloc(1, sizeof(*gc)); + INIT_FLIST_HEAD(&gc->o_list); gc->ge = ge; ge->client = gc; gfio_set_client(gc, client); + + /* + * Just add a default set of options, need to consider how best + * to handle this + */ + gco = calloc(1, sizeof(*gco)); + INIT_FLIST_HEAD(&gco->list); + options_default_fill(&gco->o); + flist_add_tail(&gco->list, &gc->o_list); + gc->o_list_nr++; } static void connect_clicked(GtkWidget *widget, gpointer data) @@ -947,7 +968,7 @@ static void view_log_destroy(GtkWidget *w, gpointer data) { struct gui *ui = (struct gui *) data; - gtk_widget_ref(ui->log_tree); + g_object_ref(G_OBJECT(ui->log_tree)); gtk_container_remove(GTK_CONTAINER(w), ui->log_tree); gtk_widget_destroy(w); ui->log_view = NULL; @@ -971,12 +992,12 @@ void gfio_view_log(struct gui *ui) gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); box = gtk_hbox_new(TRUE, 0); - gtk_box_pack_start_defaults(GTK_BOX(box), ui->log_tree); + gtk_box_pack_start(GTK_BOX(box), ui->log_tree, TRUE, TRUE, 0); g_signal_connect(box, "destroy", G_CALLBACK(view_log_destroy), ui); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), box); vbox = gtk_vbox_new(TRUE, 5); - gtk_box_pack_start_defaults(GTK_BOX(vbox), scroll); + gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(win), vbox); gtk_widget_show_all(win); @@ -1016,7 +1037,7 @@ static void edit_job_entry(GtkWidget *w, gpointer data) ge = get_ge_from_cur_tab(ui); if (ge && ge->client) - gopt_get_options_window(ui->window, &ge->client->o); + gopt_get_options_window(ui->window, ge->client); } static void start_job_entry(GtkWidget *w, gpointer data) @@ -1047,26 +1068,38 @@ static void view_results(GtkWidget *w, gpointer data) gfio_display_end_results(gc); } -static void __update_graph_limits(struct gfio_graphs *g) +static void __update_graph_settings(struct gfio_graphs *g) { line_graph_set_data_count_limit(g->iops_graph, gfio_graph_limit); + graph_set_font(g->iops_graph, gfio_graph_font); line_graph_set_data_count_limit(g->bandwidth_graph, gfio_graph_limit); + graph_set_font(g->bandwidth_graph, gfio_graph_font); } -static void ge_update_lim_fn(gpointer key, gpointer value, gpointer data) +static void ge_update_settings_fn(gpointer key, gpointer value, gpointer data) { struct gui_entry *ge = (struct gui_entry *) value; + GdkEvent *ev; + + __update_graph_settings(&ge->graphs); - __update_graph_limits(&ge->graphs); + ev = gdk_event_new(GDK_EXPOSE); + g_signal_emit_by_name(G_OBJECT(ge->graphs.drawing_area), "expose_event", GTK_WIDGET(ge->graphs.drawing_area), ev, &ge->graphs); + gdk_event_free(ev); } static void update_graph_limits(void) { struct gui *ui = &main_ui; + GdkEvent *ev; - __update_graph_limits(&ui->graphs); + __update_graph_settings(&ui->graphs); - g_hash_table_foreach(ui->ge_hash, ge_update_lim_fn, NULL); + ev = gdk_event_new(GDK_EXPOSE); + g_signal_emit_by_name(G_OBJECT(ui->graphs.drawing_area), "expose_event", GTK_WIDGET(ui->graphs.drawing_area), ev, &ui->graphs); + gdk_event_free(ev); + + g_hash_table_foreach(ui->ge_hash, ge_update_settings_fn, NULL); } static void preferences(GtkWidget *w, gpointer data) @@ -1084,7 +1117,8 @@ static void preferences(GtkWidget *w, gpointer data) NULL); frame = gtk_frame_new("Graphing"); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5); + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); vbox = gtk_vbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(frame), vbox); @@ -1093,7 +1127,7 @@ static void preferences(GtkWidget *w, gpointer data) entry = gtk_label_new("Font face to use for graph labels"); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 5); - font = gtk_font_button_new(); + font = gtk_font_button_new_with_font(gfio_graph_font); gtk_box_pack_start(GTK_BOX(hbox), font, FALSE, FALSE, 5); box = gtk_vbox_new(FALSE, 6); @@ -1116,7 +1150,8 @@ static void preferences(GtkWidget *w, gpointer data) spin_int = create_spinbutton(hbox, 100, 100000, gfio_client_ops.eta_msec); frame = gtk_frame_new("Debug logging"); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5); + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); vbox = gtk_vbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(frame), vbox); @@ -1676,6 +1711,8 @@ int main(int argc, char *argv[], char *envp[]) if (fio_init_options()) return 1; + gopt_init(); + memset(&main_ui, 0, sizeof(main_ui)); main_ui.ge_hash = g_hash_table_new(g_int_hash, g_int_equal); @@ -1686,5 +1723,7 @@ int main(int argc, char *argv[], char *envp[]) gdk_threads_leave(); g_hash_table_destroy(main_ui.ge_hash); + + gopt_exit(); return 0; }