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;
}
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;
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,
.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)
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;
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);
return;
}
- gtk_main_quit();
+ gfio_quit(ui);
}
static void file_add_recent(struct gui *ui, const gchar *uri)