#include "gerror.h"
#include "graph.h"
#include "gclient.h"
+#include "printing.h"
static void gfio_display_ts(struct fio_client *client, struct thread_stat *ts,
struct group_run_stats *rs);
gtk_widget_destroy(ge->results_window);
}
+static void results_print(GtkWidget *w, gpointer *data)
+{
+ struct gui_entry *ge = (struct gui_entry *) data;
+
+ gfio_print_results(ge);
+}
+
static GtkActionEntry results_menu_items[] = {
{ "FileMenuAction", GTK_STOCK_FILE, "File", NULL, NULL, NULL},
{ "GraphMenuAction", GTK_STOCK_FILE, "Graph", NULL, NULL, NULL},
+ { "PrintFile", GTK_STOCK_PRINT, "Print", "<Control>P", NULL, G_CALLBACK(results_print) },
{ "CloseFile", GTK_STOCK_CLOSE, "Close", "<Control>W", NULL, G_CALLBACK(results_close) },
};
static gint results_nmenu_items = sizeof(results_menu_items) / sizeof(results_menu_items[0]);
<ui> \
<menubar name=\"MainMenu\"> \
<menu name=\"FileMenu\" action=\"FileMenuAction\"> \
+ <menuitem name=\"Print\" action=\"PrintFile\" /> \
<menuitem name=\"Close\" action=\"CloseFile\" /> \
</menu> \
<menu name=\"GraphMenu\" action=\"GraphMenuAction\"> \
gtk_list_store_append(ui->log_model, &iter);
gtk_list_store_set(ui->log_model, &iter, 0, timebuf, -1);
gtk_list_store_set(ui->log_model, &iter, 1, client->hostname, -1);
- gtk_list_store_set(ui->log_model, &iter, 2, p->level, -1);
+ gtk_list_store_set(ui->log_model, &iter, 2, log_get_level(p->level), -1);
gtk_list_store_set(ui->log_model, &iter, 3, p->buf, -1);
if (p->level == FIO_LOG_ERR)
sprintf(dst, " - %s", eta_str);
}
-
+
gfio_update_thread_status(ge, output, perc);
gdk_threads_leave();
}
sprintf(dst, " - %s", eta_str);
}
-
+
gfio_update_thread_status_all(ui, output, perc);
gdk_threads_leave();
}
struct gfio_client *gc = client->client_data;
struct gui_entry *ge = gc->ge;
const char *os, *arch;
- char buf[64];
os = fio_get_os_string(probe->os);
if (!os)
if (!client->name)
client->name = strdup((char *) probe->hostname);
+ gc->client_cpus = le32_to_cpu(probe->cpus);
+ gc->client_flags = le64_to_cpu(probe->flags);
+
gdk_threads_enter();
gtk_label_set_text(GTK_LABEL(ge->probe.hostname), (char *) probe->hostname);
gtk_label_set_text(GTK_LABEL(ge->probe.os), os);
gtk_label_set_text(GTK_LABEL(ge->probe.arch), arch);
- sprintf(buf, "%u.%u.%u", probe->fio_major, probe->fio_minor, probe->fio_patch);
- gtk_label_set_text(GTK_LABEL(ge->probe.fio_ver), buf);
+ gtk_label_set_text(GTK_LABEL(ge->probe.fio_ver), (char *) probe->fio_version);
gfio_set_state(ge, GE_STATE_CONNECTED);
gdk_threads_leave();
}
+static void gfio_update_job_op(struct fio_client *client,
+ struct fio_net_cmd *cmd)
+{
+ uint32_t *pdu_error = (uint32_t *) cmd->payload;
+ struct gfio_client *gc = client->client_data;
+
+ gc->update_job_status = le32_to_cpu(*pdu_error);
+ gc->update_job_done = 1;
+}
+
static void gfio_client_timed_out(struct fio_client *client)
{
struct gfio_client *gc = client->client_data;
struct graph *g = p;
cairo_t *cr;
- cr = gdk_cairo_create(w->window);
+ cr = gdk_cairo_create(gtk_widget_get_window(w));
#if 0
if (graph_has_tooltips(g)) {
g_object_set(w, "has-tooltip", TRUE, NULL);
static gint on_config_lat_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 graph *g = data;
- graph_set_size(g, w->allocation.width, w->allocation.height);
- graph_set_size(g, w->allocation.width, w->allocation.height);
+ graph_set_size(g, width, height);
+ graph_set_size(g, width, height);
graph_set_position(g, 0, 0);
return TRUE;
}
*/
if (start == -1U)
return;
-
+
tree_view = gfio_output_lat_buckets(&io_u_lat[start], &ranges[start], end - start + 1);
ge->lat_bucket_graph = setup_lat_bucket_graph("Latency Buckets", &io_u_lat[start], &ranges[start], end - start + 1, 700.0, 300.0);
gtk_widget_set_size_request(GTK_WIDGET(drawing_area), 700, 300);
gtk_widget_modify_bg(drawing_area, GTK_STATE_NORMAL, &gfio_color_white);
gtk_container_add(GTK_CONTAINER(completion_vbox), drawing_area);
- g_signal_connect(G_OBJECT(drawing_area), "expose_event", G_CALLBACK(on_expose_lat_drawing_area), ge->lat_bucket_graph);
- g_signal_connect(G_OBJECT(drawing_area), "configure_event", G_CALLBACK(on_config_lat_drawing_area), ge->lat_bucket_graph);
+ g_signal_connect(G_OBJECT(drawing_area), GFIO_DRAW_EVENT, G_CALLBACK(on_expose_lat_drawing_area), ge->lat_bucket_graph);
+ g_signal_connect(G_OBJECT(drawing_area), "configure_event", G_CALLBACK(on_config_lat_drawing_area), ge->lat_bucket_graph);
gtk_box_pack_start(GTK_BOX(hbox), tree_view, TRUE, TRUE, 3);
}
gtk_widget_set_size_request(GTK_WIDGET(drawing_area), 700, 300);
gtk_widget_modify_bg(drawing_area, GTK_STATE_NORMAL, &gfio_color_white);
gtk_container_add(GTK_CONTAINER(completion_vbox), drawing_area);
- g_signal_connect(G_OBJECT(drawing_area), "expose_event", G_CALLBACK(on_expose_lat_drawing_area), ge->clat_graph);
+ g_signal_connect(G_OBJECT(drawing_area), GFIO_DRAW_EVENT, G_CALLBACK(on_expose_lat_drawing_area), ge->clat_graph);
g_signal_connect(G_OBJECT(drawing_area), "configure_event", G_CALLBACK(on_config_lat_drawing_area), ge->clat_graph);
gtk_box_pack_start(GTK_BOX(hbox), tree_view, TRUE, TRUE, 3);
.probe = gfio_probe_op,
.quit = gfio_quit_op,
.add_job = gfio_add_job_op,
+ .update_job = gfio_update_job_op,
.timed_out = gfio_client_timed_out,
.stop = gfio_client_stop,
.start = gfio_client_start,