1#ifndef GFIO_H 2#define GFIO_H 3 4#include <gtk/gtk.h> 5 6#include "gcompat.h" 7#include "stat.h" 8#include "thread_options.h" 9#include "ghelpers.h" 10#include "graph.h" 11 12struct probe_widget { 13 GtkWidget *hostname; 14 GtkWidget *os; 15 GtkWidget *arch; 16 GtkWidget *fio_ver; 17}; 18 19struct eta_widget { 20 GtkWidget *names; 21 struct multitext_widget iotype; 22 struct multitext_widget bs; 23 struct multitext_widget ioengine; 24 struct multitext_widget iodepth; 25 GtkWidget *jobs; 26 GtkWidget *files; 27 GtkWidget *read_bw; 28 GtkWidget *read_iops; 29 GtkWidget *cr_bw; 30 GtkWidget *cr_iops; 31 GtkWidget *write_bw; 32 GtkWidget *write_iops; 33 GtkWidget *cw_bw; 34 GtkWidget *cw_iops; 35 GtkWidget *trim_bw; 36 GtkWidget *trim_iops; 37}; 38 39struct gfio_graphs { 40#define DRAWING_AREA_XDIM 1000 41#define DRAWING_AREA_YDIM 400 42 GtkWidget *drawing_area; 43 struct graph *iops_graph; 44 graph_label_t read_iops; 45 graph_label_t write_iops; 46 graph_label_t trim_iops; 47 struct graph *bandwidth_graph; 48 graph_label_t read_bw; 49 graph_label_t write_bw; 50 graph_label_t trim_bw; 51}; 52 53/* 54 * Main window widgets and data 55 */ 56struct gui { 57 GtkUIManager *uimanager; 58 GtkRecentManager *recentmanager; 59 GtkActionGroup *actiongroup; 60 guint recent_ui_id; 61 GtkWidget *menu; 62 GtkWidget *window; 63 GtkWidget *vbox; 64 GtkWidget *thread_status_pb; 65 GtkWidget *buttonbox; 66 GtkWidget *notebook; 67 GtkWidget *error_info_bar; 68 GtkWidget *error_label; 69 GtkListStore *log_model; 70 GtkWidget *log_tree; 71 GtkWidget *log_view; 72 struct gfio_graphs graphs; 73 struct probe_widget probe; 74 struct eta_widget eta; 75 pthread_t server_t; 76 77 pthread_t t; 78 int handler_running; 79 80 GHashTable *ge_hash; 81} main_ui; 82 83enum { 84 GE_STATE_NEW = 1, 85 GE_STATE_CONNECTED, 86 GE_STATE_JOB_SENT, 87 GE_STATE_JOB_STARTED, 88 GE_STATE_JOB_RUNNING, 89 GE_STATE_JOB_DONE, 90}; 91 92enum { 93 GFIO_BUTTON_CONNECT = 0, 94 GFIO_BUTTON_SEND, 95 GFIO_BUTTON_START, 96 GFIO_BUTTON_NR, 97}; 98 99/* 100 * Notebook entry 101 */ 102struct gui_entry { 103 struct gui *ui; 104 105 GtkWidget *vbox; 106 GtkWidget *job_notebook; 107 GtkWidget *thread_status_pb; 108 GtkWidget *buttonbox; 109 GtkWidget *button[GFIO_BUTTON_NR]; 110 GtkWidget *notebook; 111 GtkWidget *error_info_bar; 112 GtkWidget *error_label; 113 GtkWidget *results_window; 114 GtkWidget *results_notebook; 115 GtkUIManager *results_uimanager; 116 GtkWidget *results_menu; 117 GtkWidget *disk_util_vbox; 118 GtkListStore *log_model; 119 GtkWidget *log_tree; 120 GtkWidget *log_view; 121 struct gfio_graphs graphs; 122 struct probe_widget probe; 123 struct eta_widget eta; 124 GtkWidget *page_label; 125 gint page_num; 126 unsigned int state; 127 128 struct graph *clat_graph; 129 struct graph *lat_bucket_graph; 130 131 struct gfio_client *client; 132 char *job_file; 133 char *host; 134 int port; 135 int type; 136 int server_start; 137}; 138 139struct end_results { 140 struct group_run_stats gs; 141 struct thread_stat ts; 142}; 143 144struct gfio_client_options { 145 struct flist_head list; 146 struct thread_options o; 147}; 148 149struct gfio_client { 150 struct gui_entry *ge; 151 struct fio_client *client; 152 GtkWidget *err_entry; 153 uint32_t client_cpus; 154 uint64_t client_flags; 155 156 struct flist_head o_list; 157 unsigned int o_list_nr; 158 159 struct end_results *results; 160 unsigned int nr_results; 161 162 uint32_t update_job_status; 163 volatile uint32_t update_job_done; 164 165 struct cmd_du_pdu *du; 166 unsigned int nr_du; 167}; 168 169#define GFIO_MIME "text/fio" 170 171extern void gfio_view_log(struct gui *ui); 172extern void gfio_set_state(struct gui_entry *ge, unsigned int state); 173extern void clear_ge_ui_info(struct gui_entry *ge); 174 175extern const char *gfio_graph_font; 176extern GdkColor gfio_color_white; 177extern GdkColor gfio_color_lightyellow; 178 179#endif 180