X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=gfio.c;h=d1cf346b0ede1bd80ac472999d645305a94e9cc8;hp=544d96aae03763ff89e3ba78459d47a854ad24d6;hb=adbf6125ea51ff8e3a892240e3e7024f3c3df127;hpb=753e9e642f1cf7aa6e46a31aeebc65da26c8bf2e diff --git a/gfio.c b/gfio.c index 544d96aa..d1cf346b 100644 --- a/gfio.c +++ b/gfio.c @@ -1,7 +1,7 @@ /* * gfio - gui front end for fio - the flexible io tester * - * Copyright (C) 2012 Stephen M. Cameron + * Copyright (C) 2012 Stephen M. Cameron * Copyright (C) 2012 Jens Axboe * * The license below covers all files distributed with fio unless otherwise @@ -41,6 +41,7 @@ static int gfio_server_running; static unsigned int gfio_graph_limit = 100; GdkColor gfio_color_white; +GdkColor gfio_color_lightyellow; const char *gfio_graph_font = GRAPH_DEFAULT_FONT; typedef void (*clickfunction)(GtkWidget *widget, gpointer data); @@ -84,8 +85,10 @@ static void setup_iops_graph(struct gfio_graphs *gg) graph_x_title(g, "Time (secs)"); 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); + gg->trim_iops = graph_add_label(g, "Trim IOPS"); + graph_set_color(g, gg->read_iops, GFIO_READ_R, GFIO_READ_G, GFIO_READ_B); + graph_set_color(g, gg->write_iops, GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B); + graph_set_color(g, gg->trim_iops, GFIO_IOPS_R, GFIO_IOPS_G, GFIO_IOPS_B); 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); @@ -101,8 +104,10 @@ static void setup_bandwidth_graph(struct gfio_graphs *gg) graph_x_title(g, "Time (secs)"); 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); + gg->trim_bw = graph_add_label(g, "Trim Bandwidth"); + graph_set_color(g, gg->read_bw, GFIO_READ_R, GFIO_READ_G, GFIO_READ_B); + graph_set_color(g, gg->write_bw, GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B); + graph_set_color(g, gg->trim_bw, GFIO_IOPS_R, GFIO_IOPS_G, GFIO_IOPS_B); 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); @@ -293,7 +298,7 @@ static void gfio_ui_setup_log(struct gui *ui) GtkListStore *model; GtkWidget *tree_view; - model = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING); + model = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); gtk_widget_set_can_focus(tree_view, FALSE); @@ -315,11 +320,13 @@ static void gfio_ui_setup_log(struct gui *ui) static gint on_config_drawing_area(GtkWidget *w, GdkEventConfigure *event, gpointer data) { + guint width = gtk_widget_get_allocated_width(w); + guint height = gtk_widget_get_allocated_height(w); struct gfio_graphs *g = data; - graph_set_size(g->iops_graph, w->allocation.width / 2.0, w->allocation.height); - graph_set_position(g->iops_graph, w->allocation.width / 2.0, 0.0); - graph_set_size(g->bandwidth_graph, w->allocation.width / 2.0, w->allocation.height); + graph_set_size(g->iops_graph, width / 2.0, height); + graph_set_position(g->iops_graph, width / 2.0, 0.0); + graph_set_size(g->bandwidth_graph, width / 2.0, height); graph_set_position(g->bandwidth_graph, 0, 0); return TRUE; } @@ -355,7 +362,7 @@ static int on_expose_drawing_area(GtkWidget *w, GdkEvent *event, gpointer p) struct gfio_graphs *g = p; cairo_t *cr; - cr = gdk_cairo_create(w->window); + cr = gdk_cairo_create(gtk_widget_get_window(w)); if (graph_has_tooltips(g->iops_graph) || graph_has_tooltips(g->bandwidth_graph)) { @@ -404,11 +411,11 @@ static void ge_widget_destroy(GtkWidget *w, gpointer data) static void gfio_quit(struct gui *ui) { - gtk_main_quit(); + gtk_main_quit(); } static void quit_clicked(__attribute__((unused)) GtkWidget *widget, - __attribute__((unused)) gpointer data) + gpointer data) { struct gui *ui = (struct gui *) data; @@ -469,7 +476,7 @@ static void gfio_start_server(struct gui *ui) } static void start_job_clicked(__attribute__((unused)) GtkWidget *widget, - gpointer data) + gpointer data) { struct gui_entry *ge = data; struct gfio_client *gc = ge->client; @@ -499,7 +506,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); @@ -538,8 +545,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); @@ -568,10 +574,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); @@ -592,8 +598,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); @@ -605,7 +611,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)) @@ -875,7 +881,7 @@ static int do_file_open_with_tab(struct gui *ui, const gchar *uri) if (get_connection_details(ge)) { if (ge_is_new) gtk_widget_destroy(ge->vbox); - + return 1; } @@ -969,7 +975,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; @@ -993,12 +999,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); @@ -1015,7 +1021,7 @@ static void connect_job_entry(GtkWidget *w, gpointer data) { struct gui *ui = (struct gui *) data; struct gui_entry *ge; - + ge = get_ge_from_cur_tab(ui); if (ge) connect_clicked(w, ge); @@ -1085,7 +1091,7 @@ static void ge_update_settings_fn(gpointer key, gpointer value, gpointer data) __update_graph_settings(&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); + g_signal_emit_by_name(G_OBJECT(ge->graphs.drawing_area), GFIO_DRAW_EVENT, GTK_WIDGET(ge->graphs.drawing_area), ev, &ge->graphs); gdk_event_free(ev); } @@ -1097,7 +1103,7 @@ static void update_graph_limits(void) __update_graph_settings(&ui->graphs); 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); + g_signal_emit_by_name(G_OBJECT(ui->graphs.drawing_area), GFIO_DRAW_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); @@ -1118,7 +1124,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); @@ -1150,7 +1157,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); @@ -1338,10 +1346,24 @@ static void combo_entry_destroy(GtkWidget *widget, gpointer data) multitext_free(&ge->eta.iodepth); } +static void fill_color_from_rgb(GdkColor *c, gfloat r, gfloat g, gfloat b) +{ + gint R, G, B; + gchar tmp[32]; + + memset(c, 0, sizeof(*c)); + R = r * 255; + G = g * 255; + B = b * 255; + sprintf(tmp, "#%02x%02x%02x", R, G, B); + gdk_color_parse(tmp, c); +} + static GtkWidget *new_client_page(struct gui_entry *ge) { GtkWidget *main_vbox, *probe, *probe_frame, *probe_box; GtkWidget *scrolled_window, *bottom_align, *top_align, *top_vbox; + GdkColor color; main_vbox = gtk_vbox_new(FALSE, 3); @@ -1381,6 +1403,20 @@ static GtkWidget *new_client_page(struct gui_entry *ge) ge->eta.read_iops = new_info_entry_in_frame(probe_box, "IOPS"); ge->eta.write_bw = new_info_entry_in_frame(probe_box, "Write BW"); ge->eta.write_iops = new_info_entry_in_frame(probe_box, "IOPS"); + ge->eta.trim_bw = new_info_entry_in_frame(probe_box, "Trim BW"); + ge->eta.trim_iops = new_info_entry_in_frame(probe_box, "IOPS"); + + fill_color_from_rgb(&color, GFIO_READ_R, GFIO_READ_G, GFIO_READ_B); + gtk_widget_modify_text(ge->eta.read_bw, GTK_STATE_NORMAL, &color); + gtk_widget_modify_text(ge->eta.read_iops, GTK_STATE_NORMAL, &color); + + fill_color_from_rgb(&color, GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B); + gtk_widget_modify_text(ge->eta.write_bw, GTK_STATE_NORMAL, &color); + gtk_widget_modify_text(ge->eta.write_iops, GTK_STATE_NORMAL, &color); + + fill_color_from_rgb(&color, GFIO_IOPS_R, GFIO_IOPS_G, GFIO_IOPS_B); + gtk_widget_modify_text(ge->eta.trim_bw, GTK_STATE_NORMAL, &color); + gtk_widget_modify_text(ge->eta.trim_iops, GTK_STATE_NORMAL, &color); /* * Only add this if we have a commit rate @@ -1402,8 +1438,8 @@ static GtkWidget *new_client_page(struct gui_entry *ge) ge->graphs.drawing_area = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(ge->graphs.drawing_area), DRAWING_AREA_XDIM, DRAWING_AREA_YDIM); - gtk_widget_modify_bg(ge->graphs.drawing_area, GTK_STATE_NORMAL, &gfio_color_white); - g_signal_connect(G_OBJECT(ge->graphs.drawing_area), "expose_event", + gtk_widget_modify_bg(ge->graphs.drawing_area, GTK_STATE_NORMAL, &gfio_color_lightyellow); + g_signal_connect(G_OBJECT(ge->graphs.drawing_area), GFIO_DRAW_EVENT, G_CALLBACK(on_expose_drawing_area), &ge->graphs); g_signal_connect(G_OBJECT(ge->graphs.drawing_area), "configure_event", G_CALLBACK(on_config_drawing_area), &ge->graphs); @@ -1417,7 +1453,7 @@ static GtkWidget *new_client_page(struct gui_entry *ge) setup_graphs(&ge->graphs); /* - * Set up alignments for widgets at the bottom of ui, + * Set up alignments for widgets at the bottom of ui, * align bottom left, expand horizontally but not vertically */ bottom_align = gtk_alignment_new(0, 1, 1, 0); @@ -1467,6 +1503,9 @@ static GtkWidget *new_main_page(struct gui *ui) ui->eta.read_iops = new_info_entry_in_frame(probe_box, "IOPS"); ui->eta.write_bw = new_info_entry_in_frame(probe_box, "Write BW"); ui->eta.write_iops = new_info_entry_in_frame(probe_box, "IOPS"); + ui->eta.trim_bw = new_info_entry_in_frame(probe_box, "Trim BW"); + ui->eta.trim_iops = new_info_entry_in_frame(probe_box, "IOPS"); + /* * Only add this if we have a commit rate @@ -1488,8 +1527,8 @@ static GtkWidget *new_main_page(struct gui *ui) ui->graphs.drawing_area = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(ui->graphs.drawing_area), DRAWING_AREA_XDIM, DRAWING_AREA_YDIM); - gtk_widget_modify_bg(ui->graphs.drawing_area, GTK_STATE_NORMAL, &gfio_color_white); - g_signal_connect(G_OBJECT(ui->graphs.drawing_area), "expose_event", + gtk_widget_modify_bg(ui->graphs.drawing_area, GTK_STATE_NORMAL, &gfio_color_lightyellow); + g_signal_connect(G_OBJECT(ui->graphs.drawing_area), GFIO_DRAW_EVENT, G_CALLBACK(on_expose_drawing_area), &ui->graphs); g_signal_connect(G_OBJECT(ui->graphs.drawing_area), "configure_event", G_CALLBACK(on_config_drawing_area), &ui->graphs); @@ -1504,7 +1543,7 @@ static GtkWidget *new_main_page(struct gui *ui) setup_graphs(&ui->graphs); /* - * Set up alignments for widgets at the bottom of ui, + * Set up alignments for widgets at the bottom of ui, * align bottom left, expand horizontally but not vertically */ bottom_align = gtk_alignment_new(0, 1, 1, 0); @@ -1666,8 +1705,9 @@ static void init_ui(int *argc, char **argv[], struct gui *ui) settings = gtk_settings_get_default(); gtk_settings_set_long_property(settings, "gtk_tooltip_timeout", 10, "gfio setting"); g_type_init(); + gdk_color_parse("#ffffee", &gfio_color_lightyellow); gdk_color_parse("white", &gfio_color_white); - + ui->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(ui->window), "fio"); gtk_window_set_default_size(GTK_WINDOW(ui->window), 1024, 768);