#ifndef GFIO_H #define GFIO_H #include <gtk/gtk.h> #include "gcompat.h" #include "stat.h" #include "thread_options.h" #include "ghelpers.h" #include "graph.h" struct probe_widget { GtkWidget *hostname; GtkWidget *os; GtkWidget *arch; GtkWidget *fio_ver; }; struct eta_widget { GtkWidget *names; struct multitext_widget iotype; struct multitext_widget bs; struct multitext_widget ioengine; struct multitext_widget iodepth; GtkWidget *jobs; GtkWidget *files; GtkWidget *read_bw; GtkWidget *read_iops; GtkWidget *cr_bw; GtkWidget *cr_iops; GtkWidget *write_bw; GtkWidget *write_iops; GtkWidget *cw_bw; GtkWidget *cw_iops; GtkWidget *trim_bw; GtkWidget *trim_iops; }; struct gfio_graphs { #define DRAWING_AREA_XDIM 1000 #define DRAWING_AREA_YDIM 400 GtkWidget *drawing_area; struct graph *iops_graph; graph_label_t read_iops; graph_label_t write_iops; graph_label_t trim_iops; struct graph *bandwidth_graph; graph_label_t read_bw; graph_label_t write_bw; graph_label_t trim_bw; }; /* * Main window widgets and data */ struct gui { GtkUIManager *uimanager; GtkRecentManager *recentmanager; GtkActionGroup *actiongroup; guint recent_ui_id; GtkWidget *menu; GtkWidget *window; GtkWidget *vbox; GtkWidget *thread_status_pb; GtkWidget *buttonbox; GtkWidget *notebook; GtkWidget *error_info_bar; GtkWidget *error_label; GtkListStore *log_model; GtkWidget *log_tree; GtkWidget *log_view; struct gfio_graphs graphs; struct probe_widget probe; struct eta_widget eta; pthread_t server_t; pthread_t t; int handler_running; GHashTable *ge_hash; } main_ui; enum { GE_STATE_NEW = 1, GE_STATE_CONNECTED, GE_STATE_JOB_SENT, GE_STATE_JOB_STARTED, GE_STATE_JOB_RUNNING, GE_STATE_JOB_DONE, }; enum { GFIO_BUTTON_CONNECT = 0, GFIO_BUTTON_SEND, GFIO_BUTTON_START, GFIO_BUTTON_NR, }; /* * Notebook entry */ struct gui_entry { struct gui *ui; GtkWidget *vbox; GtkWidget *job_notebook; GtkWidget *thread_status_pb; GtkWidget *buttonbox; GtkWidget *button[GFIO_BUTTON_NR]; GtkWidget *notebook; GtkWidget *error_info_bar; GtkWidget *error_label; GtkWidget *results_window; GtkWidget *results_notebook; GtkUIManager *results_uimanager; GtkWidget *results_menu; GtkWidget *disk_util_vbox; GtkListStore *log_model; GtkWidget *log_tree; GtkWidget *log_view; struct gfio_graphs graphs; struct probe_widget probe; struct eta_widget eta; GtkWidget *page_label; gint page_num; unsigned int state; struct graph *clat_graph; struct graph *lat_bucket_graph; struct gfio_client *client; char *job_file; char *host; int port; int type; int server_start; }; struct end_results { struct group_run_stats gs; struct thread_stat ts; }; struct gfio_client_options { struct flist_head list; struct thread_options o; }; struct gfio_client { struct gui_entry *ge; struct fio_client *client; GtkWidget *err_entry; uint32_t client_cpus; uint64_t client_flags; struct flist_head o_list; unsigned int o_list_nr; struct end_results *results; unsigned int nr_results; uint32_t update_job_status; volatile uint32_t update_job_done; struct cmd_du_pdu *du; unsigned int nr_du; }; #define GFIO_MIME "text/fio" extern void gfio_view_log(struct gui *ui); extern void gfio_set_state(struct gui_entry *ge, unsigned int state); extern void clear_ge_ui_info(struct gui_entry *ge); extern const char *gfio_graph_font; extern GdkColor gfio_color_white; extern GdkColor gfio_color_lightyellow; #endif