X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=gfio.c;h=068f229e75ba252b5a011fd1e45cabccd2f4d6d7;hp=d0418a4585212939d7a5bee68b227dfceb0fe509;hb=1b42725f06f8906b9b99381da3490484f59df28a;hpb=a217ba7de6e2ea26fbd12db663aaf8a5a9f350a7;ds=sidebyside diff --git a/gfio.c b/gfio.c index d0418a45..068f229e 100644 --- a/gfio.c +++ b/gfio.c @@ -187,70 +187,36 @@ static void gfio_update_thread_status(struct gui_entry *ge, char *status_message static void gfio_update_thread_status_all(char *status_message, double perc); void report_error(GError *error); -static void iops_graph_y_axis_unit_change(struct graph *g, int power_of_ten) -{ - switch (power_of_ten) { - case 9: graph_y_title(g, "Billions of IOs / sec"); - break; - case 6: graph_y_title(g, "Millions of IOs / sec"); - break; - case 3: graph_y_title(g, "Thousands of IOs / sec"); - break; - case 0: - default: graph_y_title(g, "IOs / sec"); - break; - } -} - static struct graph *setup_iops_graph(void) { struct graph *g; g = graph_new(DRAWING_AREA_XDIM / 2.0, DRAWING_AREA_YDIM, gfio_graph_font); - graph_title(g, "IOPS"); + graph_title(g, "IOPS (IOs/sec)"); graph_x_title(g, "Time (secs)"); - graph_y_title(g, "IOs / sec"); 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); line_graph_set_data_count_limit(g, gfio_graph_limit); - graph_y_axis_unit_change_notify(g, iops_graph_y_axis_unit_change); - graph_add_extra_space(g, 0.005, 0.005, 0.03, 0.03); + graph_add_extra_space(g, 0.0, 0.0, 0.0, 0.0); return g; } -static void bandwidth_graph_y_axis_unit_change(struct graph *g, int power_of_ten) -{ - switch (power_of_ten) { - case 9: graph_y_title(g, "Petabytes / sec"); - break; - case 6: graph_y_title(g, "Gigabytes / sec"); - break; - case 3: graph_y_title(g, "Megabytes / sec"); - break; - case 0: - default: graph_y_title(g, "Kilobytes / sec"); - break; - } -} - static struct graph *setup_bandwidth_graph(void) { struct graph *g; g = graph_new(DRAWING_AREA_XDIM / 2.0, DRAWING_AREA_YDIM, gfio_graph_font); - graph_title(g, "Bandwidth"); + graph_title(g, "Bandwidth (bytes/sec)"); graph_x_title(g, "Time (secs)"); - graph_y_title(g, "Kbytes / sec"); 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); + graph_set_base_offset(g, 1); line_graph_set_data_count_limit(g, 100); - graph_y_axis_unit_change_notify(g, bandwidth_graph_y_axis_unit_change); - graph_add_extra_space(g, 0.005, 0.005, 0.03, 0.03); - + graph_add_extra_space(g, 0.0, 0.0, 0.0, 0.0); return g; } @@ -1579,7 +1545,7 @@ static void gfio_update_thread_status_all(char *status_message, double perc) gtk_widget_queue_draw(ui->window); } -static void gfio_quit_op(struct fio_client *client) +static void gfio_quit_op(struct fio_client *client, struct fio_net_cmd *cmd) { struct gfio_client *gc = client->client_data; @@ -1670,8 +1636,13 @@ static void gfio_client_job_start(struct fio_client *client, struct fio_net_cmd gdk_threads_leave(); } +static void gfio_client_iolog(struct fio_client *client, struct cmd_iolog_pdu *pdu) +{ + free(pdu); +} + struct client_ops gfio_client_ops = { - .text_op = gfio_text_op, + .text = gfio_text_op, .disk_util = gfio_disk_util_op, .thread_status = gfio_thread_status_op, .group_stats = gfio_group_stats_op, @@ -1684,14 +1655,53 @@ struct client_ops gfio_client_ops = { .stop = gfio_client_stop, .start = gfio_client_start, .job_start = gfio_client_job_start, + .iolog = gfio_client_iolog, .eta_msec = FIO_CLIENT_DEF_ETA_MSEC, .stay_connected = 1, + .client_type = FIO_CLIENT_TYPE_GUI, }; +/* + * FIXME: need more handling here + */ +static void ge_destroy(struct gui_entry *ge) +{ + struct gfio_client *gc = ge->client; + + if (gc && gc->client) { + if (ge->state >= GE_STATE_CONNECTED) + fio_client_terminate(gc->client); + + fio_put_client(gc->client); + } + + flist_del(&ge->list); + free(ge); +} + +static void ge_widget_destroy(GtkWidget *w, gpointer data) +{ + struct gui_entry *ge = data; + + ge_destroy(ge); +} + +static void gfio_quit(struct gui *ui) +{ + struct gui_entry *ge; + + while (!flist_empty(&ui->list)) { + ge = flist_entry(ui->list.next, struct gui_entry, list); + ge_destroy(ge); + } + + gtk_main_quit(); +} + static void quit_clicked(__attribute__((unused)) GtkWidget *widget, __attribute__((unused)) gpointer data) { - gtk_main_quit(); + gfio_quit(data); } static void *job_thread(void *arg) @@ -2041,25 +2051,6 @@ static struct gui_entry *alloc_new_gui_entry(struct gui *ui) return ge; } -/* - * FIXME: need more handling here - */ -static void ge_destroy(GtkWidget *w, gpointer data) -{ - struct gui_entry *ge = data; - struct gfio_client *gc = ge->client; - - if (gc && gc->client) { - if (ge->state >= GE_STATE_CONNECTED) - fio_client_terminate(gc->client); - - fio_put_client(gc->client); - } - - flist_del(&ge->list); - free(ge); -} - static struct gui_entry *get_new_ge_with_tab(const char *name) { struct gui_entry *ge; @@ -2067,7 +2058,7 @@ static struct gui_entry *get_new_ge_with_tab(const char *name) ge = alloc_new_gui_entry(&main_ui); ge->vbox = new_client_page(ge); - g_signal_connect(ge->vbox, "destroy", G_CALLBACK(ge_destroy), ge); + g_signal_connect(ge->vbox, "destroy", G_CALLBACK(ge_widget_destroy), ge); ge->page_label = gtk_label_new(name); ge->page_num = gtk_notebook_append_page(GTK_NOTEBOOK(main_ui.notebook), ge->vbox, ge->page_label); @@ -2146,7 +2137,7 @@ static void file_close(GtkWidget *w, gpointer data) return; } - gtk_main_quit(); + gfio_quit(ui); } static void file_add_recent(struct gui *ui, const gchar *uri)