struct eta_widget {
GtkWidget *names;
struct multitext_widget iotype;
+ struct multitext_widget bs;
struct multitext_widget ioengine;
struct multitext_widget iodepth;
GtkWidget *jobs;
struct gui_entry *ge;
struct fio_client *client;
GtkWidget *err_entry;
- unsigned int job_added;
struct thread_options o;
struct end_results *results;
gtk_entry_set_text(GTK_ENTRY(ge->eta.name), "");
#endif
multitext_update_entry(&ge->eta.iotype, 0, "");
+ multitext_update_entry(&ge->eta.bs, 0, "");
multitext_update_entry(&ge->eta.ioengine, 0, "");
multitext_update_entry(&ge->eta.iodepth, 0, "");
gtk_entry_set_text(GTK_ENTRY(ge->eta.jobs), "");
gtk_widget_destroy(w);
}
+static GtkWidget *get_scrolled_window(gint border_width)
+{
+ GtkWidget *scroll;
+
+ scroll = gtk_scrolled_window_new(NULL, NULL);
+ gtk_container_set_border_width(GTK_CONTAINER(scroll), border_width);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ return scroll;
+}
+
+static GtkWidget *gfio_disk_util_get_vbox(struct gui_entry *ge)
+{
+ GtkWidget *vbox, *box, *scroll, *res_notebook;
+
+ if (ge->disk_util_vbox)
+ return ge->disk_util_vbox;
+
+ scroll = get_scrolled_window(5);
+ vbox = gtk_vbox_new(FALSE, 3);
+ box = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), box, TRUE, FALSE, 5);
+
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), vbox);
+ res_notebook = get_results_window(ge);
+
+ gtk_notebook_append_page(GTK_NOTEBOOK(res_notebook), scroll, gtk_label_new("Disk utilization"));
+ ge->disk_util_vbox = box;
+ g_signal_connect(vbox, "destroy", G_CALLBACK(disk_util_destroy), ge);
+
+ return ge->disk_util_vbox;
+}
+
static int __gfio_disk_util_show(GtkWidget *res_notebook,
struct gfio_client *gc, struct cmd_du_pdu *p)
{
- GtkWidget *box, *frame, *entry, *vbox;
+ GtkWidget *box, *frame, *entry, *vbox, *util_vbox;
struct gui_entry *ge = gc->ge;
double util;
char tmp[16];
- res_notebook = get_results_window(ge);
-
- if (!ge->disk_util_vbox) {
- vbox = gtk_vbox_new(FALSE, 3);
- gtk_notebook_append_page(GTK_NOTEBOOK(res_notebook), vbox, gtk_label_new("Disk utilization"));
- ge->disk_util_vbox = vbox;
- g_signal_connect(vbox, "destroy", G_CALLBACK(disk_util_destroy), ge);
- }
+ util_vbox = gfio_disk_util_get_vbox(ge);
vbox = gtk_vbox_new(FALSE, 3);
- gtk_container_add(GTK_CONTAINER(ge->disk_util_vbox), vbox);
+ gtk_container_add(GTK_CONTAINER(util_vbox), vbox);
frame = gtk_frame_new((char *) p->dus.name);
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 2);
struct group_run_stats *rs)
{
struct gfio_client *gc = client->client_data;
+ struct gui_entry *ge = gc->ge;
gfio_add_end_results(gc, ts, rs);
gdk_threads_enter();
- gfio_display_end_results(gc);
+ if (ge->results_window)
+ __gfio_display_end_results(ge->results_notebook, gc, ts, rs);
+ else
+ gfio_display_end_results(gc);
gdk_threads_leave();
}
{
struct cmd_du_pdu *p = (struct cmd_du_pdu *) cmd->payload;
struct gfio_client *gc = client->client_data;
+ struct gui_entry *ge = gc->ge;
unsigned int nr = gc->nr_du;
gc->du = realloc(gc->du, (nr + 1) * sizeof(struct cmd_du_pdu));
gc->nr_du++;
gdk_threads_enter();
- gfio_disk_util_show(gc);
+ if (ge->results_window)
+ __gfio_disk_util_show(ge->results_notebook, gc, p);
+ else
+ gfio_disk_util_show(gc);
gdk_threads_leave();
}
struct gfio_client *gc = client->client_data;
struct thread_options *o = &gc->o;
struct gui_entry *ge = gc->ge;
- char tmp[8];
+ char *c1, *c2, *c3, *c4;
+ char tmp[80];
p->thread_number = le32_to_cpu(p->thread_number);
p->groupid = le32_to_cpu(p->groupid);
gtk_combo_box_set_active(GTK_COMBO_BOX(ge->eta.names), 0);
multitext_add_entry(&ge->eta.iotype, ddir_str(o->td_ddir));
+
+ c1 = fio_uint_to_kmg(o->min_bs[DDIR_READ]);
+ c2 = fio_uint_to_kmg(o->max_bs[DDIR_WRITE]);
+ c3 = fio_uint_to_kmg(o->min_bs[DDIR_READ]);
+ c4 = fio_uint_to_kmg(o->max_bs[DDIR_WRITE]);
+ sprintf(tmp, "%s-%s/%s-%s", c1, c2, c3, c4);
+ free(c1);
+ free(c2);
+ free(c3);
+ free(c4);
+ multitext_add_entry(&ge->eta.bs, tmp);
+
multitext_add_entry(&ge->eta.ioengine, (const char *) o->ioengine);
sprintf(tmp, "%u", o->iodepth);
multitext_add_entry(&ge->eta.iodepth, tmp);
multitext_set_entry(&ge->eta.iotype, 0);
+ multitext_set_entry(&ge->eta.bs, 0);
multitext_set_entry(&ge->eta.ioengine, 0);
multitext_set_entry(&ge->eta.iodepth, 0);
- gc->job_added++;
-
gfio_set_state(ge, GE_STATE_JOB_SENT);
gdk_threads_leave();
index = gtk_combo_box_get_active(box);
multitext_set_entry(&ge->eta.iotype, index);
+ multitext_set_entry(&ge->eta.bs, index);
multitext_set_entry(&ge->eta.ioengine, index);
multitext_set_entry(&ge->eta.iodepth, index);
}
struct gui_entry *ge = (struct gui_entry *) data;
multitext_free(&ge->eta.iotype);
+ multitext_free(&ge->eta.bs);
multitext_free(&ge->eta.ioengine);
multitext_free(&ge->eta.iodepth);
}
g_signal_connect(ge->eta.names, "changed", G_CALLBACK(combo_entry_changed), ge);
g_signal_connect(ge->eta.names, "destroy", G_CALLBACK(combo_entry_destroy), ge);
ge->eta.iotype.entry = new_info_entry_in_frame(probe_box, "IO");
+ ge->eta.bs.entry = new_info_entry_in_frame(probe_box, "Blocksize (Read/Write)");
ge->eta.ioengine.entry = new_info_entry_in_frame(probe_box, "IO Engine");
ge->eta.iodepth.entry = new_info_entry_in_frame(probe_box, "IO Depth");
ge->eta.jobs = new_info_entry_in_frame(probe_box, "Jobs");