Home | History | Annotate | Download | only in fio
      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 
     12 struct probe_widget {
     13 	GtkWidget *hostname;
     14 	GtkWidget *os;
     15 	GtkWidget *arch;
     16 	GtkWidget *fio_ver;
     17 };
     18 
     19 struct 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 
     39 struct 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  */
     56 struct 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 
     83 enum {
     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 
     92 enum {
     93 	GFIO_BUTTON_CONNECT = 0,
     94 	GFIO_BUTTON_SEND,
     95 	GFIO_BUTTON_START,
     96 	GFIO_BUTTON_NR,
     97 };
     98 
     99 /*
    100  * Notebook entry
    101  */
    102 struct 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 
    139 struct end_results {
    140 	struct group_run_stats gs;
    141 	struct thread_stat ts;
    142 };
    143 
    144 struct gfio_client_options {
    145 	struct flist_head list;
    146 	struct thread_options o;
    147 };
    148 
    149 struct 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 
    171 extern void gfio_view_log(struct gui *ui);
    172 extern void gfio_set_state(struct gui_entry *ge, unsigned int state);
    173 extern void clear_ge_ui_info(struct gui_entry *ge);
    174 
    175 extern const char *gfio_graph_font;
    176 extern GdkColor gfio_color_white;
    177 extern GdkColor gfio_color_lightyellow;
    178 
    179 #endif
    180